10
« kdy: 07. 02. 2023, 00:54:55 »
1. TSO/GSO se týká odchozích paketů, v podstatě to funguje tak, že skoro celým síťovým stackem projde paket, který je co největší (může to být až skoro 64 KB), a nasegmentuje se až těsně před předáním síťové kartě (GSO) nebo až v ní (TSO). Naopak, GRO/LRO se týká příchozích paketů. LRO dělá přímo síťová karta, ale protože je příliš agresivní v tom, co pospojuje dohromady, nefunguje to dobře s některými protokoly a hlavně to téměř nikdy nefunguje, pokud se ten paket pošle někam dál, takže jádro v mnoha případech automaticky LRO vypíná. Proto vzniklo GRO, které dělá software hned na začátku a které je opatrnější, takže mimo jiné nerozbíjí forwarding (při forwardování se sice pakety virtuálně spojí dohromady, ale dál se forwardují ty původní). Některé nové (a chytřejší) síťové karty podporují i "hardware GRO", kdy jde sice o GRO, ale dělá ho karta.
2. Tak jako tak ale xSO/xRO funguje tak, že po síti běhají krátké pakety a jen uvnitř síťového stacku vidíme ty dlouhé. Protože ale segmentace probíhá až hodně pozdě a sloučení naopak hodně brzy, i libpcap (tcpdump, wireshark, ...) vidí ty dlouhé pakety. Proto je také běžné, že když se díváte na TCP spojení na obou koncích, vidíte na obou stranách dlouhé pakety, ale na každé straně jiné.
3. TSO je naprosto běžný standard i v levných NIC, LRO je taky celkem běžné, ale vzhledem k notorickým problémům s ním bývá defaultně vypnuté. Intel byl jeden z mála, kdo ho měl tradičně defaultně zapnuté, ale nakonec se IIRC nechali přesvědčit, že to opravdu není dobrý nápad. GSO/GRO z podstaty věci nevyžaduje podporu v NIC, takže tam je úplně jedno, od jakého je karta výrobce a jaký je to model.
4. S přerušeními to moc společného nemá. Tvrzení, že co příchozí paket, to přerušení, neplatí už opravdu hodně dlouho (15-20 let). Navíc i kdyby to tak bylo, týkalo by se to stejně jen LRO, kterému je tak jako tak lepší se vyhnout. Skutečný důvod je ten, že většina toho, co se s paketem děje u příchozích i odchozích, pracuje jen s metadaty a hlavičkami, takže je jedno, jak je paket dlouhý; proto je efektivnější pakety, u kterých to jde, zpracovávat dohromady jako jeden velký. U vyšších rychlostí to ani jinak nejde, 10 Gb/s je asi tak hranice toho, co se dá ještě v jednom spojení zvládnout bez GSO/GRO (na dostatečně rychlém procesoru).