util/disk_cache: scale cache according to filesystem size

Select higher of current 1G default or 10% of filesystem where
cache is located.

Acked-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Grazvydas Ignotas <notasas@gmail.com>
This commit is contained in:
Alan Swanson
2017-03-06 16:17:32 +00:00
committed by Timothy Arceri
parent f1e9671442
commit b7e03d87e4

View File

@@ -31,6 +31,7 @@
#include <sys/file.h> #include <sys/file.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/statvfs.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
@@ -45,6 +46,7 @@
#include "util/mesa-sha1.h" #include "util/mesa-sha1.h"
#include "util/ralloc.h" #include "util/ralloc.h"
#include "main/errors.h" #include "main/errors.h"
#include "util/macros.h"
#include "disk_cache.h" #include "disk_cache.h"
@@ -228,6 +230,7 @@ disk_cache_create(const char *gpu_name, const char *timestamp)
uint64_t max_size; uint64_t max_size;
int fd = -1; int fd = -1;
struct stat sb; struct stat sb;
struct statvfs vfs = { 0 };
size_t size; size_t size;
/* If running as a users other than the real user disable cache */ /* If running as a users other than the real user disable cache */
@@ -389,9 +392,11 @@ disk_cache_create(const char *gpu_name, const char *timestamp)
} }
} }
/* Default to 1GB for maximum cache size. */ /* Default to 1GB or 10% of filesystem for maximum cache size. */
if (max_size == 0) if (max_size == 0) {
max_size = 1024*1024*1024; statvfs(path, &vfs);
max_size = MAX2(1024*1024*1024, vfs.f_blocks * vfs.f_bsize / 10);
}
cache->max_size = max_size; cache->max_size = max_size;