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