Inicio rápido | Contribuir
Este proyecto contiene una biblioteca para las API de eventos de rendimiento de Linux. En esencia, se encuentra una implementación de la llamada al sistema perf_event_open (2)
, que se puede utilizar tal cual.
La biblioteca también contiene varias utilidades necesarias para el uso estable de las API. Las utilidades proporcionan manejo de errores, validación de soporte y más.
El objetivo de esta biblioteca son resultados de alta precisión sin ningún tipo de sobrecarga durante la medición . Es decir, configurar mediciones puede ser costoso, pero realizar mediciones no requiere ninguna sobrecarga agregada por esta biblioteca. Esto conlleva el gran beneficio de lograr resultados lo más precisos posible y ser lo más flexible posible, a costa de la UX.
Para construir el proyecto, primero instale libcap
:
sudo apt install libcap-dev
sudo yum install libcap-devel
sudo zapper install libcap-devel
Luego, simplemente construye el proyecto.
make build
Los ejemplos están disponibles en el directorio examples
y se envían al directorio build/examples
.
./build/examples/full
Inicio rápido
Características
Documentación
Contribuir
CAP_PERFMON
agregado en 5.9) Hay muchas herramientas de creación de perfiles disponibles para Linux. Herramientas como Valgrind (y Callgrind) son formas excelentes y precisas de realizar análisis de rendimiento de la memoria y la pila de llamadas. Sin embargo, produce mediciones simplificadas para valores como ciclos de CPU e instrucciones, ya que no mide hardware nativo. Otras herramientas como gprof, prof y gperftools están mucho más cerca del hardware, pero carecen de soporte para medir eventos inactivos y del kernel. Otras formas de medir instrucciones y ciclos utilizadas en SUPERCOP, Papi, etc. pueden ser inexactas, simplemente contando los ciclos totales realizados por un núcleo de CPU. Aquí es donde brillan las API de rendimiento de Linux. Las API proporcionan un conjunto completo de herramientas para medir eventos del usuario y del kernel, ya sea a través de puntos de interrupción definidos por software o contadores de hardware.
La herramienta perf
CLI es excelente para proporcionar una forma de utilizar estas API, pero mide la ejecución de un programa completo. La llamada al sistema subyacente, perf_event_open (2)
, no tiene un contenedor glibc y, por lo tanto, es bastante detallada, especialmente cuando se realizan muchas mediciones.
Esta biblioteca tiene como objetivo llenar este pequeño nicho donde se realizan mediciones altamente precisas de código específico en un binario.
Continuará mientras el API se estabiliza.
Cualquier contribución es bienvenida. Si no puede codificarlo usted mismo, tal vez alguien más lo pueda hacer, así que publique un problema si tiene algo en mente.
Asegúrese de cumplir con los siguientes requisitos previos:
$CC
se refiere a gcc
8 o posteriorlibcap
está instaladoclang-format
está instalado (si desea formatear el código)compiledb
está instalado (si desea formatear el código o analizarlo con otras herramientas 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
Los ejemplos se pueden probar usando Docker.
docker build -t perf .
docker run -it --rm --privileged perf ./pi
mmap
ed