빠른 시작 | 기여하다
이 프로젝트에는 Linux 성능 이벤트 API용 라이브러리가 있습니다. 그 핵심에는 그대로 사용할 수 있는 perf_event_open (2)
syscall 구현이 있습니다.
라이브러리에는 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
추가). Linux에는 다양한 프로파일링 도구가 있습니다. Valgrind(및 Callgrind)와 같은 도구는 메모리 및 호출 스택의 성능 분석을 수행하는 훌륭하고 정확한 방법입니다. 그러나 기본 하드웨어를 측정하지 않기 때문에 CPU 주기 및 명령과 같은 값에 대한 간단한 측정을 생성합니다. gprof, prof 및 gperftools와 같은 다른 도구는 하드웨어와 훨씬 유사하지만 커널 및 유휴 이벤트 측정에 대한 지원이 부족합니다. SUPERCOP, Papi 등에 사용되는 명령과 주기를 측정하는 다른 방법은 부정확할 수 있으며 단순히 CPU 코어에서 수행되는 전체 주기를 계산하는 것뿐입니다. 이것이 Linux 성능 API가 빛나는 곳입니다. 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
이벤트에 대한 지원 추가