Быстрый старт | Способствовать
Этот проект содержит библиотеку для API-интерфейсов событий производительности Linux. В его основе лежит реализация системного вызова perf_event_open (2)
, которую можно использовать как есть.
Библиотека также содержит несколько утилит, необходимых для стабильного использования API. Утилиты обеспечивают обработку ошибок, поддержку проверки и многое другое.
Целью этой библиотеки являются получение высокоточных результатов без каких-либо дополнительных затрат во время измерений . То есть настройка измерений может быть дорогостоящей, но выполнение измерений требует нулевых накладных расходов, добавляемых этой библиотекой. Это дает большое преимущество в достижении максимально точных результатов и максимальной гибкости за счет UX.
Чтобы собрать проект, сначала установите libcap
:
sudo apt install libcap-dev
sudo yum install libcap-devel
sudo zapper install libcap-devel
Затем просто создайте проект.
make build
Примеры доступны в каталоге examples
и выводятся в каталог build/examples
.
./build/examples/full
Быстрый старт
Функции
Документация
Способствовать
CAP_PERFMON
добавлен в версии 5.9). Для Linux доступно множество инструментов профилирования. Такие инструменты, как Valgrind (и Callgrind), являются отличными и точными способами анализа производительности памяти и стека вызовов. Однако он производит упрощенные измерения таких значений, как циклы ЦП и инструкции, поскольку он не измеряет собственное оборудование. Другие инструменты, такие как gprof, prof и gperftools, во многом близки к аппаратному обеспечению, но не поддерживают измерение событий ядра и простоя. Другие способы измерения инструкций и циклов, используемые в SUPERCOP, Papi и т. д., могут быть неточными, поскольку они просто подсчитывают общее количество циклов, выполняемых ядром ЦП. Именно здесь блестят API-интерфейсы производительности Linux. API предоставляют полный набор инструментов для измерения событий пользователя и ядра — будь то с помощью программно-определяемых точек останова или аппаратных счетчиков.
Инструмент perf
CLI отлично подходит для использования этих API, но он измеряет выполнение всей программы. Базовый системный вызов perf_event_open (2)
не имеет оболочки glibc и поэтому является довольно многословным, особенно при выполнении большого количества измерений.
Эта библиотека призвана заполнить этот небольшой нишевый пробел, где необходимы высокоточные измерения конкретного кода в двоичном файле.
Продолжение следует по мере стабилизации API.
Любой вклад приветствуется. Если вы не можете написать код самостоятельно, возможно, это может сделать кто-то другой, поэтому опубликуйте проблему, если у вас есть что-то на уме.
Убедитесь, что вы соответствуете следующим предварительным условиям:
$CC
относится к gcc
8 или новее.libcap
установленclang-format
установлен (если вы хотите отформатировать код)compiledb
установлена (если вы хотите отформатировать код или проанализировать его с помощью других инструментов llvm) # Clone the repository
git clone https://github.com/AlexGustafsson/perf && cd perf
# Format the code
make format
# Build the library
make library
# Build examples
make examples
Примеры можно протестировать с помощью Docker.
docker build -t perf .
docker run -it --rm --privileged perf ./pi
mmap