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