Allow to tune maximum and minimum memory used by ARC.
This commit is contained in:
parent
07607ad707
commit
639fdcd852
@ -152,8 +152,15 @@ static int arc_dead;
|
||||
/*
|
||||
* These tunables are for performance analysis.
|
||||
*/
|
||||
uint64_t zfs_arc_max;
|
||||
uint64_t zfs_arc_min;
|
||||
u_long zfs_arc_max;
|
||||
u_long zfs_arc_min;
|
||||
TUNABLE_ULONG("vfs.zfs.arc_max", &zfs_arc_max);
|
||||
TUNABLE_ULONG("vfs.zfs.arc_min", &zfs_arc_min);
|
||||
SYSCTL_DECL(_vfs_zfs);
|
||||
SYSCTL_ULONG(_vfs_zfs, OID_AUTO, arc_max, CTLFLAG_RD, &zfs_arc_max, 0,
|
||||
"Maximum ARC size");
|
||||
SYSCTL_ULONG(_vfs_zfs, OID_AUTO, arc_min, CTLFLAG_RD, &zfs_arc_min, 0,
|
||||
"Minimum ARC size");
|
||||
|
||||
/*
|
||||
* Note that buffers can be on one of 5 states:
|
||||
@ -2720,16 +2727,14 @@ arc_init(void)
|
||||
else
|
||||
arc_c_max = arc_c_min;
|
||||
arc_c_max = MAX(arc_c * 6, arc_c_max);
|
||||
#ifdef notyet
|
||||
/*
|
||||
* Allow the tunables to override our calculations if they are
|
||||
* reasonable (ie. over 64MB)
|
||||
*/
|
||||
if (zfs_arc_max > 64<<20 && zfs_arc_max < physmem * PAGESIZE)
|
||||
if (zfs_arc_max > 64<<20 && zfs_arc_max < vm_kmem_size)
|
||||
arc_c_max = zfs_arc_max;
|
||||
if (zfs_arc_min > 64<<20 && zfs_arc_min <= arc_c_max)
|
||||
arc_c_min = zfs_arc_min;
|
||||
#endif
|
||||
arc_c = arc_c_max;
|
||||
arc_p = (arc_c >> 1);
|
||||
|
||||
@ -2739,6 +2744,9 @@ arc_init(void)
|
||||
if (arc_c < arc_c_min)
|
||||
arc_c = arc_c_min;
|
||||
|
||||
zfs_arc_min = arc_c_min;
|
||||
zfs_arc_max = arc_c_max;
|
||||
|
||||
arc_anon = &ARC_anon;
|
||||
arc_mru = &ARC_mru;
|
||||
arc_mru_ghost = &ARC_mru_ghost;
|
||||
|
@ -152,8 +152,15 @@ static int arc_dead;
|
||||
/*
|
||||
* These tunables are for performance analysis.
|
||||
*/
|
||||
uint64_t zfs_arc_max;
|
||||
uint64_t zfs_arc_min;
|
||||
u_long zfs_arc_max;
|
||||
u_long zfs_arc_min;
|
||||
TUNABLE_ULONG("vfs.zfs.arc_max", &zfs_arc_max);
|
||||
TUNABLE_ULONG("vfs.zfs.arc_min", &zfs_arc_min);
|
||||
SYSCTL_DECL(_vfs_zfs);
|
||||
SYSCTL_ULONG(_vfs_zfs, OID_AUTO, arc_max, CTLFLAG_RD, &zfs_arc_max, 0,
|
||||
"Maximum ARC size");
|
||||
SYSCTL_ULONG(_vfs_zfs, OID_AUTO, arc_min, CTLFLAG_RD, &zfs_arc_min, 0,
|
||||
"Minimum ARC size");
|
||||
|
||||
/*
|
||||
* Note that buffers can be on one of 5 states:
|
||||
@ -2720,16 +2727,14 @@ arc_init(void)
|
||||
else
|
||||
arc_c_max = arc_c_min;
|
||||
arc_c_max = MAX(arc_c * 6, arc_c_max);
|
||||
#ifdef notyet
|
||||
/*
|
||||
* Allow the tunables to override our calculations if they are
|
||||
* reasonable (ie. over 64MB)
|
||||
*/
|
||||
if (zfs_arc_max > 64<<20 && zfs_arc_max < physmem * PAGESIZE)
|
||||
if (zfs_arc_max > 64<<20 && zfs_arc_max < vm_kmem_size)
|
||||
arc_c_max = zfs_arc_max;
|
||||
if (zfs_arc_min > 64<<20 && zfs_arc_min <= arc_c_max)
|
||||
arc_c_min = zfs_arc_min;
|
||||
#endif
|
||||
arc_c = arc_c_max;
|
||||
arc_p = (arc_c >> 1);
|
||||
|
||||
@ -2739,6 +2744,9 @@ arc_init(void)
|
||||
if (arc_c < arc_c_min)
|
||||
arc_c = arc_c_min;
|
||||
|
||||
zfs_arc_min = arc_c_min;
|
||||
zfs_arc_max = arc_c_max;
|
||||
|
||||
arc_anon = &ARC_anon;
|
||||
arc_mru = &ARC_mru;
|
||||
arc_mru_ghost = &ARC_mru_ghost;
|
||||
|
Loading…
x
Reference in New Issue
Block a user