]> granicus.if.org Git - zfs/commitdiff
Increase default arc_c_min
authorBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 20 Sep 2017 16:36:17 +0000 (09:36 -0700)
committerTony Hutter <hutter2@llnl.gov>
Wed, 20 Sep 2017 17:25:54 +0000 (10:25 -0700)
Increase the default arc_c_min value to which whichever is larger,
either 32M or 1/32 of total system memory.  This is advantageous for
systems with more than 1G of memory where performance issues may
occur when the ARC is allowed to collapse below a minimum size.
At the same time we want to use the bare minimum value which is
still functional so the filesystem can be used in very low memory
environments.

Reviewed-by: Tim Chase <tim@chase2k.com>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #6659

module/zfs/arc.c

index fe47d714a8683ea7b8ec2b00a2b5ca7ad30ab95e..0a09c443b0dcffe76d40c8e9f3e1265daa8bdeff 100644 (file)
@@ -6508,16 +6508,17 @@ arc_init(void)
        /* Set max to 1/2 of all memory */
        arc_c_max = allmem / 2;
 
+#ifdef _KERNEL
+       /* Set min cache to 1/32 of all memory, or 32MB, whichever is more */
+       arc_c_min = MAX(allmem / 32, 2ULL << SPA_MAXBLOCKSHIFT);
+#else
        /*
         * In userland, there's only the memory pressure that we artificially
         * create (see arc_available_memory()).  Don't let arc_c get too
         * small, because it can cause transactions to be larger than
         * arc_c, causing arc_tempreserve_space() to fail.
         */
-#ifndef        _KERNEL
        arc_c_min = MAX(arc_c_max / 2, 2ULL << SPA_MAXBLOCKSHIFT);
-#else
-       arc_c_min = 2ULL << SPA_MAXBLOCKSHIFT;
 #endif
 
        arc_c = arc_c_max;