Инструменты11 августа 2026 г., 17:18 МСК🤖 Auto

Ускорение Linux MM до 12.8x: оптимизация follow_page_mask

Инженер Meta Rik van Riel представил патчи, позволяющие функции follow_page_mask() обрабатывать страницы пакетами, что дало прирост производительности gup_test до 12.8x.

Баннер новости 5533

Суть оптимизации

Разработчик ядра Linux Rik van Riel, работающий в Meta, реализовал значительное улучшение подсистемы управления памятью (MM). Ключевая проблема заключалась в том, что функция follow_page_mask(), отвечающая за трансляцию виртуальных адресов в структуры страниц (struct page), ранее обрабатывала страницы по одной. Это создавало узкое место для вызывающих кодов, таких как get_user_pages().

Новые патчи (RFC) адаптируют механизм так, чтобы «проходчики» (walkers) могли возвращать более одной страницы за один вызов. Это позволяет пакетировать запросы на поиск страниц, существенно снижая накладные расходы на переключение контекста и обработку таблиц страниц.

Результаты бенчмарков

Для оценки эффективности изменений использовалась утилита gup_test, предназначенная для тестирования функций управления памятью пользователя. Тестирование показало впечатляющие результаты ускорения:

Метрика Значение Примечание
Максимальный прирост 12.8x Наблюдено в тесте gup_test
Оптимизируемая функция follow_page_mask() Трансляция виртуальных адресов
Затронутый API get_user_pages() Ключевой потребитель оптимизации

Почему это важно

Хотя патчи находятся на стадии Request for Comments (RFC), достигнутый прирост в 12.8 раз указывает на то, что пакетная обработка запросов к таблицам страниц может стать стандартом для высокопроизводительных рабочих нагрузок. Это особенно критично для сред с высокой плотностью аллокаций памяти, где каждый цикл процессора на обработку страницы имеет значение. Разработчики ядра уже оценивают серию патчей, и их интеграция может положительно сказаться на производительности приложений, активно работающих с памятью.

Источник: Phoronix ↗