Суть оптимизации
Разработчик ядра 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 ↗
