Суть инновации: от защиты к проактивному продвижению
Разработчик ядра Linux Kairui Song представил новую серию патчей MGLRU-FG (Frequency Guided Promotion). Если классический механизм Multi-Gen LRU (MGLRU) оптимизировал вытеснение страниц при нехватке памяти, то новая версия добавляет продвижение страниц на основе частоты их обращения (access-time frequency-guided promotion).
Ключевое изменение заключается во введении унифицированных хелперов, основанных на счетчике обращений (refs) к folio. Теперь система не ждет срабатывания контроллера PID, а проактивно повышает страницу в иерархии LRU, когда счетчик достигает определенных порогов. Это позволяет ядру точнее различать «горячие» наборы данных (workingset).
Технические детали и оптимизация памяти
Внедрение MGLRU-FG не только ускоряет работу, но и делает структуру данных более эффективной. Разработчик упростил использование флагов PG_workingset и PG_referenced, объединив их в младшие биты счетчика refs.
- Экономия ресурсов: Использование битов в структуре MGLRU сокращено на 1 бит, так как для записи максимального значения счетчика (7) требуется всего один дополнительный бит.
- Пороговые значения: Введены формальные константы для уровней активности:
LRU_REFS_REFERENCED (1),LRU_REFS_WORKINGSET (2),LRU_REFS_PROTECTED (3)иLRU_REFS_MAX (7).
Результаты бенчмарков: от 10% до 76%
Тестирование проводилось на различных архитектурах, включая серверы, десктопы и Android. Результаты демонстрируют значительный прирост производительности в конкретных сценариях, особенно там, где высока нагрузка на подкачку (swap/zRAM).
| Тестовая нагрузка | Результат / Изменение | Примечание |
|---|---|---|
| Компиляция ядра Linux (96 jobs) | Ускорение на ~10 секунд | При высокой нагрузке на вытеснение страниц |
| MongoDB | +13.5% | Общая производительность |
| Chromium / Node.js (zRAM) | +76% | Значительное улучшение при использовании zRAM как swap |
| FIO (ввод-вывод) | +11% | Пропускная способность |
Статус и перспективы
На данный момент патчи находятся в статусе RFC (Request for Comments), так как изменение затрагивает фундаментальные механизмы Active/Inactive списков LRU. Разработчик отмечает, что решение стабильно и готово к использованию, однако требует дальнейшей доработки для борьбы с анонимным переполнением (anon over-reclaim), которое более заметно в версии V3 по сравнению с V2. Тем не менее, общий прирост производительности и снижение количества повторных обращений к странице (refault) делают MGLRU-FG перспективным кандидатом на включение в основное ядро.
Источник: Phoronix ↗
