Для производительных систем Настройка ECSS-10 состоит из следующих этапов:
Для того, чтобы изолировать 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-ую нагрузку.
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors conservative ondemand userspace powersave performance |
По умолчанию в Ubuntu есть пять профилей работы процессора:
Описание профилей:
Система выдерживает большую нагрузку в режиме 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 |
| Установку необходимо делать через создание дополнительного правила в /etc/udev/rules.d/. |
Для того, чтобы MSR запускался на отдельных ядрах процессора, необходимо привести файл /etc/systemd/system/ecss-media-server.service.d/override.con к следующему виду:
[Service] CPUAffinity=8-11 CPUSchedulingPolicy=rr |
В данном примере MSR запущен на ядрах 8,9,10,11. CPUSchedulingPolicy нужен только если указан isolcpus.
Для того, чтобы ядра процессора использовались правильно, необходимо скорректировать параметры запуска erlang-нод на производительных системах.
Для этого разрабатывается схема размещения нод на ядрах.
Схема разрабатывается по следующим правилам:
Распределения ядер на примере 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.14.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.