Network Tuning - 10G: различия между версиями
Перейти к навигации
Перейти к поиску
Sol (обсуждение | вклад) |
Sol (обсуждение | вклад) |
||
(не показаны 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