Network Tuning - 10G: различия между версиями

Материал из Webko Wiki
Перейти к навигации Перейти к поиску
 
(не показаны 3 промежуточные версии этого же участника)
Строка 23: Строка 23:
 
Застосовуємо драйвер(модуль)
 
Застосовуємо драйвер(модуль)
 
  modprobe ixgbe
 
  modprobe ixgbe
 +
Вимикаємо контроль перевантаження
 +
ethtool -K eth0 lro off
 +
Вимикаємо системне керування перериваннями та передаємо контроль NAPI
 +
ethtool -C eth0 adaptive-rx off
 +
Дізнатися розмір буферу
 +
ethtool -g eth0
 +
Встановити розмір буферу
 +
ethtool -G eth0 rx 4096
 +
Встановити розмір черги
 +
ip link set eth0 txqueuelen 10000
 +
 
=== Soft interrupt issued by a device driver ===
 
=== Soft interrupt issued by a device driver ===
 +
Так як ми налаштували розподілення черги за перериваннями (msi-x , rss ), тому тепер їх потрібно зозпреділити по ядрам smp_affinity. В стандартній поставці драйверу йде скрипт ''set_irq_affinity'' за допомогою якого можливо розподілити ядра для відпрацювання перериваннь.
 +
<syntaxhighlight lang="bash">
 +
./set_irq_affinity 0-4 enp3s0f0 # ядра з 0 по 4 для enp3s0f0
 +
./set_irq_affinity 5-8 enp3s0f1 # ядра з 5 по 8 для enp3s0f1
 +
</syntaxhighlight>
 +
Також потрібно вимкнути сервіс розподілення перериваннь
 +
systemctl disable irqbalance --now
 +
 +
<syntaxhighlight lang="bash">
 +
echo “0” > /sys/class/net/ens2f0/queues/rx-0/rps_cpus
 +
echo “1” > /sys/class/net/ens2f0/queues/rx-0/rps_cpus
 +
echo “2” > /sys/class/net/ens2f0/queues/rx-1/rps_cpus
 +
echo “4” > /sys/class/net/ens2f0/queues/rx-2/rps_cpus
 +
echo “8” > /sys/class/net/ens2f0/queues/rx-3/rps_cpus
 +
echo “10” > /sys/class/net/ens2f0/queues/rx-4/rps_cpus
 +
echo “20” > /sys/class/net/ens2f0/queues/rx-5/rps_cpus
 +
echo “40” > /sys/class/net/ens2f0/queues/rx-6/rps_cpus
 +
echo “80” > /sys/class/net/ens2f0/queues/rx-7/rps_cpus
 +
 +
sysctl -w net.core.rps_sock_flow_entries=32768
 +
 +
echo 2048 > /sys/class/net/ens2f0/queues/rx-0/rps_flow_cnt
 +
echo 2048 > /sys/class/net/ens2f0/queues/rx-1/rps_flow_cnt
 +
echo 2048 > /sys/class/net/ens2f0/queues/rx-2/rps_flow_cnt
 +
echo 2048 > /sys/class/net/ens2f0/queues/rx-3/rps_flow_cnt
 +
echo 2048 > /sys/class/net/ens2f0/queues/rx-4/rps_flow_cnt
 +
echo 2048 > /sys/class/net/ens2f0/queues/rx-5/rps_flow_cnt
 +
echo 2048 > /sys/class/net/ens2f0/queues/rx-6/rps_flow_cnt
 +
echo 2048 > /sys/class/net/ens2f0/queues/rx-7/rps_flow_cnt
 +
</syntaxhighlight>
 +
 
=== Kernel buffers ===
 
=== Kernel buffers ===
 
=== The network layer (IP, TCP or UDP) ===
 
=== The network layer (IP, TCP or UDP) ===

Текущая версия на 15:26, 31 января 2023


Рекомендації

  • Відключити HT
  • Розмежувати приривання

Підвищення продуктивності мережевого стеку Linux

CPU

  • Встановити максимально продуктивний профіль роботи ЦП

NIC

INTEL ixgbe

Встановити останню стабільну версію драйверу мережевої карти

https://sourceforge.net/projects/e1000/files/ixgbe%20stable/
wget https://sourceforge.net/projects/e1000/files/ixgbe%20stable/5.18.6/
rpmbuild -tb ixgbe-<x.x.x>.tar.gz
yum localinstall <RPM>

Налаштування драйверу(модулю)

vim /etc/modprobe.d/ixgbe.conf
options ixgbe IntMode=2,2  RSS=6,6  VMDQ=0,0 InterruptThrottleRate=1,1 allow_unsupported_sfp=1

Застосовуємо драйвер(модуль)

modprobe ixgbe

Вимикаємо контроль перевантаження

ethtool -K eth0 lro off

Вимикаємо системне керування перериваннями та передаємо контроль NAPI

ethtool -C eth0 adaptive-rx off

Дізнатися розмір буферу

ethtool -g eth0

Встановити розмір буферу

ethtool -G eth0 rx 4096

Встановити розмір черги

ip link set eth0 txqueuelen 10000

Soft interrupt issued by a device driver

Так як ми налаштували розподілення черги за перериваннями (msi-x , rss ), тому тепер їх потрібно зозпреділити по ядрам smp_affinity. В стандартній поставці драйверу йде скрипт set_irq_affinity за допомогою якого можливо розподілити ядра для відпрацювання перериваннь.

./set_irq_affinity 0-4 enp3s0f0 # ядра з 0 по 4 для enp3s0f0
./set_irq_affinity 5-8 enp3s0f1 # ядра з 5 по 8 для enp3s0f1

Також потрібно вимкнути сервіс розподілення перериваннь

systemctl disable irqbalance --now
echo “0” > /sys/class/net/ens2f0/queues/rx-0/rps_cpus
echo “1” > /sys/class/net/ens2f0/queues/rx-0/rps_cpus
echo “2” > /sys/class/net/ens2f0/queues/rx-1/rps_cpus
echo “4” > /sys/class/net/ens2f0/queues/rx-2/rps_cpus
echo “8” > /sys/class/net/ens2f0/queues/rx-3/rps_cpus
echo “10” > /sys/class/net/ens2f0/queues/rx-4/rps_cpus
echo “20” > /sys/class/net/ens2f0/queues/rx-5/rps_cpus
echo “40” > /sys/class/net/ens2f0/queues/rx-6/rps_cpus
echo “80” > /sys/class/net/ens2f0/queues/rx-7/rps_cpus

sysctl -w net.core.rps_sock_flow_entries=32768

echo 2048 > /sys/class/net/ens2f0/queues/rx-0/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-1/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-2/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-3/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-4/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-5/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-6/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-7/rps_flow_cnt

Kernel buffers

The network layer (IP, TCP or UDP)