Replies: 1 comment
-
I don't think the code you're refering to is the issue. The ARC splits the cache between MRU and MFU (which is technically not MFU but that's another discussion). Assuming it can't grow in overall size, then if it wants to grow the MFU, it has to reduce the MRU. However, it only maintains a single MRU size target. Thus when it wants to reduce the MRU and no user data is eligible for eviction, it "has" to evict metadata, hence the code you posted. Now, I'm not sure if |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello,
afaik ARC eviction is done under memory pressure.
Shouldn't
zfs_arc_min
andzfs_arc_meta_min
be some kind of guaranteed lower limits for ARC buffers ?I my configuration (with no memory pressure at all) eviction prevents metadata even from reaching
zfs_arc_meta_min
.So I had a look into the
arc.c
code (2.1.16):The
else
part will be executed whenameta <= arc_meta_min
and potentially evict metadata (last line of the code).So this is why
arc_meta_min
seems to be ignored.The same error (?) is made for the mfu buffer a few lines further down - with an additional comment flaw:
Generally speaking, I think that eviction should be completely disabled as long as
zfs_arc_min
is not reached. I did not find any guard for this inarc_evict_impl()
. This function relies on argumentbytes
but there is no guarantee that the numerous calling functions properly set this value.Beta Was this translation helpful? Give feedback.
All reactions