From 69de34219af4a4d100cc5ed155a68ab03393fca4 Mon Sep 17 00:00:00 2001 From: Tim Chase Date: Sun, 30 Aug 2015 20:59:23 -0500 Subject: Dbuf hash table should be sized as is the arc hash table 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 Signed-off-by: Brian Behlendorf Closes #3721 --- include/sys/arc.h | 3 +++ module/zfs/dbuf.c | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/sys/arc.h b/include/sys/arc.h index 0961d4b4d..f88fe0298 100644 --- a/include/sys/arc.h +++ b/include/sys/arc.h @@ -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; diff --git a/module/zfs/dbuf.c b/module/zfs/dbuf.c index 3807418c9..bab546c28 100644 --- a/module/zfs/dbuf.c +++ b/module/zfs/dbuf.c @@ -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: -- cgit v1.2.3