1. perf란?
2. perf설치
3. perf 종류 및 사용법
1. perf란?
리눅스 시스템 성능 프로 파일링하는 도구이다.
프로파일링 (profiling, 프로그램 프로파일링/소프트웨어 프로파일링) 또는 성능 분석은 프로그램의 시간 복잡도 및 공간(메모리), 특정 명령어 이용, 함수 호출의 주기와 빈도 등을 측정하는 동적 프로그램 분석의 한 형태이다. 프로파일링 정보는 대개가 프로그램 최적화를 보조하기 위해 사용된다. 프로파일링은 프로파일러(profiler)라는 도구를 사용하여 프로그램 소스 코드나 이진 실행 파일을 계측 분석함으로써 수행한다.
linux kernel에 포함된 systeml 영역부터 user-level까지 한번에 성능(프로세스 및 코어별 사용량, 캐시 미스 등)에 대한 trouble shooting가능하다.
즉, 성능에 문제를 일으키는 곳이 어디인지를 알아낼 수 있다.
2. perf설치
/usr/src/에 사용하고 있는 우분투의 버전 소스코드가 있다면 make을 사용하여 설치할 수 있다.
/usr/src/(your ubuntu name)/tools/perf/에 들어가서
$make
을 하면 perf 실행파일이 생성된다.
소스코드가 없다면 소스코드를 설치해서 진행하는것이 best지만 그렇지 못한다면
아래와같이 apt-get을 이용해서 설치해도 무방하다.
$apt-get install linux-tools-$(uname -r)
$apt-get install linux-cloud-tools-$(uname -r)
perf에서 event sampling을 할때 사용하는 event 정의 종류는 하드웨어 이벤트, 하드웨어 캐쉬 이벤트, 스프트웨어, Trace Point, Probe Point등이 있다.
이러한 perf tool의 event sampling 항목은
perf list을 통해 확인할수 있다.
$perf list
3. perf 종류 및 사용법
perf에서는 프로파일링의 통계와 기록을 위해서 stat와 record 사용한다.
stat (count event)
-kernel의 event 카운터에 대한 통계 수치를 보여준다.
예시. perf stat을 실행하여 $line의 pid에 대한 프로파일링 통계를 $time 동안 실행해서 share/midFile/stat_vm%count.txt에 저장
$/usr/src/linux-5.1.5/tools/perf/perf stat -p $line -d -o share/midFile/stat_vm$count.txt sleep $time
# started on Thu Jun 20 16:56:42 2019
Performance counter stats for process id '7758':
33,030.19 msec task-clock # 0.550 CPUs utilized
263,294 context-switches # 0.008 M/sec
57,317 cpu-migrations # 0.002 M/sec
0 page-faults # 0.000 K/sec
63,751,080,241 cycles # 1.930 GHz
83,759,201,610 instructions # 1.31 insn per cycle
18,669,193,144 branches # 565.216 M/sec
532,237,695 branch-misses # 2.85% of all branches
27,333,884,008 L1-dcache-loads # 827.543 M/sec
305,354,282 L1-dcache-load-misses # 1.12% of all L1-dcache hits
121,142,442 LLC-loads # 3.668 M/sec
5,924,402 LLC-load-misses # 4.89% of all LL-cache hits
60.003964526 seconds time elapsed
record
- perf.data. 덤프 파일에 모든 event 기록한다.
- Timestamp, CPU, PID, 명령어 또는 호출된 라이브러리등..
- 이벤트 수집시에 overhead가 발생할수 있다. (ex: -g를 이용하여 call graph를 생성할 경우)
top
pert top과 유사한 기능으로 htop을 쓰는 것도 일반적이지만, 각각의 영역별 (Kernel, User) 오버헤드 분석을 제공하지 않는다.
Usage에 대해서는 분석이 가능하나, 어느지점이 병목 지점인가에 대해서는 분석이 어렵다.
Perf top을 이용하여 실시간 모니터링을 통한 각각의 object들에 대한 영역별 overhead 확인 가능하다.
그밖에
perf list, perf report, perf script등이 있다.
cpu 사용량 측정시에 perf를 사용하면 정확도가 떨어진다.
자세한 내용은 아래글을 참조하면 된다.
2019/06/20 - [programming/Linux] - 우분투 프로파일링 perf, top 정확도(ubuntu performance tools)
'Programming > Linux' 카테고리의 다른 글
ftrace 커널 성능 측정도구 사용법[How to ues ftrace] (0) | 2019.08.16 |
---|---|
Linux module comfile kernel 리눅스 모듈 컴파일 커널 함수 실행시간 측정 (0) | 2019.08.14 |
우분투 프로파일링 perf, top 정확도(ubuntu performance tools) (1) | 2019.06.20 |
리눅스 커널 컴파일 [ubuntu kernel compile] (0) | 2019.06.02 |
우분투 커널 5.0업그레이드 및 커널 수정 [How to upgrade linux Kernel 5.0~ on ubuntu 18.04 LTS with kernel compile] (1) | 2019.05.31 |