Perf에서의 스택 언와인딩 난제
2025-01-31
Perf는 강력한 성능 분석 도구로, PMU 카운터 오버플로 인터럽트를 사용하여 프로파일링을 위한 스레드 상태를 캡처합니다. 하지만 스택 언와인딩은 어려운 문제입니다. 최신 컴파일러는 기본적으로 프레임 포인터를 생략하므로 스택 추적이 어렵습니다. -fno-omit-frame-pointer 옵션으로 재컴파일할 수 있지만, 비용이 많이 들고 시스템 라이브러리와의 호환성 문제가 발생할 수 있습니다. DWARF는 대안을 제공하지만, 복잡성과 성능 오버헤드가 상당하여 Linus Torvalds도 커널에서의 스택 언와인딩에 사용하는 것을 거부했습니다. 따라서 Perf는 절충안으로 스택의 상단 부분만 사용자 공간으로 복사하여 언와인딩하는 방법을 채택했습니다. 이로 인해 스택 크기가 제한되지만(65,528바이트), 성능과 실용성을 효과적으로 균형을 맞추고 있습니다.