Я хочу заполнить 10Gbps ссылку очень маленькими пакетами udp (64B).
Я использую следующую команду
for i in 1 2 3 4 5 6 7 8; do netperf -H 192.168.56.2 -p 12865 -t UDP_STREAM -l 60 -C -c -- -m 64 -s 16M -S 16M -R 1 & done
Но я не могу получить пропускную способность более 250 Мбит / с. Для небольших сообщений я видел, что поток с именем ksoftirqd использует 100% ядра процессора в приемнике. Итак, мой вопрос
- Как снизить использование процессором ksoftirqd для небольших сообщений?
Текущая настройка: у меня есть две машины с Ubuntu (8 ядер и 16 ядер) с сетевыми картами Intel X520-T2 и ядром 3.11, подключенными к коммутатору Juniper 10G. Это изменения, которые у меня есть для sysctlcfg.conf
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 0
net.core.rmem_max = 268435456
net.core.wmem_max = 268435456
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.core.netdev_max_backlog = 250000
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_congestion_control = htcp
Я также увеличил размер сетевого адаптера
/sbin/ifconfig eth0 txqueuelen 10000
Я искал объединение прерываний, используя параметр rx-usecs, но увеличивая его, что ухудшало пропускную способность.