Linux Tutorial #11 커널 성능 측정 도구 (perf)

문연수·2021년 5월 23일
0

Linux Tutorial

목록 보기
12/25
post-thumbnail

이번 글에서는 리눅스 커널 성능 측정 도구인 perf 를 사용해볼 예정이다. perf 는 리눅스 커널 소스의 tools/perf/ 경로에 있다. 글을 쓰는 현재(2021-05-23) 기준으론 apt 명령어로 5.12.2 커널 버전의 perf 를 다운받을 수 없다. 그래서 우선 해당 프로그램을 설치하는 법에 대해서 소개하려 한다.

1. perf 설치

우분투에선 다음과 같이 패키지 매니저로 설치가 가능하다.

$ sudo apt-get install linux-tools-common linux-tools-generic linux-tools-(uname -r)

* uname -r 양 옆의 괄호를 ` (backquote) 으로 바꿔야 제대로 동작합니다.

앞의 두 패키지는 설치가 제대로 될 수도 있지만, 마지막 패키지는 설치가 안 될 수도 있다. 아마 109 은 설치가 제대로 안될텐데 그럼 커널 디렉터리로 들어가서 직접 설치하는 방법으로 진행해야 한다.

cd tools/perf
make
make install
sudo cp perf /usr/bin

다음과 같이 5.12.2 가 나오면 성공이다.

2. perf 사용

가볍게 perf 명령어를 커맨드 라인에 입력해보자:
perf 명령어는...
(> perf [OPTIONS] COMMAND [ARGS]

다음의 꼴을 가진다. 일단 list 옵션을 입력해서 평가 가능한 여러 항목이 나온다. 옵션 확인과 평가 가능 항목까지 확인 했다면 마지막으로 perf test 옵션을 입력해서 perf 가 제대로 사용 가능한지 테스트한다. perf 의 많은 옵션은 root 권한으로 실행해야 정상 동작하고 test 도 그 중 하나이다. 따라서 앞으론 perf 사용 시 무조건 앞에 sudo 를 붙여서 실행할 것이다.

# perf test

일부 항목에서 FAILED!Skip 이 나올 수 있는데 크게 문제되는 사항은 아니다. 다만 FAILED 항목이 Ok 항목보다 많다면 뭔가 문제가 있는 것이므로 글을 처음부터 다시 읽어보길 바란다.

2. top 옵션

top 옵션은 현재 커널 내부에서 실행되는 함수(Symbol)들의 부하(Overhead) 비율을 스냅샵 형태로 표시한다. 실행 결과는 다음과 같다:

q 를 입력해서 탈출하는 것이 가능하다.

3. stat 옵션

다음은 stat 옵션이다. statperf 수행 중 커널 내부에서 발생한 이벤트 처리에 대한 통계 정보를 보여준다. 다음 명령어를 입력하여 3 초 발생한 이벤트 처리에 대한 통계를 보여준다:

# perf stat sleep 3

4. record 옵션

위에서 확인해본 top 옵션은 커널에서 실행하고 있는 정보들을 실시간으로 확인할 수 있다는 장점이 있지만, 반대로 내용이 실시간으로 변하기 때문에 분석하기에는 어려울 수 있다. record 옵션을 사용하면 이러한 분석 정보를 파일로 저장할 수 있다.

# perf record (Ctrl + C 누르면 기록 종료)

다음과 같이 파일이 저장된 것을 확인할 수 있다. 다만 아쉽게도 해당 파일은 사람이 볼 수 있는 형태(text 파일)가 아니기 때문에 다른 방법으로 결과를 확인해야 한다. 아래에서 후술할 report 옵션이 바로 그것이다.

record 옵션은 이 밖에 여러 다양한 설정을 제공한다:

옵션설명명령어 예시
-p특정 PID 의 정보만 저장perf record -p PID
-a모든 프로세스의 정보 저장perf record -a sleep 5
-g스택 정보도 함께 저장perf record -ag
-e특정 EVENT 의 정보를 저장perf record -e NAME
-F분석 주기(Hz)를 NUM 으로 설정perf record -F NUM

5. report 옵션

report 옵션은 record 에 의해 저장된 perf.data 파일을 분석하기 위해 사용되어질 수 있다. perf report 를 실행하여 perf record -ag 의 결과를 출력하면 다음과 같은 결과를 확인할 수 있다:

스택 옵션도 추가해서 실행 결과가 옆으로 길게 늘어졌다. 보통 이런 식으로 출력된 결과는 가독성이 썩 좋지 않기 때문에 위 정보를 조금 더 쉽게 확인할 수 있게 만들어주는 프로그램이 있다.

플레임 그래프 (FlameGraphs)

git clone https://github.com/brendangregg/Flamegraph.git

다음 저장소를 복제한 후 들어가서 파일을 확인하면 다양한 script 가 있는 것을 확인할 수 있다.

# perf record -e context-switching -ag (Ctrl + C 중지)
# perf script | Flamegraph/stackcollapse-perf.pl | Flamegraph/flamegraph.pl > graph.svg

위 명령어는 context-switching 이벤트에 발생에 대한 스택 비율(가로 방향)과 호출된 스택 깊이(세로 방향)을 보여주는 이미지를 생성한다.

6. probe 옵션

probe 옵션은 커널에서 특정 이벤트가 동작하는 시점부터 분석정보를 추적할 수 있다. list 에서 찾은 옵션을 probe 를 통해 등록한다.

# perf probe <event>

을 통해 이벤트를 등록할 수 있고 등록된 이벤트는 다음을 통해 확인 가능하다:

# perf probe --list

삭제는 --del 옵션을 줘서 삭제할 수 있다.

# perf probe --del <event>

위 사진은 schedule 이벤트에 대한 이벤트 추적 실행을 등록, 등록된 probe 를 바탕으로 기록을 진행한 것이다. 결과는 앞서 해봤던 것처럼 report 옵션으로 확인 가능하다.

# perf report

필자의 경우 아래와 같은 report 결과가 나왔다:

출처

[책] 리눅스 커널 소스 해설: 기초 입문 (정재준 저)
[사이트] https://xiaoyanzhuo.github.io/2019/01/18/Perf-Tool.html

profile
2000.11.30

0개의 댓글