mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-18 02:20:59 +03:00
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
127daad223
commit
78d84f56d1
@ -198,6 +198,22 @@ feature.
|
|||||||
Default value: \fB200\fR%.
|
Default value: \fB200\fR%.
|
||||||
.RE
|
.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
|
.sp
|
||||||
.ne 2
|
.ne 2
|
||||||
.na
|
.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_read_done(zio_t *);
|
||||||
static void l2arc_do_free_on_write(void);
|
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
|
||||||
* l2arc_trim_ahead : A ZFS module parameter that controls how much ahead of
|
* 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.
|
* Copy buffers for L2ARC writing.
|
||||||
*/
|
*/
|
||||||
for (int try = 0; try < L2ARC_FEED_TYPES; try++) {
|
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);
|
multilist_sublist_t *mls = l2arc_sublist_lock(try);
|
||||||
uint64_t passed_sz = 0;
|
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,
|
ZFS_MODULE_PARAM(zfs_l2arc, l2arc_, rebuild_blocks_min_l2size, ULONG, ZMOD_RW,
|
||||||
"Min size in bytes to write rebuild log blocks in L2ARC");
|
"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,
|
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");
|
param_get_int, ZMOD_RW, "System free memory I/O throttle in bytes");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user