]> granicus.if.org Git - zfs/commitdiff
Dbuf hash table should be sized as is the arc hash table
authorTim Chase <tim@chase2k.com>
Mon, 31 Aug 2015 01:59:23 +0000 (20:59 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 2 Sep 2015 16:33:02 +0000 (09:33 -0700)
Commit 49ddb315066e372f31bda29a5c546a9eccc8b418 added the
zfs_arc_average_blocksize parameter to allow control over the size of
the arc hash table.  The dbuf hash table's size should be determined
similarly.

Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #3721

include/sys/arc.h
module/zfs/dbuf.c

index 0961d4b4d2cb14db1c5bcffebf78484acb9489c0..f88fe0298a7747fd2d35656d3a38b6a9f28fd4d9 100644 (file)
@@ -51,6 +51,9 @@ typedef void arc_done_func_t(zio_t *zio, arc_buf_t *buf, void *private);
 typedef void arc_prune_func_t(int64_t bytes, void *private);
 typedef int arc_evict_func_t(void *private);
 
+/* Shared module parameters */
+extern int zfs_arc_average_blocksize;
+
 /* generic arc_done_func_t's which you can use */
 arc_done_func_t arc_bcopy_func;
 arc_done_func_t arc_getbuf_func;
index 3807418c97bfcd673c23ed4384fbcea1384e979a..bab546c28d0cf0b11558cb7a78a35609312d7ae7 100644 (file)
@@ -376,10 +376,11 @@ dbuf_init(void)
 
        /*
         * The hash table is big enough to fill all of physical memory
-        * with an average 4K block size.  The table will take up
-        * totalmem*sizeof(void*)/4K (i.e. 2MB/GB with 8-byte pointers).
+        * with an average block size of zfs_arc_average_blocksize (default 8K).
+        * By default, the table will take up
+        * totalmem * sizeof(void*) / 8K (1MB per GB with 8-byte pointers).
         */
-       while (hsize * 4096 < physmem * PAGESIZE)
+       while (hsize * zfs_arc_average_blocksize < physmem * PAGESIZE)
                hsize <<= 1;
 
 retry: