En stor anledning till att jag överhuvudtaget deltar i forumdiskussioner är att man ibland lär sig något nytt eller får någon frågeställning man själv inte tänkt på. I detta fall kring nätverskretsar!
Har tittat igenom driverkoden i Linux för en del populära NICs och satt ihop tabellen nedan.
Kort om de punkter jag tittade på
zero-copy: vissa kretsar har en väldigt oflexibel DMA hantering så det i praktiken krävs en kopiering av data från DMA-buffer till OS:ets paketbuffer-format. De flesta moderna kretsar är flexibla nog att direkt kunna köra DMA direkt in i paketbuffern (kallar dessa zero-copy)
csum: Internet checksumma för ut/inkommande TCP/UDP beräknas av NIC, avlastar CPU
tcp-offload: Om NIC kan ta ett stort TCP-segment och hacka upp det i bitar som är stora nog att få plats på Ethernet länken, avlastar CPU
IRQ-coalesce: Om NIC har logik som kan upptäcka fall med hård nätverkslast och i dessa lägen samla ihop flera paket innan RX-interrupt genereras, viss overhead kan i detta läget spridas ut över flera paket -> mindre overhead per paket räknat
RSS: Receive Side Scaling, NIC har flera TX/RX-ringar som minskar synkroniseringskostnad mellan CPU-kärnor för TX och där NIC kan sprida ut olika strömmar över olika CPU-kärnor.
HW-lock: I stället för att använda traditionella mutex/spinlocks som kostar en del när flera CPU-kärnor använder samma NIC (framförallt på Ryzen när två kärnor från olika CCX är involverad) löser man synkronisering av RX/TX-ringar via dedikerad HW som inte påverkar CPU-cache.
| zero-copy | csum | tcp-offload | IRQ-coalesce | RSS | HW-lock |
---|
Intel e1000 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
---|
Intel 21x | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
---|
Atheros E2x00 (killer-nic) | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
---|
Realtek 8169 | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ |
---|
Dlink 2k/TC902x | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ |
---|
Broadcom BNX2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
---|
För att svara på frågan om E2500: ser inte i drivern att den kretsen kan något som andra E2x00 kretsar saknar. Gissar att det är som Intels e1000 resp. i21x där det finns en rad versioner av kretsen, men skillnaden är främst buggfixar, lägre strömförbrukning och liknande.
Givet ovan skulle jag ändå säga att Killer NIC måste vara det näst bästa valet efter Intel. Svårt att se att man skulle vilja vara utan RSS på en plattform med många kärnor då alla inkommande paket kommer hamna på samma CPU-tråd utan den finessen.
Tvivlar inte på att Dlink och Realtek kan ha stabila drivare som fungerar bra i majoriteten av fallen. Skulle dock undvika dessa kretsar på system med många CPU-kärnor där man förväntar sig mycket nätverkstrafik då de helt saknar RSS.
e1000 och killer NIC ligger på samma nivå feature-mässigt, båda har RSS vilket känns som "must-have" för ett 8-kärnors system. Här verkar det ändå som Intels drivare är mer effektiva.
i21x är snäppet ovan alla andra och för ett system som totalt kostar >10k skulle i alla fall jag lägga på de ~400 kr som ett PCIe x1 (räcker med råge för 1 Gbit/s) kort med denna krets kostar.
Edit: lade till Broadcom BNX2, skulle säga att det är andrahandsvalet efter i21x. Drivers verkar bättre än killer-nic men samma features.