Как ограничить, сколько процессорных ядер использует Varnish?
У меня есть 8-ядерный сервер, на котором будет работать Varnish перед HTTP-сервером, оба на одной машине.
Как я могу ограничить использование Varnish не более чем 4 ядрами?
Я прочитал о рабочих пулах в документации, но там также говорится:
"Хотя модель потоков Varnish позволяет вам использовать несколько пулов потоков, мы не рекомендуем изменять этот параметр. Исходя из нашего опыта и тестов, мы убедились, что достаточно двух пулов потоков. Другими словами, производительность Varnish не позволяет увеличивается при добавлении более 2 пулов.
Примечание. Если вы сталкиваетесь с рекомендациями по настройке, в которых предлагается использовать пул потоков для каждого ядра ЦП, будьте уверены, что это старый совет. Мы рекомендуем иметь не более двух пулов потоков, но вы можете увеличить количество потоков в пуле."
Таким образом, кажется, что два пула потоков достаточно. Означает ли это, что в этом случае используются только два ядра процессора?
Просматривая документацию, я до сих пор не нашел четкого ответа.
1 ответ
Насколько я знаю, Varnish не имеет встроенного способа ограничения количества ядер, на которых он работает. Вам нужно будет манипулировать тем, как этот процесс выполняется на уровне операционной системы. Предполагая, что вы работаете в Linux, самый простой способ сделать это - изменить команду запуска для использования taskset
прикрепить процесс к указанным ядрам или диапазону ядер. Например, в переопределении единицы обслуживания:
# /etc/systemd/system/varnish.service.d/override.conf
ExecStart=
ExecStart=/usr/bin/taskset -c 4-7 /usr/sbin/varnishd \
-j unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
Это ограничит процесс varnishd до пятого, шестого, седьмого и восьми ядер. Если у вас включена поддержка гиперпоточности, она становится немного сложнее; ваши восемь физических ядер будут представлены в виде 16 логических ядер с "настоящими" ядрами, переплетенными с "виртуальными". В этом случае вы можете попробовать taskset -c 8,10,12,14
или же taskset -c 9,11,13,15
или если вы не хотите ограничивать Varnish физическими ядрами, taskset -c 8-15
,
Другие ваши варианты включают настройку cgroups или контейнеризацию Varnish (или виртуализацию системы, но я предполагаю, что это не на столе). Если taskset
опция не будет работать для вас, или если вы не работаете в Linux, обновите ваш вопрос с дополнительной информацией.