Profiling Tools

성능 프로파일링 질문

프로파일러는 어디가 느린지 말해 주지만 왜 측정하는지까지 정해 주지는 않는다. CPU, 메모리, lock 대기, I/O를 분리해야 한다.

01

목표 지표 결정

평균 시간인지 p95 latency인지, 처리량인지 메모리 상한인지 먼저 선택한다.

02

대표 입력 고정

작은 예제와 실제 크기 입력은 병목이 다를 수 있으므로 측정 입력을 기록한다.

03

한 번에 하나씩 바꾼다

최적화 후보를 여러 개 섞으면 어떤 변화가 효과를 냈는지 알 수 없다.

sampling
CPU 시간 분포 주기적으로 call stack을 모아 누적 시간이 큰 경로를 보여 준다.
짧은 함수는 흐려질 수 있다.
heap
할당 관찰 vector growth, string copy, new 호출을 추적한다.
reserve 후보를 찾는다.
trace
시간순 이벤트 스레드 간 대기와 I/O 흐름을 시간축으로 본다.
동시 실행 구간이 드러난다.
benchmark
비교 실험 같은 조건에서 반복 실행해 변경 전후를 비교한다.
warmup과 분산을 본다.

릴리스 · 입력 · 회귀 점검

릴리스 디버그 빌드로 성능 결론을 내리고 있지 않은가.
입력 실제 문제 크기와 비슷한 데이터로 측정했는가.
회귀 속도 개선이 메모리나 정확성을 망치지 않는지 함께 확인했는가.

측정 메모

// metric: p95 latency
// input: production-sized sample
// build: Release with symbols
// compare: baseline vs one change