Разработчики ядра Linux завершили масштабную рефакторинг подсистемы perf, направленный на устранение узких мест в работе скриптов анализа производительности. Ключевое изменение заключается в отказе от встроенных интерпретаторов Python и Perl в пользу выделенного Python C-extension модуля. Эта архитектура позволяет скриптам взаимодействовать с ядром напрямую, минуя накладные расходы на загрузку и инициализацию полноценного интерпретатора.
Результаты производительности
Главным триггером для изменений стала критически высокая нагрузка на процессор и длительное время выполнения стандартных команд perf script. Новый подход, реализованный через C-расширение, обеспечивает радикальный прирост скорости. Для наглядности сравнения эффективности старого и нового подхода:
| Параметр | Старый подход (встроенный Python) | Новый подход (C-модуль perf) |
|---|---|---|
| Время выполнения скрипта | 3.7 секунды | 0.1 секунды |
| Ускорение | — | в 37 раз |
| Зависимости сборки | Сложные (libpython) | Упрощены |
Технические детали и масштаб изменений
Работа выполнена инженером Google Ian Rogers при помощи ИИ-ассистента Gemini 3.1 Pro. Серия состоит из 49 патчей, которые переписывают около 21 000 строк кода. Основные технические решения включают:
- Удаление legacy-кода: Полностью исключен код, опирающийся на старую библиотеку
libpython. - Стандартизация: Скрипты теперь являются автономными Python-файлами, использующими новый модуль
perf, что упрощает их поддержку и распространение. - Снижение оверхеда: Устранена проблема высокой нагрузки на CPU, характерная для предыдущей реализации.
Данное изменение является фундаментальным для инструментов профилирования Linux. Ускорение обработки данных позволяет инженерам быстрее анализировать метрики производительности в реальном времени, не тратя ресурсы системы на сам процесс анализа. Патчи находятся на стадии рассмотрения в рассылке разработчиков ядра.
Источник: Phoronix ↗