Для производительных систем Настройка ECSS-10 состоит из следующих этапов:
1. Выделение отдельных ядер процессора для MSR
Для того, чтобы изолировать MSR медиасервер от остальной сиcтемы, необходимо выделить под него отдельные ядра процессора. Для этого нужно выполнить следующие действия:
Открыть файл:
/etc/default/grub
привести параметр GRUB_CMDLINE_LINUX="" к следующему виду:
GRUB_CMDLINE_LINUX="isolcpus=8-11"
Данный пример изолирует ядра с 8 по 11. Также возможен вариант с перечислением 1,2,4-6 и т.п.
Обновить конфигурацию grub. Для этого выполните команду:
sudo update-grub
Перезапустить систему.
Если всё сделано правильно, то после перезагрузки на изолированных ядрах htop будет показывать 0-ую нагрузку.
2. Установка scaling_governor в режим perfomance
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors conservative ondemand userspace powersave performance
По умолчанию в Ubuntu есть пять профилей работы процессора:
Описание профилей:
- conservative - медленно повышает частоту процессора в зависимости от нагрузки на систему и резко сбрасывает частоту к минимальной при простое.
- ondemand - быстро повышает частоту процессора при возрастании нагрузки и медленно сбрасывает частоту к минимуму при простое.
- userspace - позволяет указывать частоту вручную.
- powersave - соответствует минимальной допустимой частоте CPU.
- performance - соответствуют максимальной частоте CPU.
Система выдерживает большую нагрузку в режиме perfomance. Для того, чтобы включить данный режим по умолчанию, необходимо привести файл /etc/rc.local к следующему виду:
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >/dev/null exit 0
3. Запуск MSR на изолированных ядрах процессора
Для того, чтобы MSR запускался на отдельных ядрах процессора, необходимо привести файл /etc/systemd/system/ecss-media-server.service.d/override.con к следующему виду:
[Service] CPUAffinity=8-11 CPUSchedulingPolicy=rr
В данном примере MSR запущен на ядрах 8,9,10,11. CPUSchedulingPolicy нужен только если указан isolcpus.
4. Настройка использования определенных ядер процессора для erlang-based служб
Для того, чтобы ядра процессора использовались правильно, необходимо скорректировать параметры запуска erlang-нод на производительных системах.
Для этого разрабатывается схема размещения нод на ядрах.
Схема разрабатывается по следующим правилам:
- использовать более 2х ядер;
- необходимо, чтобы одна нода не использовала ядра на разных процессорах;
- для сильно нагруженных нод, таких как core и sip, нужно выделять индивидуальные ядра;
- ноды, которые не загружены, можно размешать на одном ядре;
- для core необходимо выделять большее количество ядер.
Распределения ядер на примере 2х-процессорного сервера HP BL660 c двумя процессорами Intel Xeon E5-4657L c 12 ядрами и поддержкой гипертрединга, которые могут образовать 8 виртуальных ядер:
myc 0-3 ds 4-7 core 8-23 sip 24-31 md 32-35 rest 36-39 sp 40-43 msr 44-47
Для того, чтобы сделать такое распределение нужно включить режим использования только необходимого количества ядер на erlang-ноде.
Для этого редактируем файл vm.args каждой ноды, расположенный по пути /usr/lib/ecss/ECSS-SERVICE-NAME/releases/VERSION/
Например, для ecss-core необходимо отредактировать файл:
sudo mcedit /usr/lib/ecss/ecss-core/releases/3.11.2.29/vm.args
В этот файл добавить опции, которые задают использование требуемого количества логических ядер процессора и количество активных шедулеров.
Для случая 16 ядер это:
+sct L0-15c0-15 +sbt db +S16:16
Для 8х ядер:
+sct L0-7c0-7 +sbt db +S8:8
Для 4х ядер:
+sct L0-3c0-3 +sbt db +S4:4
Для 2х ядер:
+sct L0-1c0-1 +sbt db +S2:2
Следующая задача - установить сервис на выбранные ядра. Делается это аналогично тому, как описано для MSR.
Выполните команду:
sudo systemctl edit ECSS-SERVICE-NAME
Добавление параметров:
[Service] CPUAffinity=0-3
Где в значении CPUAffinity указываются те ядра, на которых должны запускаться процессы сервиса.
Пример настройки ecss-core по указанной выше схеме:
> sudo systemctl edit ecss-core.service [Service] CPUAffinity=8-23
После настройки параметров CPUAffinity для всех сервисов необходимо перезагрузить конфигурацию услуг командой:
sudo systemctl daemon-reload
Перезапустить сервисы:
sudo systemctl restart ecss.slice
Убедиться в корректной привязке сервисов к ядрам можно утилитой htop, включив отображение колонки PROCESSOR.