I have some somewhat collated data of TCP performance comparing 3 TCP stacks: FreeBSD, OpenBSD and lwIP.
Environment:
* 2Mb/s link, 100ms latency
* 2Mb/s presented load
* Random loss in both directions
0% Random loss
Measured load (Mb/s) (Sender, Receiver)
1.140002 ('FreeBSD5', 'FreeBSD5')
0.619301 ('FreeBSD5', 'OpenBSD3')
0.604440 ('FreeBSD5', 'lwip')
0.540672 ('lwip', 'OpenBSD3')
0.505719 ('lwip', 'FreeBSD5')
0.468173 ('OpenBSD3', 'lwip')
0.466006 ('OpenBSD3', 'FreeBSD5')
0.434343 ('OpenBSD3', 'OpenBSD3')
0.289314 ('lwip', 'lwip')
1% Random loss
Measured load (Mb/s) (Sender, Receiver)
0.463597 ('FreeBSD5', 'FreeBSD5')
0.419477 ('FreeBSD5', 'OpenBSD3')
0.380382 ('lwip', 'OpenBSD3')
0.336282 ('lwip', 'FreeBSD5')
0.307774 ('OpenBSD3', 'FreeBSD5')
0.282137 ('OpenBSD3', 'OpenBSD3')
0.108235 ('FreeBSD5', 'lwip')
0.072057 ('OpenBSD3', 'lwip')
0.065946 ('lwip', 'lwip')
5% Random loss
Measured load (Mb/s) (Sender, Receiver)
0.203844 ('lwip', 'FreeBSD5')
0.198514 ('FreeBSD5', 'FreeBSD5')
0.191556 ('lwip', 'OpenBSD3')
0.153238 ('FreeBSD5', 'OpenBSD3')
0.122783 ('OpenBSD3', 'OpenBSD3')
0.112735 ('OpenBSD3', 'FreeBSD5')
0.061515 ('FreeBSD5', 'lwip')
0.048469 ('lwip', 'lwip')
0.047389 ('OpenBSD3', 'lwip')
10% Random loss
Measured load (Mb/s) (Sender, Receiver)
0.126157 ('lwip', 'FreeBSD5')
0.125884 ('lwip', 'OpenBSD3')
0.096863 ('FreeBSD5', 'FreeBSD5')
0.083348 ('FreeBSD5', 'OpenBSD3')
0.064492 ('OpenBSD3', 'FreeBSD5')
0.055419 ('OpenBSD3', 'OpenBSD3')
0.042827 ('FreeBSD5', 'lwip')
0.038739 ('OpenBSD3', 'lwip')
0.035362 ('lwip', 'lwip')