Allocate zfs_znode_cache on the Linux slab
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
This commit is contained in:
parent
d07a16360c
commit
5074bfe8ad
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue