Optimizing ClickHouse for Intel's 280 core processors
Оптимизация ClickHouse для процессоров Intel с ультра-высоким числом ядер
Авторы: Цзебин Сань, Чжиго Чжоу, Ваньян Го, Тьянью Ли
Гостевой пост от инженеров по оптимизации производительности из Intel Shanghai.
Современные процессоры Intel достигают беспрецедентного числа ядер: до 128 P-ядер на сокет в Granite Rapids и 288 E-ядер в Sierra Forest. Многосокетные системы могут иметь более 400 ядер. Тенденция «больше ядер, а не выше тактовая частота» обусловлена физическими ограничениями и проблемами энергопотребления.
Для аналитических баз данных, таких как ClickHouse, большое количество ядер представляет как возможность, так и сложную задачу. Хотя теоретически больше ядер означают больше параллельной мощности, большинство СУБД не могут полностью использовать аппаратные ресурсы. Проблемы параллельной обработки, такие как конфликты блокировок, когерентность кэша, неоднородный доступ к памяти (NUMA), пропускная способность памяти и накладные расходы на координацию, усугубляются с ростом числа ядер.
Оптимизация для ультра-высокого числа ядер
За последние три года мы анализировали и оптимизировали масштабируемость ClickHouse на процессорах Intel Xeon с большим числом ядер. С помощью инструментов профилирования (perf, emon, Intel VTune) мы исследовали все 43 запроса ClickBench на серверах с ультра-высоким числом ядер, выявляли узкие места и оптимизировали ClickHouse.
Результаты впечатляют: отдельные оптимизации ускоряют выполнение запросов в несколько раз, в некоторых случаях до 10x. Среднее геометрическое время выполнения всех запросов стабильно улучшалось на 2–10% для каждой оптимизации. Это демонстрирует, что ClickHouse можно эффективно масштабировать на системах с ультра-высоким числом ядер.
Ключевые проблемы масштабирования
Помимо производительности одного ядра, необходимо решить несколько ключевых задач:
- Накладные расходы когерентности кэша: Перемещение строк кэша между ядрами требует циклов CPU.
- Конфликты блокировок: Даже небольшие последовательные участки кода (1%) сильно ограничивают параллелизм по закону Амдала.
- Пропускная способность памяти: Эффективное использование памяти критично для систем с интенсивной работой с данными.
- Координация потоков: Стоимость синхронизации потоков растет сверхлинейно с их количеством.
- Эффекты NUMA: Задержки и пропускная способность памяти различаются для локальной и удаленной памяти в многосокетных системах.
В этом посте summarized наши оптимизации ClickHouse для серверов с ультра-высоким числом ядер.