Dela via


RSS med maskinvaru-köhantering

RSS med maskinvaruköer förbättrar systemets prestanda i förhållande till RSS med en enda maskinvarulösning för att ta emot köer. Nätverkskort som stöder maskinvaruköer tilldelar mottagna data till flera mottagningsköer. Mottagarköerna är associerade med en processor. Nätverkskortet tilldelar mottagna data till processorer baserat på hash-värden och en indirektionstabell.

Följande bild illustrerar RSS med NIC-mottagningsköer.

Diagram som illustrerar RSS med NIC-mottagningsköer.

I bilden representerar de streckade pilarna en alternativ sökväg för mottagningsbearbetningen. RSS kan inte styra processorn som tar emot det första ISR-anropet. Drivrutinen behöver inte lägga data i kö och kan omedelbart schemalägga de initiala DPC:erna på rätt processorer.

Följande process upprepas för varje avbrott:

  1. Nätverkskortet:

    1. Använder DMA för att fylla buffertar med mottagna data.

      Miniportdrivrutinen allokerade mottagningsbuffertarna i delat minne under initieringen.

    2. Beräknar ett hash-värde.

    3. Köar bufferten för en CPU och tillhandahåller kötilldelningarna till miniportdrivrutinen.

      Nätverkskortet kan till exempel loopa steg 1–3 och DMA en lista över CPU-tilldelningar efter att ett antal paket har tagits emot. Den specifika mekanismen överlåts till NIC-designen.

    4. Avbryter systemet.

      De mottagna buffertar som systemet hanterar i ett avbrott distribueras mellan processorerna.

  2. NDIS anropar miniportdrivrutinens MiniportInterrupt funktion (ISR) på en systembestämd PROCESSOR.

  3. Miniportdrivrutinen begär att NDIS ska köa uppskjutna proceduranrop (DPC) för varje processor som har en kö som inte är tom.

    Observera att alla DPC:er måste slutföras innan drivrutinen aktiverar avbrott. Observera också att ISR kan köras på en processor som inte har några buffertar att bearbeta.

  4. NDIS anropar funktionen MiniportInterruptDPC för varje köad DPC. DPC på en viss CPU

    1. Kompileringar tar emot deskriptorer för alla mottagna buffertar i kön och indikerar data i drivrutinsstacken.

      För mer information, se Indikerar mottagning av RSS-data.

    2. Aktiverar avbrotten, om det är den sista DPC som ska slutföras. Det här avbrottet är klart och processen startar igen. Drivrutinen måste använda en atomisk åtgärd för att identifiera den senaste DPC som har slutförts. Drivrutinen kan till exempel använda funktionen NdisInterlockedDecrement för att implementera en atomisk räknare.