Início rápido | Contribuir
Este projeto contém uma biblioteca para APIs de eventos de desempenho do Linux. Em sua essência está uma implementação do syscall perf_event_open (2)
, utilizável como está.
A biblioteca também contém vários utilitários necessários para o uso estável das APIs. Os utilitários fornecem tratamento de erros, validação de suporte e muito mais.
O foco desta biblioteca são resultados altamente precisos, sem qualquer sobrecarga durante a medição . Ou seja, configurar medições pode ser caro, mas realizar medições não requer nenhuma sobrecarga adicionada por esta biblioteca. Isso traz o grande benefício de obter resultados tão precisos quanto possível e ser o mais flexível possível, às custas da UX.
Para construir o projeto, primeiro instale libcap
:
sudo apt install libcap-dev
sudo yum install libcap-devel
sudo zapper install libcap-devel
Então, basta construir o projeto.
make build
Os exemplos estão disponíveis no diretório examples
, com saída para o diretório build/examples
.
./build/examples/full
Início rápido
Características
Documentação
Contribuir
CAP_PERFMON
adicionado na versão 5.9) Existem muitas ferramentas de criação de perfil disponíveis para Linux. Ferramentas como Valgrind (e Callgrind) são maneiras excelentes e precisas de realizar análises de desempenho da memória e da pilha de chamadas. No entanto, produz medições simplificadas para valores como ciclos de CPU e instruções, uma vez que não mede hardware nativo. Outras ferramentas como gprof, prof e gperftools são muito próximas do hardware, mas não possuem suporte para medir eventos de kernel e inativos. Outras formas de medir instruções e ciclos usadas em SUPERCOP, Papi etc. podem ser imprecisas, simplesmente contando os ciclos gerais executados por um núcleo da CPU. É aqui que as APIs de desempenho do Linux brilham. As APIs fornecem um conjunto abrangente de ferramentas para medir eventos do usuário e do kernel - seja por meio de pontos de interrupção definidos por software ou contadores de hardware.
A ferramenta CLI perf
é ótima para fornecer uma maneira de usar essas APIs, mas mede a execução de um programa inteiro. A chamada de sistema subjacente, perf_event_open (2)
, não possui wrapper glibc e, portanto, é bastante detalhada - especialmente ao realizar muitas medições.
Esta biblioteca visa preencher esta pequena lacuna de nicho onde medições altamente precisas de código específico em um binário.
Continuará à medida que a API se estabilizar.
Qualquer contribuição é bem-vinda. Se você não consegue codificá-lo sozinho, talvez outra pessoa consiga - então poste um problema se houver algo em sua mente.
Certifique-se de atender aos seguintes pré-requisitos:
$CC
refere-se ao gcc
8 ou mais recentelibcap
está instaladoclang-format
está instalado (se você deseja formatar o código)compiledb
está instalado (se você quiser formatar o código ou analisá-lo com outras ferramentas 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
Os exemplos podem ser testados usando Docker.
docker build -t perf .
docker run -it --rm --privileged perf ./pi
mmap
ed