kramselund jereminsen

10Gbit FreeBSD med Intel X520/i82599 driver

Dette indlæg er en fortsættelse i serien omkring 10Gbit og Open Source operativsystemer.
Læs evt. først det forrige indlæg:
High performance 10Gbit på Open Source

og linket til præsentationen er http://files.kramse.org/tmp/network-camp-2012-print.pdf
- jeg er ikke så gode venner med Version2 CMS endnu :-)

Der hvor jeg sluttede sidst var Linux OK - Ubuntu med kerne 3.2.0 og BackTrack med kerne 3.2.6 og nyeste driver fra Intel ixgbe-3.9.17 gav 9.5G bits/sec.

FreeBSD kunne også levere tæt nok 10Gbit med UDP, men gav kun ca. 6 Gbits/sec med iperf og TCP. Jeg havde forsøgt at downloade nyeste driver fra Intel og opgradere til bleeding edge FreeBSD 10.0-CURRENT - som er under udvikling.

Driveren fra Intel kunne dog ikke kompileres direkte grundet diverse småproblemer - som at Intelprogrammøren havde lavet en "typedef boolean_t bool" som konfliktede med FreeBSD 9 headerfiler.

Heldigvis er hjælpen ikke altid langt væk, og Kasper Sacharias Eenberg fra Cabo.dk i Århus havde fået 10Gbit til at virke på nogle servere med FreeBSD. De bruger ZFS, FreeBSD og laver nogle spændende ting!

Jeg fik så i denne weekend på Network Warrior Weekend Camp tid til at efterprøve hans vejledning og resultater. Jeg har således opdateret/ændret systemerne til at bruge FreeBSD 9.1-PRERELEASE, hentet Kaspers ixgbe-2.4.4-stable og bygget ny kerne.

Driveren - med få rettelser til kompilering på FreeBSD 9 kan midlertidigt hentes på:
http://files.kramse.org/tmp/xpc-10g/ixgbe-2.4.4-stable.tgz

originalen er at finde på Intels hjemmeside. http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=14688&lan...

NB: på mine maskiner var jeg ligeledes nødt til at fjerne USB 3.0 driveren xhci - som åd MANGE interrrupts. Check evt. med vmstat -i om det er et problem på din platform. Ændringen er at bruge GENERIC hvor xhci er udkommenteret.

Resultatet

Resultat med FreeBSD 9.1-PRERELEASE og Intel driver 2.4.4 på Intel 82599 er:

hlk@xpc02:hlk$ sudo iperf -t 60 -i 5 -c 10.0.10.30
------------------------------------------------------------
Client connecting to 10.0.10.30, TCP port 5001
TCP window size: 1.00 MByte (default)
------------------------------------------------------------
[  3] local 10.0.10.20 port 33617 connected with 10.0.10.30 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 5.0 sec  5.02 GBytes  8.62 Gbits/sec
[  3]  5.0-10.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 10.0-15.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 15.0-20.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 20.0-25.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 25.0-30.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 30.0-35.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 35.0-40.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 40.0-45.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 45.0-50.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 50.0-55.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3] 55.0-60.0 sec  5.47 GBytes  9.40 Gbits/sec
[  3]  0.0-60.0 sec  65.2 GBytes  9.33 Gbits/sec

Det er vist hvad jeg kan forvente med et 10Gbit netkort. Læg mærke til at den nu med opdaterede sysctls vælger 1.00Mbyte som TCP window size.

Den resterende konfiguration er:

/etc/sysctl.conf for begge:
hw.intr_storm_threshold=20000
net.inet.tcp.sendspace=1048576
net.inet.tcp.recvspace=1048576
kern.ipc.maxsockbuf=4194304
kern.ipc.nmbjumbop=262144
 
/boot/loader.conf for begge:
net.link.ifqmaxlen=1024 
ixgbe_load="YES"
hw.ixgbe.rxd=4096
hw.ixgbe.txd=4096
kern.ipc.nmbclusters="262144"
kern.ipc.nmbjumbop="262144"
 
/etc/rc.conf:
ifconfig_ix0="inet 10.0.10.20 netmask 255.255.255.0 lro"
...

LRO er Large Receive Offloads - og denne setting er en af de vigtigste.

Nogle settings, specielt sysctl som giver mere hukommelse til netværkstacken vil være nødvendige jo flere klienter der skal tilgå systemet og jo større afstand der skal sendes data over. Jeg mener ovenstående er et godt udgangspunkt og fremtidig test vil vise om det er nok til en high performance web server.

Kommentarer (6)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#2 Bjørn Connolly

Er jfv's commit #238149 til head/current ikke nyere end den driver du linker til?

Kunne være spændende at se hvad netmap understøttelsen i current betyder for forwarding ydelsen. Med netmap optimerede versioner af ipfw og dummynet, burde du kunne emulere en 10Gbit WAN forbindelse til LUX uden de store problemer.

  • 0
  • 0
#3 Henrik Kramselund Jereminsen Blogger

Det lader bestemt til at den specifikke commit giver en nyere driver, men sjovt idet det download link jeg angiver siger Status:Latest.

Men den commit du angiver, http://www.mail-archive.com/svn-src-all@freebsd.org/msg55703.html viser

-char ixgbe_driver_version[] = "2.4.5";  
+char ixgbe_driver_version[] = "2.4.8";

Jeg vil nu nok lige til at starte med blive på 9-serien (dvs RELENG-9 som gav mig "FreeBSD 9.1-RELEASE"), da jeg forventer at skulle rode med andre ting og sjældent har lyst til at køre bleeding edge i produktion.

Næste step bliver at rykke lidt opad i applikationslaget med Varnish, Nginx og Apache shootout med Tsung som belastning og forsøge at nå ~100.000 samtidige connections.

Mht. OpenBSD er jeg knapt så fortrøstningsfuld, idet jeg sjældent har tid til at dykke ned og pille i drivere selv :-(

  • 0
  • 0
#4 Bjørn Connolly

Jeg vil nu nok lige til at starte med blive på 9-serien (dvs RELENG-9 som gav mig "FreeBSD 9.1-RELEASE"), da jeg forventer at skulle rode med andre ting og sjældent har lyst til at køre bleeding edge i produktion.

Fair nok, men 9.1 er mig bekendt "kun" i RC1, så hvis det er fordi det er til produktion vil jeg da mene at du skulle holde dig til 9.0.

Jeg undrede mig bare over at du prøvede at bruge en ældre driver på CURRENT:

Jeg havde forsøgt at downloade nyeste driver fra Intel og opgradere til bleeding edge FreeBSD 10.0-CURRENT - som er under udvikling.

Men jeg syntes bestemt ikke at du skal afskrive CURRENT til dine tests. Prøv at kigge på NetMap.

  • 0
  • 0
#5 Henrik Kramselund Jereminsen Blogger

Men jeg syntes bestemt ikke at du skal afskrive CURRENT til dine tests. Prøv at kigge på NetMap.

Enig, der er mange spændende ting med CURRENT.

Jeg kan godt se det kan misforstås,

jeg havde først forsøgt at bruge den "latest" driver som Intel havde liggende 2.4.4, DEREFTER prøvede jeg at opgradere til CURRENT - som ikke umiddelbart gav mig den ønskede performance :-( Dernæst nedgraderede jeg til 9 og brugte den driver med de opdateringer som Kasper havde lavet - og lidt ændrede tuning.

Jeg tror jeg vil prøve at gentage min egen konklusion, lad være med at antage det kører 10Gbit - uden at teste det :-) - specielt var det skræmmende at xhci USB3.0 driveren kunne æde så mange interrupts at det påvirkede systemet, mener vi så omkring 50.000 / sekund!

  • 0
  • 0
#6 Bjørn Connolly

Enig, der er mange spændende ting med CURRENT.

Jeg skal nok lade være med at tærske langhalm på det, jeg er ved at have forstået det :-)

NetMap hjælper bare CPU'en med at opnå en del af de ting du ønsker...

jeg havde først forsøgt at bruge den "latest" driver som Intel havde liggende 2.4.4, DEREFTER prøvede jeg at opgradere til CURRENT - som ikke umiddelbart gav mig den ønskede performance :-( Dernæst nedgraderede jeg til 9 og brugte den driver med de opdateringer som Kasper havde lavet - og lidt ændrede tuning.

Det er stadig ikke helt klart for mig, hvor du startede og hvor du endte, i dine opgraderinger/nedgraderinger. Jeg går ud fra at du nu er på 9.1-RELENG baseret på det du skriver. Commit #238149 er blevet MFC'et til 9-STABLE og videre derfra til 9.1-RELENG, så er du sikker på at du har brug for Kasper's patchede driver?

Har du opgraderet BIOS'en til nyeste version?

  • 0
  • 0
Log ind eller Opret konto for at kommentere