В ядре снова красивые вещи происходят. На этот раз предлагается сделать page eviction страниц памяти с помощью LRU кэша с эпохами или, как называют в патче, поколениями. Таблица со страницами памяти раз в какое-то время (в зависимости от нагрузки на память или после определенных операций) обходится, и эпоха повышается у тех страниц, которые не были использованы. Если памяти не хватает, и страницы надо вытяснять, то будут это делать с самых старших эпох == с самых старых поколений.



На андройде советуют немного эпох, на desktop x86 уже 4-8, для серверов и вообще 12-16.



В итоге получается -50% cpu у kswapd, 7% в среднем меньше страниц, которые делают pagefault снова (refault), системы более восприимчивы к оверкоммитам -- на 59% меньше OOM killer срабатываний при сильном напоре на работу с памятью. Лучшая .99 latency восстановления страницы при pagefault. Патч полезен и телефонам, и десктопам, и огромным серверам, например, Borg будет быстрее и легче находить джобы, которые используют больше, чем надо.



Люблю за это Google, если они решаются прийти и что-то закоммитить, то это всегда с огромным количеством подтверждающих цифр и данных.



https://lore.kernel.org/lkml/[email protected]/