util/disk_cache: scale cache according to filesystem size
authorAlan Swanson <reiver@improbability.net>
Mon, 6 Mar 2017 16:17:32 +0000 (16:17 +0000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Wed, 15 Mar 2017 00:15:11 +0000 (11:15 +1100)
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>
src/util/disk_cache.c

index 54134441bdacdab09f5ce35c05cf0667c28d4efe..e015e56f5e2388bbd970ac2c91710afd6dc21f67 100644 (file)
@@ -31,6 +31,7 @@
 #include <sys/file.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/statvfs.h>
 #include <sys/mman.h>
 #include <unistd.h>
 #include <fcntl.h>
@@ -45,6 +46,7 @@
 #include "util/mesa-sha1.h"
 #include "util/ralloc.h"
 #include "main/errors.h"
+#include "util/macros.h"
 
 #include "disk_cache.h"
 
@@ -228,6 +230,7 @@ disk_cache_create(const char *gpu_name, const char *timestamp)
    uint64_t max_size;
    int fd = -1;
    struct stat sb;
+   struct statvfs vfs = { 0 };
    size_t size;
 
    /* 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. */
-   if (max_size == 0)
-      max_size = 1024*1024*1024;
+   /* Default to 1GB or 10% of filesystem for maximum cache size. */
+   if (max_size == 0) {
+      statvfs(path, &vfs);
+      max_size = MAX2(1024*1024*1024, vfs.f_blocks * vfs.f_bsize / 10);
+   }
 
    cache->max_size = max_size;