Tested it with emulated rtl8139 of KVM, and Native on rtl8139 hardware.

Window Size

tcpfix2 branch

wscale2 branch

sackws2 branch

KVM TAP/NAT

Native

KVM TAP/NAT

Native

KVM TAP/NAT

Native

8K

16KB/s

16KB/s

16KB/s

16KB/s

KB/s

KB/s

16K

41KB/s

41KB/s

41KB/s

41KB/s

KB/s

KB/s

32K

90KB/s

90KB/s

90KB/s

91KB/s

KB/s

KB/s

64K

186KB/s

186KB/s

187KB/s

187KB/s

KB/s

KB/s

128K

374KB/s

374KB/s

KB/s

KB/s

256K

470KB/s

742KB/s

KB/s

KB/s

512K

450KB/s

[1]344KB/s

KB/s

KB/s

1024K

498KB/s

[1]403KB/s

KB/s

KB/s

[1]: While TCP rx window is large enough to hit the bandwidth limit(1MB/s),
packets start to drop. According to captured data, the retransmittion is very slow.
The sending host wait a long time for transmit next missing packet required by client.
This issue should be able to fixed with Selective ACK support.