학습/스토리지 시스템

linux perf 사용법 (리눅스 성능 측정 도구)

roquen4145 2025. 1. 20. 07:50

perf 소개

linux를 위한 성능 측정을 위한 도구로 CPU/PMU의 하드웨어 레벨 정보를 사용하거나
software counter, tracepointer 등을 이용한 소프트웨어 기능을 사용합니다.

 

perf 설치

perf는 아래와 같이 설치합니다.

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

 

 

perf 사용방법 ( flamegraph와 함께)

perf는 아래와 같이 사용합니다.

perf [--version] [--help] [OPTIONS] COMMAND [ARGS]

주요 command는 record, report, list, stat, top 등이 있습니다.

https://man7.org/linux/man-pages/man1/perf.1.html

perf record

perf record는 성능 카운터 프로파일을 수집하여 perf.data로 저장합니다.

여러가지 옵션이 있으며 간단하게 어떤 식으로 돌아가는지 확인하려면 아래 명령어를 사용합니다.

perf record -F 99 -a --call-graph dwarf -- sleep 10

위 명령어는 10초동안 모든 cpu에 대해서 초당 99번 샘플을 dwarf 파일 포맷으로 함수 호출관계를 기록하라는 명령입니다.

명령을 수행하면 명령을 실행한 위치에 perf.data라는 파일이 생성됩니다.

위 명령어 예시는 flamegraph를 활용할 때 기본으로 사용할 수 있는 명령어입니다.

flamegraph에 대해서는 아래에 기술하겠습니다.

 

perf record의 다른 옵션들입니다.

-e, --event= : 수집할 이벤트를 특정합니다. perf list로 확인가능합니다.

-p, --pid= : 수집할 프로세스 아이디를 특정합니다.

-t, --tid= : 수집할 스레드 아이디를 특정합니다.

-C, --cpu : 수집할 cpu 번호를 특정합니다.

https://man7.org/linux/man-pages/man1/perf-record.1.html

perf report

perf report는 perf.data를 읽어서 프로파일을 보여줍니다.

https://man7.org/linux/man-pages/man1/perf-report.1.html

perf list

perf record에서 필터링할 수 있는 이벤트를 보여줍니다.

perf event에 대해서는 자세하게 별도의 포스팅에서 다루겠습니다.

perf stat

성능 정보에 대해서 통계를 측정하는 명령어 입니다.

실시간으로 프로그램이나 시스템 정보를 측정할 수도 있고

특정 시간만큼 측정할 수도 있습니다.

perf stat ls

ls 명령을 실행하면서 기본 이벤트 통계를 출력하기

 

perf stat -a sleep 5

5초 동안 시스템 전체의 성능 통계를 측정하기

perf top

실시간 성능 정보를 출력하는 명령어입니다.

 

perf top

기본 사용 명령어

perf top -G

호출 관계를 트리형태로 출력

 

Flamegraph 사용하기

perf를 사용할 경우 정보들을 확인할 수는 있지만 한 눈에 보기 어렵습니다.

따라서 flamegraph를 사용하면 어느 부분에서 리소스를 많이 잡아먹는지 볼 수 있습니다.

사용법은 아래 repository에서 소스코드를 다운받고 몇 가지 스크립트를 실행하면 됩니다.

https://github.com/brendangregg/FlameGraph

# 성능 측정 (perf.data 생성 및 out.perf로 변환)
perf record -F 99 -a --call-graph dwarf -- sleep 60
perf script > out.perf

# stack folding (같은 호출스택에 있는 정보들을 통합하기)
./Flamegraph/stackcollapse-perf.pl out.perf > out.folded

# graph 생성
./Flamegraph/flamegraph.pl out.folded > result.svg

Flamegraph라는 디렉터리는 github 소스를 받은 디렉터리입니다.

아래는 flamegraph 예시 출력물입니다.

 

참고

https://man7.org/linux/man-pages/man1/perf.1.html

https://github.com/brendangregg/FlameGraph

 

반응형

'학습 > 스토리지 시스템' 카테고리의 다른 글

스토리지 시스템 개발자 A to Z  (0) 2024.12.29