linux-perf
Linux perf는 커널 성능 카운터(하드웨어 PMU와 소프트웨어 카운터·트레이스포인트)를 다루는 성능 분석 도구로, 샘플이 많이 모인 핫스팟 함수를 프로파일합니다.
이 글은 man7.org의 perf(1), perf-record(1), perf-report(1), perf-top(1) 매뉴얼을 2026-09-02 기준으로 정리한 일반 설명이며, 커널·CPU·권한 설정에 따라 세부 동작은 달라질 수 있습니다.
perf는 무엇인가?
한 줄 답: Linux의 커널 기반 성능 카운터 프레임워크를 다루며, 하드웨어 PMU 기능과 소프트웨어 카운터·트레이스포인트를 함께 살펴보는 도구입니다.
PMU는 Performance Monitoring Unit의 약자로, CPU의 성능 모니터링 기능을 뜻합니다. 이 글에서는 여러 성능 정보 중 CPU 샘플이 모인 함수와 심볼을 확인해 핫스팟을 찾는 경로만 다룹니다.
저장해서 나중에 분석할 때는 record로 프로파일을 만들고 report로 읽습니다. 실시간 관찰에는 top을 사용하며, stat은 이벤트 수를 모으고 list는 -e에 사용할 심볼 이벤트 유형을 확인하는 명령입니다.
gdb가 대화형 디버거이고 strace가 시스템 호출 추적이라면, 이 도구는 성능 카운터 샘플로 핫스팟을 확인합니다.
어떻게 기록하나?
한 줄 답: record는 명령을 실행하면서 성능 카운터 프로파일을 수집해 기본 파일 perf.data에 기록하며, 결과를 화면에 바로 표시하지 않습니다.
문서에 제시된 최소 형태는 시스템 전체 수집, 실행할 명령 지정, 이벤트 지정으로 나뉩니다.
perf record -a
perf record -- <command>
perf record -e cycles -- <command>
이벤트는 -e로 선택하며 심볼 이름은 perf list에서 확인할 수 있고 raw 이벤트는 rN 형식으로 지정할 수 있습니다. -o로 출력 파일을 지정할 수 있고, 기존 프로세스나 스레드에는 -p와 -t, CPU 목록에는 -C를 사용할 수 있습니다.
샘플링 빈도와 이벤트 주기, 호출 그래프 수집에는 각각 -F, -c, -g를 검토할 수 있습니다. 이벤트 뒤에 --filter를 둘 수 있으며, -a는 시스템 전체 수집을 뜻하고 기본 출력 파일 이름은 perf.data입니다.
리포트는 어떻게 보나?
한 줄 답: report는 기록된 perf.data를 읽어 성능 카운터 프로파일 정보를 보여 주므로, 샘플이 많이 모인 함수나 심볼부터 핫스팟을 확인할 수 있습니다.
표준 입력이 FIFO가 아닌 경우 기본 입력은 perf.data입니다. 따라서 기본 경로는 perf report이고, 입력 파일을 분명히 지정하려면 perf report -i perf.data를 사용합니다.
perf report
perf report -i perf.data
기본 정렬 키는 overhead,comm,dso,symbol이며 overhead가 첫 번째입니다. 이 순서에서 샘플 오버헤드가 큰 함수와 심볼이 먼저 보이므로 핫스팟 후보를 읽을 수 있습니다.
샘플 수를 함께 보려면 -n, 정렬 기준을 바꾸려면 -s, 미해결 항목을 숨기려면 -U를 검토할 수 있습니다. 자식 호출 누적은 --children 또는 --no-children으로 조정할 수 있습니다.
실시간으로 보려면?
한 줄 답: top은 성능 카운터 프로파일을 실시간으로 생성하고 표시하므로, 먼저 저장 파일을 만들지 않고 현재 샘플 흐름을 관찰할 수 있습니다.
최소 명령은 perf top입니다. -a는 시스템 전체 수집이며 기본값이고, 필요하면 -C로 CPU 목록, -e로 이벤트, -F로 빈도, -c로 주기를, -p와 -t로 프로세스와 스레드를 지정할 수 있습니다.
perf top
호출 그래프는 -g로 켤 수 있고, 자식 호출 누적은 기본으로 활성화되며 --no-children으로 끌 수 있습니다. 커널 심볼과 사용자 심볼을 각각 숨기는 선택지는 -K와 -U이며, -d는 갱신 지연, -E는 표시할 함수 수를 정합니다.
커널 심볼 주석 기능이 필요하면 -k에 vmlinux 경로가 필요합니다. record가 나중에 report로 읽을 perf.data를 저장하는 경로라면, top은 실시간 표시 경로이며 어느 쪽이 항상 더 낫다고 할 수 없습니다.
FAQ
한 줄 답: 기록·리포트·실시간 표시를 목적에 맞게 나누고, 이벤트와 권한·환경의 차이를 먼저 확인해야 합니다.
record와 report는 함께 써야 합니까? 저장한 프로파일을 나중에 분석하는 경로에서는 record가 perf.data를 만들고 report가 그 파일을 읽습니다. 실시간 확인만 필요하면 이 저장 경로를 거치지 않고 top을 사용할 수 있습니다.
top 전에 record가 필요합니까? 필요하지 않습니다. top은 성능 카운터 프로파일을 실시간으로 생성하고 표시하는 명령입니다.
cycles만 쓰면 됩니까? 반드시 하나로 고정할 필요는 없습니다. -e로 PMU 이벤트를 선택할 수 있고, 사용할 심볼 이벤트 유형은 perf list에서 확인합니다.
권한이나 결과가 환경마다 다른 이유는 무엇입니까? 커널·CPU·권한 설정에 따라 세부 동작이 달라질 수 있습니다. 수집이 제한되거나 결과가 다르게 보이면 해당 환경에서 허용된 이벤트와 대상 범위를 먼저 확인해야 합니다.
출처
한 줄 답: 핵심 사실과 명령 형식은 2026-09-02에 확인한 man7.org의 네 공식 매뉴얼에 근거합니다.
다음 문서를 이 순서로 참고했습니다. 각 문서는 도구 개요, 기록, 리포트, 실시간 프로파일링의 범위를 설명합니다.