프로파일 기반 최적화
Profile-Guided Optimization (PGO)는 프로그램의 런타임 프로파일에 기반하여 프로그램을 최적화하는 컴파일러 최적화 기법입니다.
테스트 결과 PGO는 ClickHouse의 성능 향상에 도움이 됩니다. ClickBench 테스트 스위트에서 QPS가 최대 15%까지 향상되는 것을 확인했습니다. 보다 상세한 결과는 여기에서 확인할 수 있습니다. 성능 이점은 일반적인 워크로드에 따라 달라질 수 있으며, 더 좋거나 더 나쁜 결과가 나올 수 있습니다.
ClickHouse에서의 PGO에 대해 더 자세한 내용은 관련 GitHub 이슈에서 확인할 수 있습니다.
PGO로 ClickHouse를 빌드하는 방법
PGO에는 두 가지 주요 종류가 있습니다. Instrumentation 방식과 Sampling 방식(일명 AutoFDO)입니다. 이 가이드에서는 Instrumentation 기반 PGO를 ClickHouse에 적용하는 방법을 설명합니다.
- Instrumentation 모드로 ClickHouse를 빌드합니다. Clang에서는
CXXFLAGS에-fprofile-generate옵션을 지정하면 됩니다. - Instrumentation을 적용한 ClickHouse를 샘플 워크로드로 실행합니다. 여기에서는 평소에 사용하는 워크로드를 사용하면 됩니다. 한 가지 방법으로는 ClickBench를 샘플 워크로드로 사용하는 것이 있습니다. Instrumentation 모드의 ClickHouse는 느리게 동작할 수 있으므로, 이에 대비하고 성능이 중요한 환경에서는 Instrumentation을 적용한 ClickHouse를 실행하지 않는 것이 좋습니다.
- 이전 단계에서 수집한 프로파일을 사용하여
-fprofile-use컴파일러 플래그와 함께 ClickHouse를 다시 컴파일합니다.
PGO를 적용하는 보다 자세한 방법은 Clang 문서를 참고하십시오.
프로덕션 환경에서 직접 샘플 워크로드를 수집하려는 경우, Sampling PGO 사용을 시도해 볼 것을 권장합니다.