Nytt API
Nytt API (även kallat NAPI ) är ett gränssnitt för att använda avbrottsreducerande tekniker för nätverksenheter i Linux-kärnan . Ett sådant tillvägagångssätt är avsett att reducera overheaden för paketmottagning. Tanken är att skjuta upp hanteringen av inkommande meddelanden tills det finns en tillräcklig mängd av dem så att det är värt att hantera dem alla på en gång.
Motivering
En enkel metod för att implementera en nätverksdrivrutin är att avbryta kärnan genom att utfärda en avbrottsbegäran (IRQ) för varje inkommande paket. Service av IRQ:er är dock kostsamt när det gäller processorresurser och tid. Därför kan den enkla implementeringen vara mycket ineffektiv i höghastighetsnätverk och ständigt avbryta kärnan med tusentals paket per sekund. Systemets totala prestanda samt nätverkets genomströmning kan bli lidande som ett resultat.
Polling är ett alternativ till avbrottsbaserad bearbetning. Kärnan kan regelbundet kontrollera ankomsten av inkommande nätverkspaket utan att avbrytas, vilket eliminerar omkostnadsbeloppet för avbrottsbehandling. Att etablera en optimal pollingfrekvens är dock viktigt. För frekvent polling slösar CPU-resurser genom att upprepade gånger söka efter inkommande paket som ännu inte har anlänt. Å andra sidan introducerar polling alltför sällan latens genom att minska systemets reaktivitet på inkommande paket, och det kan resultera i förlust av paket om bufferten för inkommande paket fylls upp innan den bearbetas.
Som en kompromiss använder Linuxkärnan det avbrottsdrivna läget som standard och växlar endast till pollingläge när flödet av inkommande paket överstiger en viss tröskel, känd som "vikten" för nätverksgränssnittet.
Kompatibla drivrutiner
En drivrutin som använder NAPI-gränssnittet fungerar enligt följande:
- Paketmottagningsavbrott är inaktiverade.
- Drivrutinen tillhandahåller en undersökningsmetod till kärnan. Den metoden kommer att hämta alla tillgängliga inkommande paket, på nätverkskortet eller en DMA- ring, så att de sedan kommer att hanteras av kärnan.
- När det tillåts anropar kärnan enhetens poll-metod för att eventuellt hantera många paket samtidigt.
Fördelar
- Belastningen som induceras av avbrott minskar även om kärnan måste polla.
- Det är mindre sannolikt att paket beställs om, medan pakethantering som inte fungerar kan vara en flaskhals annars. [ citat behövs ]
- Om kärnan inte kan hantera alla inkommande paket, behöver kärnan inte göra något arbete för att släppa dem: de skrivs helt enkelt över i nätverkskortets inkommande ringbuffert . Utan NAPI måste kärnan hantera varje inkommande paket oavsett om det finns tid att serva det, vilket leder till thrashing .
Historia
NAPI var en över tre år lång insats av Alexey Kuznetsov, Jamal Hadi Salim och Robert Olsson. De första försöken att inkludera NAPI möttes av motstånd av vissa medlemmar i samhället, men David Miller arbetade hårt för att säkerställa att NAPI inkluderades.
En hel del tester i verkligheten gjordes i Uppsala universitetsnätverk före inkluderingen. Faktum är att www.slu.se var det första produktionsbaserade NAPI-baserade operativsystemet och drivs än i dag av NAPI-baserade Bifrost/Linux-routrar. Pktgen - trafikgeneratorn föddes också runt denna tid. Pktgen användes i stor utsträckning för att testa NAPI-scenarier som inte inducerades av verklig trafik.
Vidare läsning
- Jamal Hadi Salim; Robert Olsson; Alexey Kuznetsov (2001-11-10). Beyond softnet (PDF) . Femte årliga Linux Showcase & Conference (ALS '01) . s. 165–172 . Hämtad 2011-03-06 . Det klassiska NAPI-papperet.
- Jonathan Corbet (2003-04-28). "Drivrutinsportering: Nätverksdrivrutiner" . LWN.net . Hämtad 2011-03-06 .
- Jonathan Corbet (2006-12-18). "Omarbetar NAPI" . LWN.net . Hämtad 2011-03-06 .
- Jonathan Corbet; Alessandro Rubini; Greg Kroah-Hartman (februari 2005). "Kapitel 17: Nätverksdrivrutiner" (PDF) . Linux-enhetsdrivrutiner (3:e upplagan). O'Reilly Media. ISBN 978-0-596-00590-0 . Hämtad 2011-03-06 .
externa länkar
- Tidigt NAPI-arbete [ död länk ]
- NAPI-beskrivning på Linux Foundation
- Nätverksöversikt , 19 november 2009, The Linux Foundation, av Rami Rosen (arkiverad från originalet den 30 oktober 2011)