hotspot - Linux perf 프로파일용 GUI 치트시트
hotspot (KDAB)는 Linux perf 프로파일러를 위한 Qt GUI입니다. 일반적인 대로 perf record로 기록한 후, 결과 perf.data를 hotspot에서 열어서 대화형 화염 그래프, 상향식 및 하향식 호출 트리, caller/callee 보기, 스레드별 타임라인, 오프 CPU 분석으로 탐색합니다. perf report의 읽기 어려운 출력을 시각적이고 탐색 가능한 프로파일로 변환합니다. hotspot이 perf를 실행 및 기록하도록 할 수도 있습니다.
설치
| 플랫폼 | 명령어 |
|---|
| Debian/Ubuntu | sudo apt install hotspot |
| Fedora | sudo dnf install hotspot |
| Arch Linux | sudo pacman -S hotspot |
| AppImage | GitHub Releases 페이지에서 다운로드 (이식 가능) |
| 필요 | linux-perf / perf 설치됨 |
레코딩 (두 가지 방법)
# 옵션 A: perf로 기록, 그 후 hotspot에서 열기
perf record --call-graph dwarf -F 999 ./my-program args
hotspot perf.data
# 옵션 B: hotspot이 기록하게 하기 (GUI "Record" 탭)
hotspot # 바이너리, 옵션 선택 및 Record 누르기
| perf 플래그 | 목적 |
|---|
--call-graph dwarf | 최고 스택 풀기 (디버그 정보 필요) |
--call-graph fp | 프레임 포인터 풀기 (빠름, -fno-omit-frame-pointer 필요) |
-F 999 | 999 Hz에서 샘플 |
-p PID | 실행 중인 프로세스 기록 |
-g | 호출 그래프 활성화 |
보기
| 보기 | 표시 |
|---|
| 요약 | 샘플 수, 스레드, 핫 심볼 |
| 화염 그래프 | 집계 스택; 너비 = 시간 |
| 상향식 | 루트에서 리프로의 호출 트리 |
| 하향식 | 핫 리프 함수 및 호출자 |
| Caller/Callee | 심볼별 인바운드/아웃바운드 비용 |
| 타임라인 | 시간 경과 스레드별 활동 |
탐색
| 액션 | 사용 |
|---|
| 프레임 클릭 | 화염 그래프를 해당 서브트리로 확대 |
| 검색 | 이름으로 심볼 필터 |
| 시간 범위 선택 (타임라인) | 단계에 분석 초점 맞추기 |
| 반전 (하향식) | 비싼 리프 함수 찾기 |
| 스레드/프로세스별 필터 | 워커 격리 |
오프 CPU 분석
hotspot은 CPU를 태우는 것이 아니라 차단된 (대기) 스레드를 어디 있는지 시각화할 수 있습니다. 지연 문제에 유용합니다.
# 오프 CPU 인사이트를 위한 스케줄러 스위치 기록
perf record --call-graph dwarf -e cycles \
-e sched:sched_switch --switch-events ./my-program
hotspot perf.data
좋은 스택 얻기
| 필요 | 수행 |
|---|
| 읽을 수 있는 심볼 | 디버그 정보로 빌드 (-g), strip하지 말기 |
| 깊은 스택 | --call-graph dwarf |
| 저렴한 스택 | 프레임 포인터 + --call-graph fp |
| 커널 심볼 | sysctl kernel.kptr_restrict=0, perf를 root로 실행 |
| perf 권한 | sysctl kernel.perf_event_paranoid=1 (또는 더 낮음) |
일반적인 워크플로우
# CPU 바운드 프로그램 프로파일 및 화염 그래프 탐색
perf record --call-graph dwarf -F 999 ./app
hotspot perf.data
# 요청이 느린 이유 조사 (차단/오프 CPU 시간)
perf record --call-graph dwarf -e sched:sched_switch --switch-events ./server
hotspot perf.data # 오프 CPU 화염 그래프 검사
hotspot vs 다른 perf 프론트 엔드
| 측면 | hotspot | perf report | FlameGraph 스크립트 | samply |
|---|
| UI | Qt GUI | TUI/text | 정적 SVG | Firefox Profiler |
| 오프 CPU | 예 | 제한적 | 수동 | 제한적 |
| 기록 | 예 | N/A (perf) | 아니오 | 예 |
| 최고의 용도 | 대화형 perf 분석 | 빠른 텍스트 보기 | 공유 가능 SVG | 크로스 플랫폼 |
리소스