Skip to content

Commit

Permalink
Allocate zfs_znode_cache on the Linux slab
Browse files Browse the repository at this point in the history
The Linux slab, in general, performs better than the SPl slab in cases
where a lot of objects are allocated and fragmentation is likely present.

This patch fixes pathologically bad behavior in cases where the ARC is
filled with mostly metadata and a user program needs to allocate and
dirty enough memory which would require an insignificant amount of the
ARC to be reclaimed.

If zfs_znode_cache is on the SPL slab, the system may spin for a very
long time trying to reclaim sufficient memory.  If it is on the Linux
slab, the behavior has been observed to be much more predictible; the
memory is reclaimed more efficiently.

Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #3283
  • Loading branch information
dweeezil authored and behlendorf committed Apr 17, 2015
1 parent d07a163 commit 7af6322
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions module/zfs/zfs_znode.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,12 +147,14 @@ void
zfs_znode_init(void)
{
/*
* Initialize zcache
* Initialize zcache. The KMC_SLAB hint is used in order that it be
* backed by kmalloc() when on the Linux slab in order that any
* wait_on_bit() operations on the related inode operate properly.
*/
ASSERT(znode_cache == NULL);
znode_cache = kmem_cache_create("zfs_znode_cache",
sizeof (znode_t), 0, zfs_znode_cache_constructor,
zfs_znode_cache_destructor, NULL, NULL, NULL, KMC_KMEM);
zfs_znode_cache_destructor, NULL, NULL, NULL, KMC_SLAB);
}

void
Expand Down

0 comments on commit 7af6322

Please sign in to comment.