Re: Surprising observations on the NetBSD TCP stack

Frank Kardel <[email protected]> Thu, 9 Oct 2025 19:59:59 +0200
Newsgroups gmane.os.netbsd.devel.network
Message-ID <[email protected]>
Thanks for the feedback see below.

On 2025-10-08 19:45, Michael van Elst wrote:
> [email protected] (Frank Kardel) writes:
>
>> I just got my Fiber 1GBit/sec internet connection (don't ask).
>> When testing the throughput with breitbandmessung.de I got a meager
>> 88Mbit/sec download rate.
> There are lots of things that do have an effect.
>
> Download speeds are mostly affected by local buffering.
> Upload speeds are mostly affected by congestion control.
>
I played with the buffersizes. It is still asymetric between gateway and 
notebook.

notebook -> gateway

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.09 GBytes   935 Mbits/sec 0             sender
[  5]   0.00-10.00  sec  1.09 GBytes   934 Mbits/sec                  
receiver

gateway -> notebook (iperf3 -R)

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.01  sec  1.02 GBytes   871 Mbits/sec 0             sender
[  5]   0.00-10.01  sec  1.01 GBytes   871 Mbits/sec                  
receiver

>> Testing local connectivity on the gigbit interfaces found:
>>         gateway->notebook xfer rate: 61201.87 KB/sec !!! should be more
>> like 113000 KB/sec
>>         notebook->gateway xfer rate: 113958.41 KB/sec
>> This begs the question what is limiting the transfer rate asymmetrically?
> Usually different network interfaces on either side, bad or nonexistent
> interrupt mitigation, bad use of hardware queues, etc..

Maybe there are issues in the igc driver. sending from there does not 
look completely perfect.

> This is two NetBSD machines (Xeon+wm vs Ryzen+wm) on the local network.
>
> iperf
> [  7]   0.00-10.00  sec  1.06 GBytes   914 Mbits/sec    0             sender
> [  7]   0.00-10.04  sec  1.06 GBytes   909 Mbits/sec                  receiver
>
> iperf -R
> [  7]   0.00-10.02  sec  1.07 GBytes   920 Mbits/sec    0             sender
> [  7]   0.00-10.00  sec  1.07 GBytes   919 Mbits/sec                  receiver
>
>
>> The NetBSD performance is not competative at all - barely able to keep
>> up with ADSL modems, though
>> the send rate is ok.
> I don't have a fibre connection, so testing on the internet gets
> difficult.
>
> Instead I put an RPI running Linux as a "WAN simulator" between
> two NetBSD hosts to analyze the issues. I now have a couple of
> changes in the TCP stack and workaround in the wm driver to
> get almost 1Gbit/s over a simulated WAN with 200ms TTL.
>
> This also helped a bit with internet upload speed, but at
> 40Mbit/s (VDSL) the effect is small.
>
Good to hear.
>> net.inet.tcp.recvbuf_max = 262144
>> net.inet.tcp.sendbuf_max = 262144
> You may need larger buffers (and larger increments).
>
I now have

net.inet.tcp.keepinit = 150
net.inet.tcp.recvbuf_auto = 1
net.inet.tcp.recvbuf_inc = 131072
net.inet.tcp.recvbuf_max = 1048576
net.inet.tcp.sendbuf_auto = 1
net.inet.tcp.sendbuf_inc = 131072
net.inet.tcp.sendbuf_max = 1048576