Skip to content

Commit

Permalink
Disable arc_p adapt dampener by default
Browse files Browse the repository at this point in the history
It's unclear why adjustments to arc_p need to be dampened as they are in
arc_adjust. With that said, it's removal significantly improves the arc's
ability to "warm up" to a given workload. Thus, I'm disabling by default
until its usefulness is better understood.

Signed-off-by: Prakash Surya <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Issue #2110
  • Loading branch information
Prakash Surya authored and behlendorf committed Feb 22, 2014
1 parent f521ce1 commit 6242278
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
11 changes: 11 additions & 0 deletions man/man5/zfs-module-parameters.5
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,17 @@ Disable aggressive arc_p growth
Use \fB1\fR for yes (default) and \fB0\fR to disable.
.RE

.sp
.ne 2
.na
\fBzfs_arc_p_dampener_disable\fR (int)
.ad
.RS 12n
Disable arc_p adapt dampener
.sp
Use \fB1\fR for yes (default) and \fB0\fR to disable.
.RE

.sp
.ne 2
.na
Expand Down
14 changes: 12 additions & 2 deletions module/zfs/arc.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,9 @@ int zfs_arc_grow_retry = 5;
/* disable anon data aggressively growing arc_p */
int zfs_arc_p_aggressive_disable = 1;

/* disable arc_p adapt dampener in arc_adapt */
int zfs_arc_p_dampener_disable = 1;

/* log2(fraction of arc to reclaim) */
int zfs_arc_shrink_shift = 5;

Expand Down Expand Up @@ -2633,15 +2636,19 @@ arc_adapt(int bytes, arc_state_t *state)
if (state == arc_mru_ghost) {
mult = ((arc_mru_ghost->arcs_size >= arc_mfu_ghost->arcs_size) ?
1 : (arc_mfu_ghost->arcs_size/arc_mru_ghost->arcs_size));
mult = MIN(mult, 10); /* avoid wild arc_p adjustment */

if (!zfs_arc_p_dampener_disable)
mult = MIN(mult, 10); /* avoid wild arc_p adjustment */

arc_p = MIN(arc_c, arc_p + bytes * mult);
} else if (state == arc_mfu_ghost) {
uint64_t delta;

mult = ((arc_mfu_ghost->arcs_size >= arc_mru_ghost->arcs_size) ?
1 : (arc_mru_ghost->arcs_size/arc_mfu_ghost->arcs_size));
mult = MIN(mult, 10);

if (!zfs_arc_p_dampener_disable)
mult = MIN(mult, 10);

delta = MIN(bytes * mult, arc_p);
arc_p = MAX(0, arc_p - delta);
Expand Down Expand Up @@ -5554,6 +5561,9 @@ MODULE_PARM_DESC(zfs_arc_grow_retry, "Seconds before growing arc size");
module_param(zfs_arc_p_aggressive_disable, int, 0644);
MODULE_PARM_DESC(zfs_arc_p_aggressive_disable, "disable aggressive arc_p grow");

module_param(zfs_arc_p_dampener_disable, int, 0644);
MODULE_PARM_DESC(zfs_arc_p_dampener_disable, "disable arc_p adapt dampener");

module_param(zfs_arc_shrink_shift, int, 0644);
MODULE_PARM_DESC(zfs_arc_shrink_shift, "log2(fraction of arc to reclaim)");

Expand Down

0 comments on commit 6242278

Please sign in to comment.