Dela via


Prestanda för nätverkskort

Det finns alltid nackdelar med att bestämma vilka maskinvarufunktioner som ska implementeras på ett nätverkskort. Det blir allt viktigare att överväga att lägga till funktioner för uppgiftsavlastning som möjliggör avbrottsmoderering, dynamisk justering av maskinvaran, förbättrad användning av PCI-bussen och stöd för Jumbo Frames. Dessa avlastningsfunktioner är viktiga för det avancerade nätverkskortet som används i konfigurationer som kräver högsta prestanda.

Stöd för avlastning av TCP- och IP-kontrollsummahantering

För den vanligaste nätverkstrafiken ger avlastning av kontrollsummaberäkningen till nätverkskortmaskinvaran en betydande prestandafördel genom att minska antalet cpu-cykler som krävs per byte. Kontrollsummaberäkning är den dyraste funktionen i nätverksstacken av två skäl:

  • Det bidrar till lång sökvägslängd.
  • Det orsakar cacheomsättningseffekter (vanligtvis på avsändaren).

Avlastning av kontrollsummaberäkning till avsändaren förbättrar systemets övergripande prestanda genom att minska belastningen på värdprocessorn och öka cacheeffektiviteten.

I Windows Performance Lab har vi mätt förbättringar av TCP-dataflödet på 19% när kontrollsumman avlastades under nätverksintensiva arbetsbelastningar. Analysen av den här förbättringen visar att 11% av den totala förbättringen beror på minskning av sökvägens längd och 8% beror på att cacheeffektiviteten ökar.

Avlastning av kontrollsumma på mottagaren har samma fördelar som avlastning av kontrollsumma på avsändaren. Ökad nytta kan ses på system som fungerar som både klient och server, till exempel en sockets proxyserver. På system där processorn inte nödvändigtvis är upptagen, till exempel ett klientsystem, kan fördelen med avlastning av kontrollsumma ses i förbättrade nätverkssvarstider, snarare än i märkbart förbättrat dataflöde.

Stöd för stor sändningsavlastning (LSO)

Windows erbjuder möjligheten för nätverkskortet/drivrutinen att signalera en större maximal segmentstorlek (MSS) än MTU till protokollet TCP upp till 64K. Detta gör att TCP kan allokera en buffert på upp till 64 000 till drivrutinen, vilket delar upp den stora bufferten i paket som passar i nätverkets MTU.

TCP-segmenteringsarbetet utförs av nätverkskortets eller drivrutinens hårdvara istället för av värdens CPU. Detta resulterar i en betydande prestandaförbättring om nätverkskortets PROCESSOR kan hantera det ytterligare arbetet.

För många av de testade nätverkskorten skedde ingen större förbättring för rena nätverksaktiviteter när värdprocessorn var kraftfullare än nätverkskortets maskinvara. För typiska affärsarbetsbelastningar har dock en övergripande systemprestandaförbättring på upp till 9% av dataflödet mätts, eftersom värdprocessorn använder de flesta av sina cykler för att köra transaktioner. I dessa fall, genom att avlasta TCP-segmentering till maskinvaran, frigörs värdprocessorn från segmenteringens belastning, vilket gör det möjligt för den att använda extra cykler för att utföra fler transaktioner.

Stöd för avlastning av IP-säkerhet (IPSec)

Windows erbjuder möjligheten att avlasta krypteringsarbetet för IPSec till nätverkskortmaskinvaran. Kryptering, särskilt 3 DES (även kallat trippel DES), har mycket höga cykler/byte-förhållande. Därför är det ingen överraskning att avlastning av IPSec till nätverksadapterhårdvara gav en prestandaökning på 30% i säkra Internet- och VPN-tester.

Förbättra avbrottsmoderering

Ett enkelt nätverkskort genererar ett maskinvaruavbrott på värden när ett paket anländer eller för att signalera att en paketsändningsförfrågan har slutförts. Avbrottsfördröjning och resulterande cacheomsättningseffekter lägger till overhead till den totala nätverksprestationen. I många scenarier (till exempel tung systemanvändning eller tung nätverkstrafik) är det bäst att minska kostnaden för maskinvaruavbrottet genom att bearbeta flera paket för varje avbrott.

Med tunga nätverksarbetsbelastningar har upp till 9% prestandaförbättring i dataflödet mätts i nätverksintensiva miljöer. Om du justerar parametrar för avbrottsmoderering endast för dataflödesförbättringar kan det dock resultera i en prestandaförlust på responstiden. För att bibehålla optimala inställningar och anpassa för olika arbetsbelastningar är det bäst att tillåta dynamiskt justerade parametrar enligt beskrivningen i Autojustering senare i den här artikeln.

Använda PCI-bussen effektivt

En av de viktigaste faktorerna i nätverkskortets maskinvaruprestanda är hur effektivt PCI-bussen används. Dessutom påverkar nätverkskortets DMA-prestanda prestanda för alla PCI-kort som finns på samma PCI-buss. Följande riktlinjer måste beaktas vid optimering av PCI-användning:

  • Effektivisera DMA-överföringar genom att aggregera målsidor där det är lämpligt.

  • Minska PCI-protokollomkostnaderna genom att utföra DMA i stora segment (minst 256 byte). Om möjligt, tid flödet av data så att hela paket överförs i en enda PCI-transaktion. Tänk dock på hur överföringen ska ske. Vänta till exempel inte på att alla data ska tas emot innan du påbörjar överföringar, eftersom väntetiden ökar svarstiden och förbrukar ytterligare buffertutrymme.

  • Det är bättre att fylla DMA-paketöverföringen med ytterligare byte, i stället för att kräva en kort extra överföring för att "rensa" genom att överföra de sista byteen av paketet.

  • Använd transaktionerna Memory Read, Memory Read Line och Memory Read Multiple enligt PCI-specifikationen.

  • Nätverkskortbussens gränssnittsmaskinvara bör identifiera begränsningar i värdminnesstyrenheten och justera beteendet därefter. Till exempel bör nätverksadapterbussens gränssnittshårdvara upptäcka begränsningar i minnesstyrenhetens förhämtning vid DMA-minnesläsningar och vänta en kort stund innan försöket att utföra transaktionen görs igen. Maskinvaran bör identifiera överdrivna återförsök från nätverkskortets sida och öka tiden före det första återförsöket för framtida transaktioner när det är avstängt av värden. Det är ingen idé att fortsätta skicka transaktioner till minnesstyrenheten när du är säker på att det fortfarande är upptaget med att hämta nästa sekventiella datauppsättning.

  • Minimera infogningen av väntetillstånd, särskilt under dataöverföringar. Det är bättre att lämna bussen och låta en annan PCI-adapter som använder bussen utföra arbete om mer än ett eller två väntetillstånd kommer att införas.

  • Använd minnesmappad I/O i stället för programmerad I/O. Detta gäller även för drivrutiner.

Stöd för jumboramar

Stöd för större MTU:er (Maximum Transmission Units) och därmed större ramstorlekar, särskilt Jumbo Frames, minskar belastningen på nätverksstacken per byte. En ökning av TCP-genomströmning med 20% har uppmätts när MTU ändrades från 1514 till 9000. Dessutom erhålls en betydande minskning av CPU-användningen på grund av det färre antalet anrop från nätverksstacken till nätverksdrivrutinen.