我想用非常小的 udp 数据包(64B)填充 10Gbps 链路。
我使用以下命令
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
但我无法获得超过 250Mbps 的吞吐量。对于小消息,我看到一个名为 ksoftirqd 的线程正在使用接收方 100% 的 CPU 核心。所以我的问题是
- 如何降低ksoftirqd对小消息的cpu使用率?
当前设置:我有两台 Ubuntu 机器(8 核和 16 核),它们都配有 Intel X520-T2 NIC 和内核 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
我还增加了 NIC 的 txqueue 大小
/sbin/ifconfig eth0 txqueuelen 10000
我使用 rx-usecs 参数寻找中断合并,但增加该参数会导致吞吐量下降。