Оптимизация, основанная на профиле
Оптимизация, основанная на профиле (PGO) — это техника оптимизации компилятора, при которой программа оптимизируется на основе профиля выполнения.
Согласно тестам, PGO помогает достигать лучшей производительности для ClickHouse. Мы видим улучшения до 15% в QPS на наборе тестов ClickBench. Более детальные результаты доступны здесь. Выгоды от производительности зависят от вашей типичной нагрузки — вы можете получить лучшие или худшие результаты.
Больше информации о PGO в ClickHouse вы можете прочитать в соответствующем GitHub issue.
Как собрать ClickHouse с PGO?
Существует два основных типа PGO: Инструментирование и Анализ выборки (также известный как AutoFDO). В данном руководстве описано Инструментирование PGO с ClickHouse.
- Соберите ClickHouse в режиме инструментирования. В Clang это можно сделать, передав опцию
-fprofile-generate
вCXXFLAGS
. - Запустите инструментированный ClickHouse на выборочной нагрузке. Здесь вам нужно использовать вашу обычную нагрузку. Одним из подходов может быть использование ClickBench в качестве выборочной нагрузки. ClickHouse в режиме инструментирования может работать медленно, так что будьте готовы к этому и не запускайте инструментированный ClickHouse в производительных средах.
- Перекомпилируйте ClickHouse еще раз с флагами компилятора
-fprofile-use
и профилями, собранными на предыдущем этапе.
Более подробное руководство о том, как применить PGO, находится в документации Clang.
Если вы собираетесь собирать выборочную нагрузку непосредственно из производственной среды, мы рекомендуем попробовать использовать Анализ выборки PGO.