Working set protection that is compatible with both the traditional LRU and the Multi-Gen LRU (a.k.a. lru_gen)
It is suspected that the large-scale modification of the VMM in Linux 6.11 has caused issues with the memory reclamation mechanism. Since le9uo is also affected, the release of patches for version 6.11 has been canceled.
le9uo 1.3 and above comes with a long-waited Multi-Gen LRU (MGLRU, or lru_gen) compatibility. It comes with the working set protection features like it has to the traditional LRU.
Please be aware that there is an MGLRU-specific limitation.
At the latest Linux kernel (version 6.7.5 at the time this is written), Multi-gen LRU lacks the ability to comply with the vm.swappiness
sysctl knob like it was initially designed.
Almost regardless of what value is put in vm.swappiness
(as long as greater than 0), it seems to evict whatever it finds first.
This behavior is coming from MGLRU's page-scanner design/implementation, and it causes to start to thrash much earlier and easier than the traditional LRU.
MGLRU does rather temporal approach called min_ttl
, but this design has another problem; it's much more difficult to estimate each system's optimal effective value than traditional LRU + le9's spacial approach, and when the value is out of the effective range, it easily results either in too early invocation of OOM killer, or thrashing.
le9uo does not fix this issue, but greatly mitigates it so that these limitations due to MGLRU's design/implementation isn't a problem anymore.
$ sudo sysctl -w vm.workingset_protection=1
1 Enables le9uo.
0 Disables le9uo.
How much in percentile of total physical memory to preserve for HARD protection of anonymous pages.
How much in percentile of total physical memory to preserve for HARD protection of clean file pages.
How much in percentile of total physical memory to preserve for SOFT protection of clean file pages.