Page MenuHomeFreeBSD

LRO nsegs
ClosedPublic

Authored by lstewart on Aug 18 2016, 3:15 PM.

Details

Summary

Pass the number of segments coalesced by LRO up the stack by repurposing the tso_segsz pkthdr field during RX processing, and use the information in TCP for more correct accounting and as a congestion control input. This is only a start, and an audit of other uses for the data is left as future work.

Diff Detail

Repository
rS FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

lstewart updated this revision to Diff 19458.Aug 18 2016, 3:15 PM
lstewart retitled this revision from to LRO nsegs.
lstewart updated this object.
lstewart edited the test plan for this revision. (Show Details)
lstewart added reviewers: rrs, gallatin, np, bz.
lstewart set the repository for this revision to rS FreeBSD src repository.
lstewart added a subscriber: transport.
rrs accepted this revision.Aug 18 2016, 3:54 PM
rrs edited edge metadata.

Yeah!!!

This revision is now accepted and ready to land.Aug 18 2016, 3:54 PM
gallatin accepted this revision.Aug 18 2016, 4:12 PM
gallatin edited edge metadata.

I can't prove my paranoia, so I think we should get this in, as it will be an improvement on balance.

sys/netinet/tcp_lro.c
395 ↗(On Diff #19458)

I have a slight twinge of paranoia that not every path that does not flow through LRO will use a properly initialized (zeroed) pkthdr mbuf, and we might see garbage in this field.

np edited edge metadata.Aug 18 2016, 8:08 PM

A similar-ish problem in the current LRO implementation is that it doesn't heed the TCP PSH bit and continues to aggregate frames, and the upper layers do not know how many frames with PSH bit were compressed into the LRO'd packet.

This revision was automatically updated to reflect the committed changes.