В Яндекс Perforator развёрнут в кластере, насчитывающем более 10 тысяч узлов, и применяется для выявления и исправления проблем с производительностью в различных сервисах, включая Яндекс Поиск и Яндекс Рекламу. Отмечается, что Perforator способствовал устранению узких мест и оптимизации ресурсоёмких вычислений, благодаря чему компании Яндекс удалось на 20% снизить расходы на серверы.
Заявленные возможности:
- Использование подсистемы ядра eBPF и API perf_events для сбора сведений о работе компонентов ядра Linux и приложений в пространстве пользователя. Накладные расходы при сборе метрик приводят к снижению производительности примерно на 0.1%. Поддерживается работа только на системах с архитектурой x86-64.
- Масштабируемое хранилище профилей производительности. Для хранения метаданных профилей используется СУБД
ClickHouse, для хранения бинарных метаданных - PostgreSQL, а для хранения raw-профилей и бинарных данных - любые хранилища, совместимые с Amazon S3. - Возможность раскрутки стека вызовов (unwinding) без необходимости включения при сборке программ отладочных символов и опции "-fno-omit-frame-pointer" (сохраняет указатель на кадр стека, содержащий адреса возврата и переменные функции).
- Наличие языка запросов и web-интерфейса для инспектирования нагрузки на CPU при работе приложений.
- Для наглядной оценки узких мест применяется визуализация в стиле FlameGraph.
- Возможность профилирования проектов, использующих различные языки и runtime, без внесения изменений в сборочные процессы и без перекомпиляции программ. Заявлена поддержка языков программирования C++, Go, Rust, Java, Python и JavaScript/Node.js.
- Возможность генерации профилей sPGO для последующей сборки приложений с оптимизациями на основе результатов профилирования кода (PGO - Profile-guided optimization), которые позволяют генерировать более оптимальный код на основе анализа особенностей выполнения программы.
- Поддержка использования в качестве замены инструментария perf в Linux.
- Автоматизация развёртывания в кластерах на базе Kubernetes. На каждом узле запускается специальный агент, собирающий, агрегирующий, сжимающий и передающий данные о производительности. Данные передаются агентами в формате, совместимом с pprof, через gRPC в микросервисы, отвечающие за сбор, хранение, анализ, символизацию (преобразование адресов в имена функций и позиции в коде) и обработку профилей и исполняемых файлов (необходимы при раскрутке стека).
Источник: https://www.opennet.ru/opennews/art.shtml?num=62641
(opennet.ru, основная лента)