diff options
author | shodanshok <[email protected]> | 2024-08-16 22:34:07 +0200 |
---|---|---|
committer | Tony Hutter <[email protected]> | 2024-08-27 14:53:03 -0700 |
commit | cd42e992b5972cc011a0ed82a8b50df67972828f (patch) | |
tree | 01b76de1571a5fa2b6fe53bdbba818c824279d75 /module | |
parent | c60df6a80179f45a64daeb47113b0a342461ef97 (diff) |
Enable L2 cache of all (MRU+MFU) metadata but MFU data only
`l2arc_mfuonly` was added to avoid wasting L2 ARC on read-once MRU
data and metadata. However it can be useful to cache as much
metadata as possible while, at the same time, restricting data
cache to MFU buffers only.
This patch allow for such behavior by setting `l2arc_mfuonly` to 2
(or higher). The list of possible values is the following:
0: cache both MRU and MFU for both data and metadata;
1: cache only MFU for both data and metadata;
2: cache both MRU and MFU for metadata, but only MFU for data.
Reviewed-by: Alexander Motin <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Gionatan Danti <[email protected]>
Closes #16343
Closes #16402
Diffstat (limited to 'module')
-rw-r--r-- | module/zfs/arc.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/module/zfs/arc.c b/module/zfs/arc.c index f25afa312..d7ee9d32a 100644 --- a/module/zfs/arc.c +++ b/module/zfs/arc.c @@ -9055,12 +9055,17 @@ l2arc_write_buffers(spa_t *spa, l2arc_dev_t *dev, uint64_t target_sz) */ for (int pass = 0; pass < L2ARC_FEED_TYPES; pass++) { /* - * If pass == 1 or 3, we cache MRU metadata and data - * respectively. + * pass == 0: MFU meta + * pass == 1: MRU meta + * pass == 2: MFU data + * pass == 3: MRU data */ - if (l2arc_mfuonly) { + if (l2arc_mfuonly == 1) { if (pass == 1 || pass == 3) continue; + } else if (l2arc_mfuonly > 1) { + if (pass == 3) + continue; } uint64_t passed_sz = 0; |