При использовании многопроцессорных систем есть свои особенности.
{toc}
Для отладки производительности и исследования данного железа рекомендуем использовать утилиты server-info и network-top из пакета [netutils-linux|https://github.com/strizhechenko/netutils-linux], они доступны внутри chroot /app/reductor/, если он ещё не установлен или это Carbon Reductor 7, то его можно установить следующими командами:
{code}
yum -y install python-pip
pip install --upgrade netutils-linux
network-top
{code}
network-top отображает текущую нагрузку на сетевую подсистему Linux, подсвечивая ядра процессоров и сетевые интерфейсы по группам NUMA-нод (если NUMA нет или одна - то по принадлежности к физическому процессору и другими цветами).
!https://cloud.githubusercontent.com/assets/3813830/26570951/acacf18c-452c-11e7-8fe7-5d0952f39d8b.gif|width=600!
h1. Системы с несколькими физическими процессорами и раздельной памятью (несколькими NUMA-нодами)
Сетевая карта может быть привязана к NUMA-ноде, проверить это можно:
{code}
# cat /sys/class/net/eth2/device/numa_node
0
{code}
В данном случае это node0. В таком случае обработкой пакетов на этой сетевой карте должны заниматься ядра процессора, привязанные к этой ноде:
{code}
# numactl --hardware | grep cpus
node 0 cpus: 0 1 2 3 4 5
node 1 cpus: 6 7 8 9 10 11
{code}
В данном случае, это 0, 1, 2, 3, 4, 5.
h1. Двухпортовые сетевые карты
К NUMA-нодам привязка идёт в зависимости от PCI-слота, в который установлена сетевая карта.
Перенести один из портов на другую NUMA-ноду невозможно.
Соответственно, для утилизации второго физического процессора потребуется устанавливать вторую физическую сетевую карту.
Использование вторым портом сетевой карты другой NUMA-ноды при мало-мальской нагрузке приводит к потере производительности и, соответственно, потерям пакетов.
h1. Системы с двумя процессорами и общей памятью.
В случае, если NUMA-нода одна на систему, но используются два разных физических процессора, лучше ограничить обработку трафика порта сетевой карты одним из процессоров, а не использовать оба процессора одновременно.
h1. Число очередей порта сетевой карты превышает число ядер в группе NUMA-ноды или физического процессора.
Число очередей у хороших сетевых карт, как правило, регулируется с помощью команд:
Узнать возможности сетевой карты:
{code}
# ethtool -l eth2
Channel parameters for eth2:
Pre-set maximums:
RX: 0
TX: 0
Other: 1
Combined: 63
Current hardware settings:
RX: 0
TX: 0
Other: 1
Combined: 12
{code}
Установить число комбинированных очередей:
{code}
# ethtool -L eth2 combined 6
{code}
Помочь сохранить эти настройки после перезагрузки может наша техническая поддержка.
{toc}
Для отладки производительности и исследования данного железа рекомендуем использовать утилиты server-info и network-top из пакета [netutils-linux|https://github.com/strizhechenko/netutils-linux], они доступны внутри chroot /app/reductor/, если он ещё не установлен или это Carbon Reductor 7, то его можно установить следующими командами:
{code}
yum -y install python-pip
pip install --upgrade netutils-linux
network-top
{code}
network-top отображает текущую нагрузку на сетевую подсистему Linux, подсвечивая ядра процессоров и сетевые интерфейсы по группам NUMA-нод (если NUMA нет или одна - то по принадлежности к физическому процессору и другими цветами).
!https://cloud.githubusercontent.com/assets/3813830/26570951/acacf18c-452c-11e7-8fe7-5d0952f39d8b.gif|width=600!
h1. Системы с несколькими физическими процессорами и раздельной памятью (несколькими NUMA-нодами)
Сетевая карта может быть привязана к NUMA-ноде, проверить это можно:
{code}
# cat /sys/class/net/eth2/device/numa_node
0
{code}
В данном случае это node0. В таком случае обработкой пакетов на этой сетевой карте должны заниматься ядра процессора, привязанные к этой ноде:
{code}
# numactl --hardware | grep cpus
node 0 cpus: 0 1 2 3 4 5
node 1 cpus: 6 7 8 9 10 11
{code}
В данном случае, это 0, 1, 2, 3, 4, 5.
h1. Двухпортовые сетевые карты
К NUMA-нодам привязка идёт в зависимости от PCI-слота, в который установлена сетевая карта.
Перенести один из портов на другую NUMA-ноду невозможно.
Соответственно, для утилизации второго физического процессора потребуется устанавливать вторую физическую сетевую карту.
Использование вторым портом сетевой карты другой NUMA-ноды при мало-мальской нагрузке приводит к потере производительности и, соответственно, потерям пакетов.
h1. Системы с двумя процессорами и общей памятью.
В случае, если NUMA-нода одна на систему, но используются два разных физических процессора, лучше ограничить обработку трафика порта сетевой карты одним из процессоров, а не использовать оба процессора одновременно.
h1. Число очередей порта сетевой карты превышает число ядер в группе NUMA-ноды или физического процессора.
Число очередей у хороших сетевых карт, как правило, регулируется с помощью команд:
Узнать возможности сетевой карты:
{code}
# ethtool -l eth2
Channel parameters for eth2:
Pre-set maximums:
RX: 0
TX: 0
Other: 1
Combined: 63
Current hardware settings:
RX: 0
TX: 0
Other: 1
Combined: 12
{code}
Установить число комбинированных очередей:
{code}
# ethtool -L eth2 combined 6
{code}
Помочь сохранить эти настройки после перезагрузки может наша техническая поддержка.