Démarrage rapide | Contribuer
Ce projet contient une bibliothèque pour les API d'événements de performances Linux. À la base se trouve une implémentation de l'appel système perf_event_open (2)
, utilisable tel quel.
La bibliothèque contient également plusieurs utilitaires nécessaires à une utilisation stable des API. Les utilitaires assurent la gestion des erreurs, la validation du support et bien plus encore.
L'objectif de cette bibliothèque est d'obtenir des résultats très précis sans aucune surcharge lors de la mesure . Autrement dit, la configuration des mesures peut être coûteuse, mais l'exécution des mesures ne nécessite aucune surcharge ajoutée par cette bibliothèque. Cela présente le grand avantage d’obtenir des résultats aussi précis que possible et d’être aussi flexible que possible, au détriment de l’UX.
Pour construire le projet, installez d'abord libcap
:
sudo apt install libcap-dev
sudo yum install libcap-devel
sudo zapper install libcap-devel
Ensuite, construisez simplement le projet.
make build
Des exemples sont disponibles dans le répertoire examples
, sortis dans le répertoire build/examples
.
./build/examples/full
Démarrage rapide
Caractéristiques
Documentation
Contribuer
CAP_PERFMON
ajouté dans la version 5.9) Il existe de nombreux outils de profilage disponibles pour Linux. Des outils tels que Valgrind (et Callgrind) sont des moyens efficaces et précis d'effectuer une analyse des performances de la mémoire et de la pile d'appels. Il produit cependant des mesures simplifiées pour des valeurs telles que les cycles du processeur et les instructions puisqu'il ne mesure pas le matériel natif. D'autres outils tels que gprof, prof et gperftools sont très proches du matériel, mais ne prennent pas en charge la mesure des événements du noyau et des événements inactifs. D'autres méthodes de mesure des instructions et des cycles utilisées dans SUPERCOP, Papi, etc. peuvent être inexactes, en comptant simplement les cycles globaux effectués par un cœur de processeur. C’est là que les API de performances Linux brillent. Les API fournissent un ensemble complet d'outils pour mesurer les événements des utilisateurs et du noyau, que ce soit via des points d'arrêt définis par logiciel ou des compteurs matériels.
L'outil perf
CLI est excellent pour fournir un moyen d'utiliser ces API, mais il mesure l'exécution d'un programme entier. L'appel système sous-jacent, perf_event_open (2)
, n'a pas de wrapper glibc et est donc assez verbeux - en particulier lors de l'exécution de nombreuses mesures.
Cette bibliothèque vise à combler cette petite lacune de niche où des mesures très précises d'un code spécifique dans un binaire.
A suivre au fur et à mesure que l'API se stabilise.
Toute contribution est la bienvenue. Si vous n'êtes pas capable de le coder vous-même, peut-être que quelqu'un d'autre le peut - alors publiez un problème si vous avez quelque chose en tête.
Assurez-vous de remplir les conditions préalables suivantes :
$CC
fait référence à gcc
8 ou version ultérieurelibcap
est installéclang-format
est installé (si vous souhaitez formater le code)compiledb
est installé (si vous souhaitez formater le code ou l'analyser avec d'autres outils 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
Les exemples peuvent être testés à l'aide de Docker.
docker build -t perf .
docker run -it --rm --privileged perf ./pi
mmap
ed