test D30155


Testbed s1 <==> r1 (d820 nodes with a 10Gbps link) used here are from Emulab.net: Emulab hardware

default `ix` hardware info in FreeBSD 15 CURRENT by commit 6e414739fc

root@s1:~ # ifconfig ix2
ix2: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
        options=4e53fbb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,WOL_UCAST,WOL_MCAST,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS,MEXTPG>
        ether a0:36:9f:08:22:b0
        inet 10.1.1.2 netmask 0xffffff00 broadcast 10.1.1.255
        media: Ethernet autoselect (10Gbase-Twinax <full-duplex,rxpause,txpause>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
root@s1:~ # pciconf -lv | rg "ix2" -A 4
ix2@pci0:66:0:0:        class=0x020000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x154d subvendor=0x8086 subdevice=0x7b11
    vendor     = 'Intel Corporation'
    device     = 'Ethernet 10G 2P X520 Adapter'
    class      = network
    subclass   = ethernet
root@s1:~ #

root@r1:~ # ifconfig ix2
ix2: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
        options=4e53fbb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,WOL_UCAST,WOL_MCAST,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS,MEXTPG>
        ether a0:36:9f:07:33:90
        inet 10.1.1.3 netmask 0xffffff00 broadcast 10.1.1.255
        media: Ethernet autoselect (10Gbase-Twinax <full-duplex,rxpause,txpause>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
root@r1:~ # pciconf -lv | rg "ix2" -A 4
ix2@pci0:66:0:0:        class=0x020000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x154d subvendor=0x8086 subdevice=0x7b11
    vendor     = 'Intel Corporation'
    device     = 'Ethernet 10G 2P X520 Adapter'
    class      = network
    subclass   = ethernet
root@r1:~ #

default `ixgbe` hardware info in Ubuntu-22.04 Linux 5.15.0-112-generic

root@s1:~# ifconfig enp66s0f0
enp66s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.1.2  netmask 255.255.255.0  broadcast 10.1.1.255
        inet6 fe80::a236:9fff:fe08:22b0  prefixlen 64  scopeid 0x20<link>
        ether a0:36:9f:08:22:b0  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 1076 (1.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@s1:~# ethtool -i enp66s0f0
driver: ixgbe
version: 5.15.0-112-generic
firmware-version: 0x8000095d, 13.1.10
expansion-rom-version: 
bus-info: 0000:42:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
root@s1:~# lspci -v -s 42:00.0
42:00.0 Ethernet controller: Intel Corporation Ethernet 10G 2P X520 Adapter (rev 01)
        Subsystem: Intel Corporation 10GbE 2P X520 Adapter
        Flags: bus master, fast devsel, latency 0, IRQ 182, NUMA node 1
        Memory at d0d00000 (64-bit, non-prefetchable) [size=1M]
        I/O ports at bcc0 [size=32]
        Memory at d0ff8000 (64-bit, non-prefetchable) [size=16K]
        Expansion ROM at d0000000 [disabled] [size=512K]
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
        Capabilities: [70] MSI-X: Enable+ Count=64 Masked-
        Capabilities: [a0] Express Endpoint, MSI 00
        Capabilities: [e0] Vital Product Data
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Device Serial Number 00-00-00-ff-ff-00-00-00
        Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
        Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
        Kernel driver in use: ixgbe
        Kernel modules: ixgbe

root@s1:~#

root@r1:~# ifconfig enp66s0f0
enp66s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.1.3  netmask 255.255.255.0  broadcast 10.1.1.255
        inet6 fe80::a236:9fff:fe07:3390  prefixlen 64  scopeid 0x20<link>
        ether a0:36:9f:07:33:90  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 1076 (1.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@r1:~# ethtool -i enp66s0f0
driver: ixgbe
version: 5.15.0-112-generic
firmware-version: 0x8000095d, 13.1.10
expansion-rom-version: 
bus-info: 0000:42:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
root@r1:~# lspci -v -s 42:00.0
42:00.0 Ethernet controller: Intel Corporation Ethernet 10G 2P X520 Adapter (rev 01)
        Subsystem: Intel Corporation 10GbE 2P X520 Adapter
        Flags: bus master, fast devsel, latency 0, IRQ 183, NUMA node 1
        Memory at d1d00000 (64-bit, non-prefetchable) [size=1M]
        I/O ports at ccc0 [size=32]
        Memory at d1ff8000 (64-bit, non-prefetchable) [size=16K]
        Expansion ROM at d1000000 [disabled] [size=512K]
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
        Capabilities: [70] MSI-X: Enable+ Count=64 Masked-
        Capabilities: [a0] Express Endpoint, MSI 00
        Capabilities: [e0] Vital Product Data
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Device Serial Number 00-00-00-ff-ff-00-00-00
        Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
        Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
        Kernel driver in use: ixgbe
        Kernel modules: ixgbe

root@r1:~# 

test IPv4 traffic

test ping-pong latency

test result

kernel version

enable_aim value

min/avg/max ms

stddev

delta

FreeBSD 15.0-CURRENT stock

0 (default)

0.198/0.243/0.289

0.024

base0

1

0.215/0.237/0.261

0.013

base1

2

0.204/0.228/0.253

0.016

base2

FreeBSD 15.0-CURRENT D30155

0

0.216/0.227/0.244

0.009

-

1 (default)

0.207/0.240/0.254

0.012

-

2

0.226/0.243/0.264

0.011

-

Ubuntu Linux 5.15.0-112-generic

default

0.215/0.239/0.271

0.016

-

test detail

root@s1:~ # sysctl -d dev.ix.2.enable_aim
dev.ix.2.enable_aim: Interrupt Moderation
root@s1:~ # sysctl dev.ix.2.enable_aim           // default value is 1
dev.ix.2.enable_aim: 1
root@s1:~ # sysctl dev.ix.2.enable_aim=0
dev.ix.2.enable_aim: 1 -> 0

root@r1:~ # sysctl -d dev.ix.2.enable_aim
dev.ix.2.enable_aim: Interrupt Moderation
root@r1:~ # sysctl dev.ix.2.enable_aim           // default value is 1
dev.ix.2.enable_aim: 1
root@r1:~ # sysctl dev.ix.2.enable_aim=0
dev.ix.2.enable_aim: 1 -> 0

root@s1:~ # ping -S 10.1.1.2 -c 10 r1
PING r1-link1 (10.1.1.3) from 10.1.1.2: 56 data bytes
64 bytes from 10.1.1.3: icmp_seq=0 ttl=64 time=0.238 ms
64 bytes from 10.1.1.3: icmp_seq=1 ttl=64 time=0.217 ms
64 bytes from 10.1.1.3: icmp_seq=2 ttl=64 time=0.226 ms
64 bytes from 10.1.1.3: icmp_seq=3 ttl=64 time=0.244 ms
64 bytes from 10.1.1.3: icmp_seq=4 ttl=64 time=0.224 ms
64 bytes from 10.1.1.3: icmp_seq=5 ttl=64 time=0.222 ms
64 bytes from 10.1.1.3: icmp_seq=6 ttl=64 time=0.220 ms
64 bytes from 10.1.1.3: icmp_seq=7 ttl=64 time=0.234 ms
64 bytes from 10.1.1.3: icmp_seq=8 ttl=64 time=0.229 ms
64 bytes from 10.1.1.3: icmp_seq=9 ttl=64 time=0.216 ms

--- r1-link1 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.216/0.227/0.244/0.009 ms

root@s1:~ # sysctl dev.ix.2.enable_aim=1
dev.ix.2.enable_aim: 0 -> 1
root@s1:~ #
root@r1:~ # sysctl dev.ix.2.enable_aim=1
dev.ix.2.enable_aim: 0 -> 1
root@r1:~ #

root@s1:~ # ping -S 10.1.1.2 -c 10 r1
PING r1-link1 (10.1.1.3) from 10.1.1.2: 56 data bytes
64 bytes from 10.1.1.3: icmp_seq=0 ttl=64 time=0.250 ms
64 bytes from 10.1.1.3: icmp_seq=1 ttl=64 time=0.233 ms
64 bytes from 10.1.1.3: icmp_seq=2 ttl=64 time=0.207 ms
64 bytes from 10.1.1.3: icmp_seq=3 ttl=64 time=0.245 ms
64 bytes from 10.1.1.3: icmp_seq=4 ttl=64 time=0.254 ms
64 bytes from 10.1.1.3: icmp_seq=5 ttl=64 time=0.241 ms
64 bytes from 10.1.1.3: icmp_seq=6 ttl=64 time=0.248 ms
64 bytes from 10.1.1.3: icmp_seq=7 ttl=64 time=0.242 ms
64 bytes from 10.1.1.3: icmp_seq=8 ttl=64 time=0.238 ms
64 bytes from 10.1.1.3: icmp_seq=9 ttl=64 time=0.239 ms

--- r1-link1 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.207/0.240/0.254/0.012 ms

root@s1:~ # sysctl dev.ix.2.enable_aim=2
dev.ix.2.enable_aim: 1 -> 2
root@s1:~ # 
root@r1:~ # sysctl dev.ix.2.enable_aim=2
dev.ix.2.enable_aim: 1 -> 2

root@s1:~ # ping -S 10.1.1.2 -c 10 r1
PING r1-link1 (10.1.1.3) from 10.1.1.2: 56 data bytes
64 bytes from 10.1.1.3: icmp_seq=0 ttl=64 time=0.264 ms
64 bytes from 10.1.1.3: icmp_seq=1 ttl=64 time=0.251 ms
64 bytes from 10.1.1.3: icmp_seq=2 ttl=64 time=0.248 ms
64 bytes from 10.1.1.3: icmp_seq=3 ttl=64 time=0.248 ms
64 bytes from 10.1.1.3: icmp_seq=4 ttl=64 time=0.249 ms
64 bytes from 10.1.1.3: icmp_seq=5 ttl=64 time=0.239 ms
64 bytes from 10.1.1.3: icmp_seq=6 ttl=64 time=0.231 ms
64 bytes from 10.1.1.3: icmp_seq=7 ttl=64 time=0.226 ms
64 bytes from 10.1.1.3: icmp_seq=8 ttl=64 time=0.230 ms
64 bytes from 10.1.1.3: icmp_seq=9 ttl=64 time=0.242 ms

--- r1-link1 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.226/0.243/0.264/0.011 ms

* test ping on a stock kernel without the patch D30155

(1)
root@s1:~ # sysctl dev.ix.2.enable_aim
dev.ix.2.enable_aim: 0
root@r1:~ # sysctl dev.ix.2.enable_aim
dev.ix.2.enable_aim: 0
root@s1:~ # ping -S 10.1.1.2 -c 10 r1
PING r1-link1 (10.1.1.3) from 10.1.1.2: 56 data bytes
64 bytes from 10.1.1.3: icmp_seq=0 ttl=64 time=0.289 ms
64 bytes from 10.1.1.3: icmp_seq=1 ttl=64 time=0.256 ms
64 bytes from 10.1.1.3: icmp_seq=2 ttl=64 time=0.198 ms
64 bytes from 10.1.1.3: icmp_seq=3 ttl=64 time=0.233 ms
64 bytes from 10.1.1.3: icmp_seq=4 ttl=64 time=0.237 ms
64 bytes from 10.1.1.3: icmp_seq=5 ttl=64 time=0.236 ms
64 bytes from 10.1.1.3: icmp_seq=6 ttl=64 time=0.241 ms
64 bytes from 10.1.1.3: icmp_seq=7 ttl=64 time=0.219 ms
64 bytes from 10.1.1.3: icmp_seq=8 ttl=64 time=0.268 ms
64 bytes from 10.1.1.3: icmp_seq=9 ttl=64 time=0.256 ms

--- r1-link1 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.198/0.243/0.289/0.024 ms

(2)
root@s1:~ # sysctl dev.ix.2.enable_aim=1
dev.ix.2.enable_aim: 0 -> 1
root@r1:~ # sysctl dev.ix.2.enable_aim=1
dev.ix.2.enable_aim: 0 -> 1
root@s1:~ # ping -S 10.1.1.2 -c 10 r1
PING r1-link1 (10.1.1.3) from 10.1.1.2: 56 data bytes
64 bytes from 10.1.1.3: icmp_seq=0 ttl=64 time=0.254 ms
64 bytes from 10.1.1.3: icmp_seq=1 ttl=64 time=0.241 ms
64 bytes from 10.1.1.3: icmp_seq=2 ttl=64 time=0.222 ms
64 bytes from 10.1.1.3: icmp_seq=3 ttl=64 time=0.261 ms
64 bytes from 10.1.1.3: icmp_seq=4 ttl=64 time=0.241 ms
64 bytes from 10.1.1.3: icmp_seq=5 ttl=64 time=0.233 ms
64 bytes from 10.1.1.3: icmp_seq=6 ttl=64 time=0.215 ms
64 bytes from 10.1.1.3: icmp_seq=7 ttl=64 time=0.241 ms
64 bytes from 10.1.1.3: icmp_seq=8 ttl=64 time=0.231 ms
64 bytes from 10.1.1.3: icmp_seq=9 ttl=64 time=0.232 ms

--- r1-link1 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.215/0.237/0.261/0.013 ms

(3)
root@s1:~ # sysctl dev.ix.2.enable_aim=2
dev.ix.2.enable_aim: 1 -> 2
root@r1:~ # sysctl dev.ix.2.enable_aim=2
dev.ix.2.enable_aim: 1 -> 2
root@s1:~ # ping -S 10.1.1.2 -c 10 r1
PING r1-link1 (10.1.1.3) from 10.1.1.2: 56 data bytes
64 bytes from 10.1.1.3: icmp_seq=0 ttl=64 time=0.253 ms
64 bytes from 10.1.1.3: icmp_seq=1 ttl=64 time=0.244 ms
64 bytes from 10.1.1.3: icmp_seq=2 ttl=64 time=0.232 ms
64 bytes from 10.1.1.3: icmp_seq=3 ttl=64 time=0.204 ms
64 bytes from 10.1.1.3: icmp_seq=4 ttl=64 time=0.225 ms
64 bytes from 10.1.1.3: icmp_seq=5 ttl=64 time=0.206 ms
64 bytes from 10.1.1.3: icmp_seq=6 ttl=64 time=0.241 ms
64 bytes from 10.1.1.3: icmp_seq=7 ttl=64 time=0.237 ms
64 bytes from 10.1.1.3: icmp_seq=8 ttl=64 time=0.224 ms
64 bytes from 10.1.1.3: icmp_seq=9 ttl=64 time=0.211 ms

--- r1-link1 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.204/0.228/0.253/0.016 ms
root@s1:~ #

* test ping on a stock Ubuntu 22.04 kernel 5.15.0-112-generic

root@s1:~# ping -I 10.1.1.2 -c 10 r1
PING r1-link1 (10.1.1.3) from 10.1.1.2 : 56(84) bytes of data.
64 bytes from r1-link1 (10.1.1.3): icmp_seq=1 ttl=64 time=0.215 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=2 ttl=64 time=0.232 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=3 ttl=64 time=0.248 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=4 ttl=64 time=0.235 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=5 ttl=64 time=0.262 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=6 ttl=64 time=0.271 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=7 ttl=64 time=0.242 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=8 ttl=64 time=0.236 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=9 ttl=64 time=0.226 ms
64 bytes from r1-link1 (10.1.1.3): icmp_seq=10 ttl=64 time=0.229 ms

--- r1-link1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9218ms
rtt min/avg/max/mdev = 0.215/0.239/0.271/0.016 ms

test tso performance under iperf3

The TSO support for IPv4/IPv6 is enabled in default.

test result

kernel version

enable_aim value

iperf3 throughput

delta

FreeBSD 15.0-CURRENT stock

0 (default)

3.64 Gbits/sec

base0

1

3.57 Gbits/sec

base1

2

3.54 Gbits/sec

base2

FreeBSD 15.0-CURRENT D30155

0

3.74 Gbits/sec

+2.7%

1 (default)

3.79 Gbits/sec

+6.2%

2

3.78 Gbits/sec

+6.8%

Ubuntu Linux 5.15.0-112-generic

default

9.42 Gbits/sec

-

test detail

root@s1:~ # sysctl dev.ix.2.enable_aim=0
dev.ix.2.enable_aim: 2 -> 0
root@r1:~ # sysctl dev.ix.2.enable_aim=0
dev.ix.2.enable_aim: 2 -> 0

root@s1:~ # iperf3 -c r1 -t 10 -i 2
Connecting to host r1, port 5201
[  5] local 10.1.1.2 port 55267 connected to 10.1.1.3 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-2.00   sec   703 MBytes  2.95 Gbits/sec  129    277 KBytes       
[  5]   2.00-4.00   sec   936 MBytes  3.92 Gbits/sec  130    345 KBytes       
[  5]   4.00-6.00   sec   943 MBytes  3.96 Gbits/sec  165    215 KBytes       
[  5]   6.00-8.00   sec   948 MBytes  3.97 Gbits/sec  120    360 KBytes       
[  5]   8.00-10.00  sec   927 MBytes  3.89 Gbits/sec  149    242 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  4.35 GBytes  3.74 Gbits/sec  693             sender
[  5]   0.00-10.00  sec  4.35 GBytes  3.74 Gbits/sec                  receiver

iperf Done.

root@s1:~ # sysctl dev.ix.2 | grep _rate              // interrupt rate during iperf3 bulk transfer
dev.ix.2.queue7.interrupt_rate: 5208
dev.ix.2.queue6.interrupt_rate: 31250
dev.ix.2.queue5.interrupt_rate: 31250
dev.ix.2.queue4.interrupt_rate: 31250
dev.ix.2.queue3.interrupt_rate: 100000
dev.ix.2.queue2.interrupt_rate: 71428
dev.ix.2.queue1.interrupt_rate: 31250
dev.ix.2.queue0.interrupt_rate: 31250

root@s1:~ # sysctl dev.ix.2.enable_aim=1
dev.ix.2.enable_aim: 0 -> 1

root@r1:~ # sysctl dev.ix.2.enable_aim=1
dev.ix.2.enable_aim: 0 -> 1

root@s1:~ # iperf3 -c r1 -t 10 -i 2
Connecting to host r1, port 5201
[  5] local 10.1.1.2 port 43844 connected to 10.1.1.3 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-2.00   sec   777 MBytes  3.26 Gbits/sec  511    404 KBytes       
[  5]   2.00-4.00   sec   944 MBytes  3.96 Gbits/sec  145    427 KBytes       
[  5]   4.00-6.00   sec   907 MBytes  3.80 Gbits/sec  149    295 KBytes       
[  5]   6.00-8.00   sec   934 MBytes  3.92 Gbits/sec   93    397 KBytes       
[  5]   8.00-10.00  sec   960 MBytes  4.02 Gbits/sec  152    346 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  4.42 GBytes  3.79 Gbits/sec  1050             sender
[  5]   0.00-10.00  sec  4.42 GBytes  3.79 Gbits/sec                  receiver

iperf Done.

root@s1:~ # sysctl dev.ix.2 | grep _rate              // interrupt rate during iperf3 bulk transfer
dev.ix.2.queue7.interrupt_rate: 5208
dev.ix.2.queue6.interrupt_rate: 31250
dev.ix.2.queue5.interrupt_rate: 83333
dev.ix.2.queue4.interrupt_rate: 31250
dev.ix.2.queue3.interrupt_rate: 7936
dev.ix.2.queue2.interrupt_rate: 71428
dev.ix.2.queue1.interrupt_rate: 31250
dev.ix.2.queue0.interrupt_rate: 7936

root@s1:~ # sysctl dev.ix.2.enable_aim=2
dev.ix.2.enable_aim: 1 -> 2

root@r1:~ # sysctl dev.ix.2.enable_aim=2
dev.ix.2.enable_aim: 1 -> 2

root@s1:~ # iperf3 -c r1 -t 10 -i 2
Connecting to host r1, port 5201
[  5] local 10.1.1.2 port 13194 connected to 10.1.1.3 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-2.00   sec   713 MBytes  2.99 Gbits/sec  512    360 KBytes       
[  5]   2.00-4.00   sec   933 MBytes  3.92 Gbits/sec   85    483 KBytes       
[  5]   4.00-6.00   sec   949 MBytes  3.98 Gbits/sec  157    337 KBytes       
[  5]   6.00-8.00   sec   953 MBytes  4.00 Gbits/sec  160    437 KBytes       
[  5]   8.00-10.00  sec   956 MBytes  4.01 Gbits/sec  151   60.8 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  4.40 GBytes  3.78 Gbits/sec  1065             sender
[  5]   0.00-10.00  sec  4.40 GBytes  3.78 Gbits/sec                  receiver

iperf Done.

root@s1:~ # sysctl dev.ix.2 | grep _rate              // interrupt rate during iperf3 bulk transfer
dev.ix.2.queue7.interrupt_rate: 5208
dev.ix.2.queue6.interrupt_rate: 31250
dev.ix.2.queue5.interrupt_rate: 2702
dev.ix.2.queue4.interrupt_rate: 31250
dev.ix.2.queue3.interrupt_rate: 100000
dev.ix.2.queue2.interrupt_rate: 71428
dev.ix.2.queue1.interrupt_rate: 31250
dev.ix.2.queue0.interrupt_rate: 125000

* test iperf3 performance on a stock kernel without the patch D30155

(1)
root@s1:~ # sysctl dev.ix.2.enable_aim
dev.ix.2.enable_aim: 0
root@r1:~ # sysctl dev.ix.2.enable_aim
dev.ix.2.enable_aim: 0
root@s1:~ # iperf3 -c r1 -t 10 -i 2
Connecting to host r1, port 5201
[  5] local 10.1.1.2 port 58877 connected to 10.1.1.3 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-2.00   sec   782 MBytes  3.28 Gbits/sec  301    349 KBytes       
[  5]   2.00-4.00   sec   873 MBytes  3.66 Gbits/sec  178    218 KBytes       
[  5]   4.00-6.00   sec   890 MBytes  3.73 Gbits/sec  122    265 KBytes       
[  5]   6.00-8.00   sec   883 MBytes  3.70 Gbits/sec  111    356 KBytes       
[  5]   8.00-10.00  sec   908 MBytes  3.81 Gbits/sec  108    256 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  4.23 GBytes  3.64 Gbits/sec  820             sender
[  5]   0.00-10.00  sec  4.23 GBytes  3.64 Gbits/sec                  receiver

iperf Done.
root@s1:~ # sysctl dev.ix.2 | grep _rate              // interrupt rate during iperf3 bulk transfer
dev.ix.2.queue7.interrupt_rate: 31250
dev.ix.2.queue6.interrupt_rate: 31250
dev.ix.2.queue5.interrupt_rate: 31250
dev.ix.2.queue4.interrupt_rate: 31250
dev.ix.2.queue3.interrupt_rate: 31250
dev.ix.2.queue2.interrupt_rate: 31250
dev.ix.2.queue1.interrupt_rate: 31250
dev.ix.2.queue0.interrupt_rate: 31250

(2)
root@s1:~ # sysctl dev.ix.2.enable_aim=1
dev.ix.2.enable_aim: 0 -> 1
root@r1:~ # sysctl dev.ix.2.enable_aim=1
dev.ix.2.enable_aim: 0 -> 1
root@s1:~ # iperf3 -c r1 -t 10 -i 2
Connecting to host r1, port 5201
[  5] local 10.1.1.2 port 26259 connected to 10.1.1.3 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-2.00   sec   677 MBytes  2.84 Gbits/sec  234    301 KBytes       
[  5]   2.00-4.00   sec   889 MBytes  3.73 Gbits/sec  153    399 KBytes       
[  5]   4.00-6.00   sec   895 MBytes  3.75 Gbits/sec  156    342 KBytes       
[  5]   6.00-8.00   sec   894 MBytes  3.75 Gbits/sec  195    296 KBytes       
[  5]   8.00-10.00  sec   897 MBytes  3.76 Gbits/sec  177    375 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  4.15 GBytes  3.57 Gbits/sec  915             sender
[  5]   0.00-10.00  sec  4.15 GBytes  3.56 Gbits/sec                  receiver

iperf Done.
root@s1:~ # sysctl dev.ix.2 | grep _rate              // interrupt rate during iperf3 bulk transfer
dev.ix.2.queue7.interrupt_rate: 31250
dev.ix.2.queue6.interrupt_rate: 100000
dev.ix.2.queue5.interrupt_rate: 31250
dev.ix.2.queue4.interrupt_rate: 31250
dev.ix.2.queue3.interrupt_rate: 31250
dev.ix.2.queue2.interrupt_rate: 100000
dev.ix.2.queue1.interrupt_rate: 31250
dev.ix.2.queue0.interrupt_rate: 31250
root@s1:~ #

(3)
root@s1:~ # sysctl dev.ix.2.enable_aim=2
dev.ix.2.enable_aim: 1 -> 2
root@r1:~ # sysctl dev.ix.2.enable_aim=2
dev.ix.2.enable_aim: 1 -> 2

root@s1:~ # iperf3 -c r1 -t 10 -i 2
Connecting to host r1, port 5201
[  5] local 10.1.1.2 port 41892 connected to 10.1.1.3 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-2.00   sec   694 MBytes  2.91 Gbits/sec  352    294 KBytes       
[  5]   2.00-4.00   sec   878 MBytes  3.68 Gbits/sec  175    402 KBytes       
[  5]   4.00-6.00   sec   860 MBytes  3.61 Gbits/sec  144    378 KBytes       
[  5]   6.00-8.00   sec   891 MBytes  3.74 Gbits/sec  140    326 KBytes       
[  5]   8.00-10.00  sec   901 MBytes  3.78 Gbits/sec  131    461 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  4.12 GBytes  3.54 Gbits/sec  942             sender
[  5]   0.00-10.00  sec  4.12 GBytes  3.54 Gbits/sec                  receiver

iperf Done.
root@s1:~ # sysctl dev.ix.2 | grep _rate              // interrupt rate during iperf3 bulk transfer
dev.ix.2.queue7.interrupt_rate: 31250
dev.ix.2.queue6.interrupt_rate: 100000
dev.ix.2.queue5.interrupt_rate: 100000
dev.ix.2.queue4.interrupt_rate: 31250
dev.ix.2.queue3.interrupt_rate: 100000
dev.ix.2.queue2.interrupt_rate: 100000
dev.ix.2.queue1.interrupt_rate: 31250
dev.ix.2.queue0.interrupt_rate: 71428

* test iperf3 on a stock Ubuntu 22.04 kernel 5.15.0-112-generic

root@s1:~# iperf3 -c r1 -t 10 -i 2 -V
iperf 3.9
Linux s1.testd30155.fbsd-transport.emulab.net 5.15.0-112-generic #122-Ubuntu SMP Thu May 23 07:48:21 UTC 2024 x86_64
Control connection MSS 1448
Time: Thu, 17 Oct 2024 13:56:48 GMT
Connecting to host r1, port 5201
      Cookie: e2zxxflfogelbora5gobrz7hxxvacaojutqv
      TCP MSS: 1448 (default)
[  5] local 10.1.1.2 port 48078 connected to 10.1.1.3 port 5201
Starting Test: protocol: TCP, 1 streams, 131072 byte blocks, omitting 0 seconds, 10 second test, tos 0
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-2.00   sec  2.19 GBytes  9.42 Gbits/sec   17   1.38 MBytes       
[  5]   2.00-4.00   sec  2.19 GBytes  9.41 Gbits/sec   46   1.40 MBytes       
[  5]   4.00-6.00   sec  2.19 GBytes  9.42 Gbits/sec    0   1.43 MBytes       
[  5]   6.00-8.00   sec  2.19 GBytes  9.41 Gbits/sec    3   1.43 MBytes       
[  5]   8.00-10.00  sec  2.19 GBytes  9.41 Gbits/sec    0   1.44 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  11.0 GBytes  9.42 Gbits/sec   66             sender
[  5]   0.00-10.04  sec  11.0 GBytes  9.38 Gbits/sec                  receiver
CPU Utilization: local/sender 54.6% (1.7%u/53.0%s), remote/receiver 23.6% (2.2%u/21.4%s)
snd_tcp_congestion cubic
rcv_tcp_congestion cubic

iperf Done.
root@s1:~#

chengcui/testD30155 (last edited 2024-10-17T14:07:15+0000 by chengcui)