Introduce ZFS module parameter l2arc_mfuonly
In certain workloads it may be beneficial to reduce wear of L2ARC devices by not caching MRU metadata and data into L2ARC. This commit introduces a new tunable l2arc_mfuonly for this purpose. Reviewed-by: Matthew Ahrens <mahrens@delphix.com> Reviewed-by: Richard Elling <Richard.Elling@RichardElling.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: George Amanakis <gamanakis@gmail.com> Closes #10710
This commit is contained in:
parent
ebc4b52369
commit
feb3a7eef1
|
@ -198,6 +198,22 @@ feature.
|
|||
Default value: \fB200\fR%.
|
||||
.RE
|
||||
|
||||
.sp
|
||||
.ne 2
|
||||
.na
|
||||
\fBl2arc_mfuonly\fR (int)
|
||||
.ad
|
||||
.RS 12n
|
||||
Controls whether only MFU metadata and data are cached from ARC into L2ARC.
|
||||
This may be desired to avoid wasting space on L2ARC when reading/writing large
|
||||
amounts of data that are not expected to be accessed more than once. The
|
||||
default is \fB0\fR, meaning both MRU and MFU data and metadata are cached.
|
||||
When turning off (\fB0\fR) this feature some MRU buffers will still be present
|
||||
in ARC and eventually cached on L2ARC.
|
||||
.sp
|
||||
Use \fB0\fR for no (default) and \fB1\fR for yes.
|
||||
.RE
|
||||
|
||||
.sp
|
||||
.ne 2
|
||||
.na
|
||||
|
|
|
@ -894,6 +894,12 @@ static boolean_t l2arc_write_eligible(uint64_t, arc_buf_hdr_t *);
|
|||
static void l2arc_read_done(zio_t *);
|
||||
static void l2arc_do_free_on_write(void);
|
||||
|
||||
/*
|
||||
* l2arc_mfuonly : A ZFS module parameter that controls whether only MFU
|
||||
* metadata and data are cached from ARC into L2ARC.
|
||||
*/
|
||||
int l2arc_mfuonly = 0;
|
||||
|
||||
/*
|
||||
* L2ARC TRIM
|
||||
* l2arc_trim_ahead : A ZFS module parameter that controls how much ahead of
|
||||
|
@ -8909,6 +8915,15 @@ l2arc_write_buffers(spa_t *spa, l2arc_dev_t *dev, uint64_t target_sz)
|
|||
* Copy buffers for L2ARC writing.
|
||||
*/
|
||||
for (int try = 0; try < L2ARC_FEED_TYPES; try++) {
|
||||
/*
|
||||
* If try == 1 or 3, we cache MRU metadata and data
|
||||
* respectively.
|
||||
*/
|
||||
if (l2arc_mfuonly) {
|
||||
if (try == 1 || try == 3)
|
||||
continue;
|
||||
}
|
||||
|
||||
multilist_sublist_t *mls = l2arc_sublist_lock(try);
|
||||
uint64_t passed_sz = 0;
|
||||
|
||||
|
@ -10562,6 +10577,9 @@ ZFS_MODULE_PARAM(zfs_l2arc, l2arc_, rebuild_enabled, INT, ZMOD_RW,
|
|||
ZFS_MODULE_PARAM(zfs_l2arc, l2arc_, rebuild_blocks_min_l2size, ULONG, ZMOD_RW,
|
||||
"Min size in bytes to write rebuild log blocks in L2ARC");
|
||||
|
||||
ZFS_MODULE_PARAM(zfs_l2arc, l2arc_, mfuonly, INT, ZMOD_RW,
|
||||
"Cache only MFU data from ARC into L2ARC");
|
||||
|
||||
ZFS_MODULE_PARAM_CALL(zfs_arc, zfs_arc_, lotsfree_percent, param_set_arc_int,
|
||||
param_get_int, ZMOD_RW, "System free memory I/O throttle in bytes");
|
||||
|
||||
|
|
Loading…
Reference in New Issue