본문 바로가기

programming/Linux

perf 설명 및 간단 사용법 (Performance Counter for Linux)

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

htop 사용

pert top과 유사한 기능으로 htop을 쓰는 것도 일반적이지만, 각각의 영역별 (Kernel, User) 오버헤드 분석을 제공하지 않는다.

Usage에 대해서는 분석이 가능하나, 어느지점이 병목 지점인가에 대해서는 분석이 어렵다.

 

perf top

Perf top을 이용하여 실시간 모니터링을 통한 각각의 object들에 대한 영역별 overhead 확인 가능하다.

 

 

그밖에

perf list, perf report, perf script등이 있다.

 

 

 

 

 

cpu 사용량 측정시에 perf를 사용하면 정확도가 떨어진다.

자세한 내용은 아래글을 참조하면 된다. 

2019/06/20 - [programming/Linux] - 우분투 프로파일링 perf, top 정확도(ubuntu performance tools)

 

우분투 프로파일링 perf, top 정확도(ubuntu performance tools)

커널의 병목현상을 확인하기 위해 보통 프로파일링도구를 사용한다. 보통 perf와 top, htop등을 사용한다. perf는 아래의 단계를 진행한다. sampling을 통한 event정보 수집 및 분석 profiling : 병목 구간을 찾..

jjudrgn.tistory.com