/* number of seconds before growing cache again */
int zfs_arc_grow_retry = 5;
-/* shift of arc_c for calculating both min and max arc_p */
-int zfs_arc_p_min_shift = 4;
-
/* disable anon data aggressively growing arc_p */
int zfs_arc_p_aggressive_disable = 1;
arc_shrink(uint64_t bytes)
{
if (arc_c > arc_c_min) {
- uint64_t arc_p_min;
uint64_t to_free;
to_free = bytes ? bytes : arc_c >> zfs_arc_shrink_shift;
else
arc_c = arc_c_min;
- arc_p_min = (arc_c >> zfs_arc_p_min_shift);
to_free = bytes ? bytes : arc_p >> zfs_arc_shrink_shift;
- if (arc_p > arc_p_min + to_free)
+ if (arc_p > to_free)
atomic_add_64(&arc_p, -to_free);
else
- arc_p = arc_p_min;
+ arc_p = 0;
if (arc_c > arc_size)
arc_c = MAX(arc_size, arc_c_min);
arc_adapt(int bytes, arc_state_t *state)
{
int mult;
- uint64_t arc_p_min = (arc_c >> zfs_arc_p_min_shift);
if (state == arc_l2c_only)
return;
1 : (arc_mfu_ghost->arcs_size/arc_mru_ghost->arcs_size));
mult = MIN(mult, 10); /* avoid wild arc_p adjustment */
- arc_p = MIN(arc_c - arc_p_min, arc_p + bytes * mult);
+ arc_p = MIN(arc_c, arc_p + bytes * mult);
} else if (state == arc_mfu_ghost) {
uint64_t delta;
mult = MIN(mult, 10);
delta = MIN(bytes * mult, arc_p);
- arc_p = MAX(arc_p_min, arc_p - delta);
+ arc_p = MAX(0, arc_p - delta);
}
ASSERT((int64_t)arc_p >= 0);
module_param(zfs_arc_shrink_shift, int, 0644);
MODULE_PARM_DESC(zfs_arc_shrink_shift, "log2(fraction of arc to reclaim)");
-module_param(zfs_arc_p_min_shift, int, 0644);
-MODULE_PARM_DESC(zfs_arc_p_min_shift, "arc_c shift to calc min/max arc_p");
-
module_param(zfs_disable_dup_eviction, int, 0644);
MODULE_PARM_DESC(zfs_disable_dup_eviction, "disable duplicate buffer eviction");