Sure, kernel is# opnsense-update -zkr 21.7.2-rssMake sure to set net.inet.rss.enabled to "1" from System: Settings: Tunables and reboot. As mentioned the sysctl cannot be changed at runtime anymore.Cheers,Franco
root@OPNsense:~ # netstat -QConfiguration:Setting Current LimitThread count 4 4Default queue limit 256 10240Dispatch policy direct n/aThreads bound to CPUs enabled n/aProtocols:Name Proto QLimit Policy Dispatch Flagsip 1 1000 cpu hybrid C--igmp 2 256 source default ---rtsock 3 256 source default ---arp 4 256 source default ---ether 5 256 cpu direct C--ip6 6 256 flow default ---ip_direct 9 256 cpu hybrid C--ip6_direct 10 256 cpu hybrid C--Workstreams:WSID CPU Name Len WMark Disp'd HDisp'd QDrops Queued Handled 0 0 ip 0 9 0 2531 0 1853 4384 0 0 igmp 0 0 0 0 0 0 0 0 0 rtsock 0 0 0 0 0 0 0 0 0 arp 0 0 2 0 0 0 2 0 0 ether 0 0 3519 0 0 0 3519 0 0 ip6 0 0 138 0 0 0 138 0 0 ip_direct 0 0 0 0 0 0 0 0 0 ip6_direct 0 0 0 0 0 0 0 1 1 ip 0 11 0 4706 0 4646 9352 1 1 igmp 0 0 0 0 0 0 0 1 1 rtsock 0 0 0 0 0 0 0 1 1 arp 0 0 4 0 0 0 4 1 1 ether 0 0 5731 0 0 0 5731 1 1 ip6 0 0 146 0 0 0 146 1 1 ip_direct 0 0 0 0 0 0 0 1 1 ip6_direct 0 0 0 0 0 0 0 2 2 ip 0 9 0 1794 0 5857 7651 2 2 igmp 0 0 0 0 0 0 0 2 2 rtsock 0 5 0 0 0 153 153 2 2 arp 0 0 0 0 0 0 0 2 2 ether 0 0 2374 0 0 0 2374 2 2 ip6 0 1 189 0 0 7 196 2 2 ip_direct 0 0 0 0 0 0 0 2 2 ip6_direct 0 0 0 0 0 0 0 3 3 ip 0 6 0 2706 0 4659 7365 3 3 igmp 0 0 0 0 0 0 0 3 3 rtsock 0 0 0 0 0 0 0 3 3 arp 0 0 250 0 0 0 250 3 3 ether 0 0 3526 0 0 0 3526 3 3 ip6 0 1 137 0 0 3 140 3 3 ip_direct 0 0 0 0 0 0 0 3 3 ip6_direct 0 0 0 0 0 0 0root@OPNsense:~ # sysctl -w net.isr.dispatch=hybridnet.isr.dispatch: direct -> hybridroot@OPNsense:~ # netstat -QConfiguration:Setting Current LimitThread count 4 4Default queue limit 256 10240Dispatch policy hybrid n/aThreads bound to CPUs enabled n/aProtocols:Name Proto QLimit Policy Dispatch Flagsip 1 1000 cpu hybrid C--igmp 2 256 source default ---rtsock 3 256 source default ---arp 4 256 source default ---ether 5 256 cpu direct C--ip6 6 256 flow default ---ip_direct 9 256 cpu hybrid C--ip6_direct 10 256 cpu hybrid C--Workstreams:WSID CPU Name Len WMark Disp'd HDisp'd QDrops Queued Handled 0 0 ip 0 9 0 2797 0 5265 8062 0 0 igmp 0 0 0 0 0 0 0 0 0 rtsock 0 0 0 0 0 0 0 0 0 arp 0 0 3 0 0 0 3 0 0 ether 0 0 4026 0 0 0 4026 0 0 ip6 0 0 160 0 0 0 160 0 0 ip_direct 0 0 0 0 0 0 0 0 0 ip6_direct 0 0 0 0 0 0 0 1 1 ip 0 11 0 5042 0 4827 9869 1 1 igmp 0 0 0 0 0 0 0 1 1 rtsock 0 0 0 0 0 0 0 1 1 arp 0 1 4 0 0 2 6 1 1 ether 0 0 6351 0 0 0 6351 1 1 ip6 0 0 170 1 0 0 171 1 1 ip_direct 0 0 0 0 0 0 0 1 1 ip6_direct 0 0 0 0 0 0 0 2 2 ip 0 9 0 2109 0 8354 10463 2 2 igmp 0 0 0 0 0 0 0 2 2 rtsock 0 5 0 0 0 164 164 2 2 arp 0 0 0 0 0 0 0 2 2 ether 0 0 2829 0 0 0 2829 2 2 ip6 0 1 228 1 0 11 240 2 2 ip_direct 0 0 0 0 0 0 0 2 2 ip6_direct 0 0 0 0 0 0 0 3 3 ip 0 6 0 3034 0 6392 9426 3 3 igmp 0 0 0 0 0 0 0 3 3 rtsock 0 0 0 0 0 0 0 3 3 arp 0 0 385 0 0 0 385 3 3 ether 0 0 4073 0 0 0 4073 3 3 ip6 0 1 145 0 0 3 148 3 3 ip_direct 0 0 0 0 0 0 0 3 3 ip6_direct 0 0 0 0 0 0 0
I too had to add the "net.isr.dispatch = hybrid" toSystem > Settings > Tunables
Thanks, updated to that kernel and set dispatch to hybrid manually again (do I have to?)
Best result I got across a layer 3 switch;QuoteC:\iperf-3.1.3-win64>iperf3.exe -p 30718 -c 192.168.1.242Connecting to host 192.168.1.242, port 30718[ 4] local 10.1.1.16 port 63670 connected to 192.168.1.242 port 30718[ ID] Interval Transfer Bandwidth[ 4] 0.00-1.00 sec 83.4 MBytes 699 Mbits/sec[ 4] 1.00-2.00 sec 190 MBytes 1.59 Gbits/sec[ 4] 2.00-3.00 sec 269 MBytes 2.26 Gbits/sec[ 4] 3.00-4.00 sec 262 MBytes 2.20 Gbits/sec[ 4] 4.00-5.00 sec 260 MBytes 2.18 Gbits/sec[ 4] 5.00-6.00 sec 263 MBytes 2.21 Gbits/sec[ 4] 6.00-7.00 sec 214 MBytes 1.79 Gbits/sec[ 4] 7.00-8.00 sec 246 MBytes 2.06 Gbits/sec[ 4] 8.00-9.00 sec 250 MBytes 2.10 Gbits/sec[ 4] 9.00-10.00 sec 208 MBytes 1.74 Gbits/sec- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bandwidth[ 4] 0.00-10.00 sec 2.19 GBytes 1.88 Gbits/sec sender[ 4] 0.00-10.00 sec 2.19 GBytes 1.88 Gbits/sec receiver
C:\iperf-3.1.3-win64>iperf3.exe -p 30718 -c 192.168.1.242Connecting to host 192.168.1.242, port 30718[ 4] local 10.1.1.16 port 63670 connected to 192.168.1.242 port 30718[ ID] Interval Transfer Bandwidth[ 4] 0.00-1.00 sec 83.4 MBytes 699 Mbits/sec[ 4] 1.00-2.00 sec 190 MBytes 1.59 Gbits/sec[ 4] 2.00-3.00 sec 269 MBytes 2.26 Gbits/sec[ 4] 3.00-4.00 sec 262 MBytes 2.20 Gbits/sec[ 4] 4.00-5.00 sec 260 MBytes 2.18 Gbits/sec[ 4] 5.00-6.00 sec 263 MBytes 2.21 Gbits/sec[ 4] 6.00-7.00 sec 214 MBytes 1.79 Gbits/sec[ 4] 7.00-8.00 sec 246 MBytes 2.06 Gbits/sec[ 4] 8.00-9.00 sec 250 MBytes 2.10 Gbits/sec[ 4] 9.00-10.00 sec 208 MBytes 1.74 Gbits/sec- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bandwidth[ 4] 0.00-10.00 sec 2.19 GBytes 1.88 Gbits/sec sender[ 4] 0.00-10.00 sec 2.19 GBytes 1.88 Gbits/sec receiver
iperf3.exe -P 4
root@OPNsense:~ # cat /boot/loader.conf | grep rssnet.inet.rss.enabled="0"root@OPNsense:~ # sysctl net.inet.rss.enablednet.inet.rss.enabled: 1
One thing I noticed between the two kernels is that ip6 went from hybrid to direct. Not sure why ip6 wouldn't have RSS enabled. Do we need to have a tunable set for this as well?
root@OPNsense:~ # netstat -QConfiguration:Setting Current LimitThread count 8 8Default queue limit 256 10240Dispatch policy direct n/aThreads bound to CPUs enabled n/aProtocols:Name Proto QLimit Policy Dispatch Flagsip 1 1000 flow default ---igmp 2 256 source default ---rtsock 3 256 source default ---arp 4 256 source default ---ether 5 256 source direct ---ip6 6 256 flow default ---
Configuration:Setting Current LimitThread count 8 8Default queue limit 256 10240Dispatch policy direct n/aThreads bound to CPUs enabled n/aProtocols:Name Proto QLimit Policy Dispatch Flagsip 1 1000 cpu hybrid C--igmp 2 256 source default ---rtsock 3 256 source default ---arp 4 256 source default ---ether 5 256 cpu direct C--ip6 6 256 cpu hybrid C--ip_direct 9 256 cpu hybrid C--ip6_direct 10 256 cpu hybrid C--
Disable after reboot works for me. I think this is the default also when nothing was specified.Cheers,Franco
PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND 0 root -76 - 0 656K CPU3 3 0:44 91.01% [kernel{if_io_tqg_3}] 0 root -76 - 0 656K CPU1 1 0:58 90.08% [kernel{if_io_tqg_1}] 0 root -76 - 0 656K - 2 0:51 82.79% [kernel{if_io_tqg_2}] 11 root 155 ki31 0 64K RUN 0 268:36 72.36% [idle{idle: cpu0}] 11 root 155 ki31 0 64K RUN 2 269:19 15.18% [idle{idle: cpu2}] 0 root -76 - 0 656K - 0 0:53 11.80% [kernel{if_io_tqg_0}] 11 root 155 ki31 0 64K RUN 1 255:37 9.32% [idle{idle: cpu1}] 11 root 155 ki31 0 64K RUN 3 269:09 6.96% [idle{idle: cpu3}]
ix0: <Intel(R) X520 82599ES (SFI/SFP+)> port 0xf020-0xf03f mem 0xfd600000-0xfd67ffff,0xfd680000-0xfd683fff irq 10 at device 17.0 on pci0ix0: Using 2048 TX descriptors and 2048 RX descriptorsix0: Using 4 RX queues 4 TX queuesix0: Using MSI-X interrupts with 5 vectorsix0: allocated for 4 queuesix0: allocated for 4 rx queuesix0: Ethernet address: ***ix0: PCI Express Bus: Speed 5.0GT/s Width x8ix0: Error 2 setting up SR-IOVix0: netmap queues/slots: TX 4/2048, RX 4/2048root@OPNsense:~ # sysctl -a | grep rssnet.inet.rss.bucket_mapping: 0:0 1:1 2:2 3:3 4:0 5:1 6:2 7:3net.inet.rss.enabled: 1net.inet.rss.debug: 0net.inet.rss.basecpu: 0net.inet.rss.buckets: 8net.inet.rss.maxcpus: 64net.inet.rss.ncpus: 4net.inet.rss.maxbits: 7net.inet.rss.mask: 7net.inet.rss.bits: 3net.inet.rss.hashalgo: 2hw.bxe.udp_rss: 0hw.ix.enable_rss: 1root@OPNsense:~ # netstat -QConfiguration:Setting Current LimitThread count 4 4Default queue limit 256 10240Dispatch policy direct n/aThreads bound to CPUs enabled n/aProtocols:Name Proto QLimit Policy Dispatch Flagsip 1 1000 cpu hybrid C--igmp 2 256 source default ---rtsock 3 256 source default ---arp 4 256 source default ---ether 5 256 cpu direct C--ip6 6 256 flow default ---ip_direct 9 256 cpu hybrid C--ip6_direct 10 256 cpu hybrid C--Workstreams:WSID CPU Name Len WMark Disp'd HDisp'd QDrops Queued Handled 0 0 ip 0 4 0 664 0 6779 7443 0 0 igmp 0 0 0 0 0 0 0 0 0 rtsock 0 0 0 0 0 0 0 0 0 arp 0 0 415 0 0 0 415 0 0 ether 0 0 2429 0 0 0 2429 0 0 ip6 0 1 39 0 0 6 45 0 0 ip_direct 0 0 0 0 0 0 0 0 0 ip6_direct 0 0 0 0 0 0 0 1 1 ip 0 6 0 688 0 6492 7180 1 1 igmp 0 0 0 0 0 0 0 1 1 rtsock 0 7 0 0 0 338 338 1 1 arp 0 0 188 0 0 0 188 1 1 ether 0 0 1955 0 0 0 1955 1 1 ip6 0 2 114 0 0 31 145 1 1 ip_direct 0 0 0 0 0 0 0 1 1 ip6_direct 0 0 0 0 0 0 0 2 2 ip 0 5 0 1341 0 2715 4056 2 2 igmp 0 0 0 0 0 0 0 2 2 rtsock 0 0 0 0 0 0 0 2 2 arp 0 0 73 0 0 0 73 2 2 ether 0 0 4118 0 0 0 4118 2 2 ip6 0 0 782 0 0 0 782 2 2 ip_direct 0 0 0 0 0 0 0 2 2 ip6_direct 0 0 0 0 0 0 0 3 3 ip 0 16 0 353 0 4932 5285 3 3 igmp 0 0 0 0 0 0 0 3 3 rtsock 0 0 0 0 0 0 0 3 3 arp 0 0 0 0 0 0 0 3 3 ether 0 0 568 0 0 0 568 3 3 ip6 0 1 26 0 0 1 27 3 3 ip_direct 0 0 0 0 0 0 0 3 3 ip6_direct 0 0 0 0 0 0 0
ix also seems to have support for RSS, passed through my other 10G card to OPNsense.Code: [Select]ix0: <Intel(R) X520 82599ES (SFI/SFP+)> port 0xf020-0xf03f mem 0xfd600000-0xfd67ffff,0xfd680000-0xfd683fff irq 10 at device 17.0 on pci0ix0: Using 2048 TX descriptors and 2048 RX descriptorsix0: Using 4 RX queues 4 TX queuesix0: Using MSI-X interrupts with 5 vectorsix0: allocated for 4 queuesix0: allocated for 4 rx queuesix0: Ethernet address: ***ix0: PCI Express Bus: Speed 5.0GT/s Width x8ix0: Error 2 setting up SR-IOVix0: netmap queues/slots: TX 4/2048, RX 4/2048root@OPNsense:~ # sysctl -a | grep rssnet.inet.rss.bucket_mapping: 0:0 1:1 2:2 3:3 4:0 5:1 6:2 7:3net.inet.rss.enabled: 1net.inet.rss.debug: 0net.inet.rss.basecpu: 0net.inet.rss.buckets: 8net.inet.rss.maxcpus: 64net.inet.rss.ncpus: 4net.inet.rss.maxbits: 7net.inet.rss.mask: 7net.inet.rss.bits: 3net.inet.rss.hashalgo: 2hw.bxe.udp_rss: 0hw.ix.enable_rss: 1root@OPNsense:~ # netstat -QConfiguration:Setting Current LimitThread count 4 4Default queue limit 256 10240Dispatch policy direct n/aThreads bound to CPUs enabled n/aProtocols:Name Proto QLimit Policy Dispatch Flagsip 1 1000 cpu hybrid C--igmp 2 256 source default ---rtsock 3 256 source default ---arp 4 256 source default ---ether 5 256 cpu direct C--ip6 6 256 flow default ---ip_direct 9 256 cpu hybrid C--ip6_direct 10 256 cpu hybrid C--Workstreams:WSID CPU Name Len WMark Disp'd HDisp'd QDrops Queued Handled 0 0 ip 0 4 0 664 0 6779 7443 0 0 igmp 0 0 0 0 0 0 0 0 0 rtsock 0 0 0 0 0 0 0 0 0 arp 0 0 415 0 0 0 415 0 0 ether 0 0 2429 0 0 0 2429 0 0 ip6 0 1 39 0 0 6 45 0 0 ip_direct 0 0 0 0 0 0 0 0 0 ip6_direct 0 0 0 0 0 0 0 1 1 ip 0 6 0 688 0 6492 7180 1 1 igmp 0 0 0 0 0 0 0 1 1 rtsock 0 7 0 0 0 338 338 1 1 arp 0 0 188 0 0 0 188 1 1 ether 0 0 1955 0 0 0 1955 1 1 ip6 0 2 114 0 0 31 145 1 1 ip_direct 0 0 0 0 0 0 0 1 1 ip6_direct 0 0 0 0 0 0 0 2 2 ip 0 5 0 1341 0 2715 4056 2 2 igmp 0 0 0 0 0 0 0 2 2 rtsock 0 0 0 0 0 0 0 2 2 arp 0 0 73 0 0 0 73 2 2 ether 0 0 4118 0 0 0 4118 2 2 ip6 0 0 782 0 0 0 782 2 2 ip_direct 0 0 0 0 0 0 0 2 2 ip6_direct 0 0 0 0 0 0 0 3 3 ip 0 16 0 353 0 4932 5285 3 3 igmp 0 0 0 0 0 0 0 3 3 rtsock 0 0 0 0 0 0 0 3 3 arp 0 0 0 0 0 0 0 3 3 ether 0 0 568 0 0 0 568 3 3 ip6 0 1 26 0 0 1 27 3 3 ip_direct 0 0 0 0 0 0 0 3 3 ip6_direct 0 0 0 0 0 0 0
I also have an ix based card and it seems you're also having the same issue I'm having in regards to ip6 not having RSS enabled. Not sure why this would be but it was enabled for me with the previous kernel version.
iperf3 -c192.168.178.4 -R -P10.[SUM] 0.00-10.00 sec 5.66 GBytes 4.86 Gbits/sec 5533 sender[SUM] 0.00-10.00 sec 5.64 GBytes 4.85 Gbits/sec receiver
iperf3 -c192.168.178.4 -R -P10.[SUM] 0.00-10.00 sec 7.18 GBytes 6.16 Gbits/sec 122 sender[SUM] 0.00-10.00 sec 7.12 GBytes 6.12 Gbits/sec receiver
root@jdjdehaan:~ # unbound-control -c /var/unbound/unbound.conf statsthread0.num.queries=0thread0.num.queries_ip_ratelimited=0thread0.num.cachehits=0thread0.num.cachemiss=0thread0.num.prefetch=0thread0.num.expired=0thread0.num.recursivereplies=0thread0.requestlist.avg=0thread0.requestlist.max=0thread0.requestlist.overwritten=0thread0.requestlist.exceeded=0thread0.requestlist.current.all=0thread0.requestlist.current.user=0thread0.recursion.time.avg=0.000000thread0.recursion.time.median=0thread0.tcpusage=0thread1.num.queries=38thread1.num.queries_ip_ratelimited=0thread1.num.cachehits=5thread1.num.cachemiss=33thread1.num.prefetch=0thread1.num.expired=0thread1.num.recursivereplies=33thread1.requestlist.avg=0.606061thread1.requestlist.max=3thread1.requestlist.overwritten=0thread1.requestlist.exceeded=0thread1.requestlist.current.all=0thread1.requestlist.current.user=0thread1.recursion.time.avg=0.057025thread1.recursion.time.median=0.0354987thread1.tcpusage=0total.num.queries=38total.num.queries_ip_ratelimited=0total.num.cachehits=5total.num.cachemiss=33total.num.prefetch=0total.num.expired=0total.num.recursivereplies=33total.requestlist.avg=0.606061total.requestlist.max=3total.requestlist.overwritten=0total.requestlist.exceeded=0total.requestlist.current.all=0total.requestlist.current.user=0total.recursion.time.avg=0.057025total.recursion.time.median=0.0177493total.tcpusage=0time.now=1631829579.788081time.up=18.811257time.elapsed=18.811257
root@jdjdehaan:~ # unbound-control -c /var/unbound/unbound.conf statsthread0.num.queries=11thread0.num.queries_ip_ratelimited=0thread0.num.cachehits=1thread0.num.cachemiss=10thread0.num.prefetch=0thread0.num.expired=0thread0.num.recursivereplies=10thread0.requestlist.avg=2.4thread0.requestlist.max=6thread0.requestlist.overwritten=0thread0.requestlist.exceeded=0thread0.requestlist.current.all=0thread0.requestlist.current.user=0thread0.recursion.time.avg=0.681863thread0.recursion.time.median=0.436907thread0.tcpusage=0thread1.num.queries=16thread1.num.queries_ip_ratelimited=0thread1.num.cachehits=2thread1.num.cachemiss=14thread1.num.prefetch=0thread1.num.expired=0thread1.num.recursivereplies=14thread1.requestlist.avg=0.571429thread1.requestlist.max=2thread1.requestlist.overwritten=0thread1.requestlist.exceeded=0thread1.requestlist.current.all=0thread1.requestlist.current.user=0thread1.recursion.time.avg=0.362820thread1.recursion.time.median=0.131072thread1.tcpusage=0total.num.queries=27total.num.queries_ip_ratelimited=0total.num.cachehits=3total.num.cachemiss=24total.num.prefetch=0total.num.expired=0total.num.recursivereplies=24total.requestlist.avg=1.33333total.requestlist.max=6total.requestlist.overwritten=0total.requestlist.exceeded=0total.requestlist.current.all=0total.requestlist.current.user=0total.recursion.time.avg=0.495755total.recursion.time.median=0.283989total.tcpusage=0time.now=1631829178.752625time.up=124.904324time.elapsed=57.175103