Linux: TCP Segmentation Offload (TSO)

Címkék

Scott Feldman bejelentette, hogy 2.5.33-as kernel megjelenésével az e1000 driver (Intel réz alapú Gigabit Ethernet csatoló) támogatja a TCP Segmentation Offload-ot (TSO), amely nagy mértékben megnövelheti a két-irányú hálózati áteresztőképességet.

A TCP Segmentation Offload (más néven TCP Large Send) akkor lép működésbe, amikor a pufferekbe nagyobb csomag érkezik, mint az MTU, azaz a Maximum Transmission Unit. A fejlesztés alatt álló munka segítségével a nagyobb csomagokat kisebb csomagokra lehet bontani, amelyet utána NIC továbbít. Konkrétan, ebben az esetben az e1000 driver 64k-s csomagokat továbbít a hálózati kártya felé, amely közben le lesz bontva 1500byteos csomagokra, amely a megfelelő MTU jelen esetben.

Alexey Kuznetsov beépítette a TSO támogatást a TCP stackbe amely egyelőre nem más mint "játék szintű implementáció a TCP-ben" - állítja Kuznetsov. Mindenesetre egy jó kezdés a TSO támogatásra, mielőtt megjelennek a további TSO-képes hálózati csatolókártyák.

Néhány teszt eredmény:A különbség a 2.5.32 és a 2.5.33 között (az utóbbi TSO támogatással), e1000 driver, gyors tesztek a Chariot nevű kereskedelmi mérőprogrammal:

Tx/Rx TCP file send long (bi-directional Rx/Tx)

w/o TSO: 1500Mbps, 82% CPU

w/ TSO: 1633Mbps, 75% CPU

Tx TCP file send long (Tx only)

w/o TSO: 940Mbps, 40% CPU

w/ TSO: 940Mbps, 19% CPU

A jobb teljesítmény a két-irányú tesztben jelentkezik, minimális CPU idő megtakarítás mellett. A Tx only tesztben is nyerünk a TSO támogatással, ha mást nem CPU időt, viszont az jelentősebb ebben az esetben. Vegyük figyelembe, hogy a driver és a TSO támogatás erősen korai kiadás, ettől csak jobb eredményeket kaphatunk a későbbiekben.

(milyen mákom van, hogy éppen van egy e1000 kártyám =)

Hozzászólások

Nincs link, LKML archivumban megtalalhato. A sajat levelezoprogramoban van a level, nem akartam bevagni mert tul hosszu volt.

Itt van Feldman levele, ebben sem latsz tobbet a tesztrol:

From: Scott Feldman

To: linux-kernel mailing list, linux-net

Subject: TCP Segmentation Offloading (TSO)

Date: Mon, 2 Sep 2002 10:45:08 -0700

TCP Segmentation Offloading (TSO) is enabled[1] in 2.5.33, along with an enabled e1000 driver. Other capable devices can be enabled ala e1000; the driver interface (NETIF_F_TSO) is very simple.

So, fire up you favorite networking performance tool and compare the

performance gains between 2.5.32 and 2.5.33 using e1000. I ran a quick test

on a dual P4 workstation system using the commercial tool Chariot:

Tx/Rx TCP file send long (bi-directional Rx/Tx)

w/o TSO: 1500Mbps, 82% CPU

w/ TSO: 1633Mbps, 75% CPU

Tx TCP file send long (Tx only)

w/o TSO: 940Mbps, 40% CPU

w/ TSO: 940Mbps, 19% CPU

A good bump in throughput for the bi-directional test. The Tx-only test was

already at wire speed, so the gains are pure CPU savings.

I'd like to see SPECWeb results w/ and w/o TSO, and any other relevant testing. UDP framentation is not offloaded, so keep testing to TCP.

-scott

[1] Kudos to Alexey Kuznetsov for enabling the stack with TSO support, to Chris Leech for providing the e1000 bits and a prototype stack, and to David Miller for consultation.