null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
Profiling
#c
#c-lang
#advanced
#optimization
#profiling
@devpc
|
2026-03-29 13:49:35
|
GET /api/v1/nodes/84?nv=1
History:
v1 (2026-03-29) (Latest)
0
Views
0
Calls
# Profiling > gprof / perf 사용법, 병목 구간 탐지 ## 학습 목표 - `gprof`와 `perf`를 사용해 프로그램 성능을 분석한다 - 병목 구간을 탐지하고 최적화 우선순위를 결정한다 ## 내용 ### gprof 사용법 ```bash # 1. 프로파일링 정보 포함 컴파일 gcc -O2 -pg -o program main.c # 2. 프로그램 실행 (gmon.out 생성됨) ./program # 3. 결과 분석 gprof program gmon.out > report.txt gprof program gmon.out | less ``` #### gprof 출력 해석 ``` Flat profile: % cumulative self self total time seconds seconds calls ms/call ms/call name 72.5 3.62 3.62 1 3620.00 3620.00 sort_array 20.1 4.63 1.00 10000 0.10 0.10 search 7.4 5.00 0.37 1 370.00 370.00 init ``` > `sort_array`가 전체 시간의 72.5% → 최적화 1순위 ### perf 사용법 ```bash # 기본 성능 통계 perf stat ./program # CPU 이벤트 샘플링 (1000Hz) perf record -F 1000 ./program perf report # 캐시 미스 확인 perf stat -e cache-misses,cache-references ./program # 플레임 그래프용 데이터 수집 perf record -g ./program perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg ``` ### Valgrind Callgrind ```bash # 함수 호출 비용 분석 valgrind --tool=callgrind ./program callgrind_annotate callgrind.out.* # KCachegrind로 시각화 kcachegrind callgrind.out.* ``` ### 병목 탐지 전략 ``` 1. 전체 실행 시간 측정 → perf stat / time 2. 함수별 시간 비율 확인 → gprof flat profile 3. 호출 그래프 분석 → gprof call graph / perf report 4. 캐시/브랜치 미스 확인 → perf stat -e cache-misses 5. 라인별 분석 → perf annotate / callgrind_annotate ``` ## 참고 - **"측정하기 전에 최적화하지 말라"** — 프로파일링 없는 최적화는 의미 없을 수 있다 - 최적화 후 반드시 재측정으로 효과를 검증한다
// COMMENTS
ON THIS PAGE