David Pasek wrote on 13.04.2025 18:49:
Zjistil jsem, ze FreeBSD vmx interface defaultne nepouziva LRO (Large
Receive Offload)
Matne si pamatuju, ze je to proto, ze nektere karty (mozna tez v
zavislosti na firmware) nemaji vsechny HW akcelerace implementovane
spravne, a pri nekterych kombinacich to pak priste nesituje.
V situaci, kdy mi nekdo cizi tisic kilometru daleko strka na jakysi
stroj defaultni instalaci abych z na dalku, udelal telefonni ustrednu,
potrebuju aby to v defaultu bylo predevsim spolehlive a ja se na to po
jeho instalaci dostal. Hlavne abych tam nemusel letet. Na konkretni druh
zateze si to uz vyladim.
po enablovani LRO na vmx interfacu jsem byl schopen dosahnut
7,29 Gb/s, coz je vyrazne lepsi nez 1,34 Gb/s, ale porad mene nez 9,5
Gb/s na Debianu.
To je ta neprijemnost "defaultni instalace". FreeBSD GENERIC ma v sobe,
pokud vim, zakompilovane ipfw. Jak Debian nevim. Nevim jak vyjde
porovnani moznosti firewallu na obou systemech - ale neni asi treba
slozite vysvetlovat, ze implementace firewallu a HW akcelerace jsou dve
veci, ktere se ovlivnuji - firewall muze resit jen to, co se k nemu
dostane. Nebo, z opacneho uhlu pohledu, firewall musi zabranit nekterym
akceleracim aby se k nemu dostalo co potrebuje.
To je ohromny prostor na implementacni rozdily mezi systemy. Ale zejmena
- je to ohromny prostor pro to jak je system nastaveny v "defaultnim stavu".
Coz je nakonec videt uz na tom (ne)aktivnim LRO v jednom a druhem systemu.
Univerzalni pneumatiky jsou taky kompromisem, ktery funguje jak v zxime
tak v lete, ale ani v jednom obdobi nefunguje tak dobre, jako pneumatiky
vypadene pro to konkrenti obdobi. A i mezi temi univerzaly najdes
takove, ktere maji lepsi vlastnosti pri nizsich teplovath a jine, tkere
je maji lepsi pri teplotach vyssich.
Z meho pohledu, vysledek prezentovaneho testu rika, ze pri vyberu
"defaultniho nastaveni" se v Debianu vic soustredili na velky sitovy
tok, kdezto ve FreeBSD hraly prim jina kriteria.
Ale co s tim systemem lze dokazat, kdyz je pro dany styl pouzivani
nastaveny spravne to az tak moc nerika.
na consumer PC-ckach dosahuju vyssich sitovych propustnosti nez na
serverech, ale to plati jak pro FreeBSD, tak pro Debian
To muze nastacovat, ze dostupne open-source ovladace neumi plne vyuzit
specialnich vlastnosti serverovych sitovych karet.
Chtel jsem se zeptat co si o tom myslite, jestli nekdo provozujete
FreeBSD pro velke sitove toky a jestli mate na sitovych interfacech
nastavene LRO a jestli pouzivate Jumbo Frames (MTU 9000).
Od konce - ne, ano (pokud v dane konfiguraci funguje), ne az tak uplne.
Large MTU obvykle nepouzivame, protoze MTU musi mit vsechny stroje v
dane L2 siti nastavene stejne. Jinymi slovy, MTU nemuze byt vetsi nez co
dovoli nejmene tolerantni komponenta. Dokonce i pro switch eplati, ze
neni samozrejme, ze umi 9000. Nektere konci u 8192, nektere dokonce u
4000. Ale u nas je v te siti nakonec prakticky vzdycky neco
"standardniho" co vic nez 1500 neda a tim je omezena MTU cele site.
Ale dovedu si predstavit L2 sit ve ktere je pouze datove pole a
databazovy server a jinak nic - a mezi nimi by Large MTU rozhodne smysl
mela. Jenze tohle nikde nemam.
A co se "velkejch sitovejch toku" tyce, je rozdil jestli se bavime o
FreeBSD na pozici routeru, tedy primarne L3 zarizeni, ktere funguje na
urovni IP paketu a vys nekouka a nebo jde o sitovy server, kde se ty
"velike toky" musi vyresit i z hlediska vyssich vrstev.
Kdyz se omezime na tu prvni variantu, zadny genericky OS nedokaze byt
tak rychly jako specializovany HW router, ve kterem casove/vykonove
nejkritictejsi cast cinnosti sverena hradlovemu poli. Takze FreeBSD,
Debian a v podstate cokoliv generickeho je dobra low-cost varianta, ale
nikde se mi nepotkava situace, ze by nekdo mel prachy na rychlou L1/2
infrastrukturu, ale nemohl by si dovolit i odpovidajici router.
A pokud jde o aplikacni servery s vysokym tokem - zatim jsem vzdycky
driv narazil na limity diskoveho subsystemu driv, nez me dohnaly limity
site, takze v tehle oblasti vlastni zkusenosti moc nemam.
Pro zajimavost odkazu na dva dokumenty, ktere ukazuji, ze FreeBSD umelo,
a to uz v pred radou let, zvladnout daleko vetsi toky nez o kterych tu
je rec:
https://www.chelsio.com/wp-content/uploads/resources/T5-NIC-40Gb-FreeBSD.pdf
A to se standartni MTU.
Cimz nechci vyvolat flameewar o tom jestli je lepsi FreeBSD nez Debian,
jako spis ukazat na urcity rozdil ve filosofii. Problemy lze resit dvema
zpusoby - koupim si nejakej generickej nabusenej HW (pripadne dokonce
ani to ne a strci se to do nejakeho virtualizatoru), nainstaluju na nej
nejakej generickej system v defaultnim nastaveni - a verim, ze na tom
udelam cokoliv co potrebuju.
Tak v tomhle FreeBSD uplne nekraluje. Jeho "defaultni" hodnoty casto
budu horsi, nez defaultni hodnoty jinych systemu.
Druha moznost je, ze zacinam nejakym zadanim. Takze tusim co potrebuju.
Tomu prizpusobim vyber HW i SW konfiguraci systemu. A pri tomhle
pristupu se s FreeBSD dokazu dostat na vysledky, ktere jine genericke OS
ani pres veskere ladeni parametru nedostanou.
A proto se lze potkat s lidmi, kteri tvrdi, ze FreeBSD je v oblasti
sitovani spicka, stejne jako s lidmi, kterym testy ukazuji neco jineho.
A obe skupiny, jak ta, ktera si pro zadani zvoli a prizpusobi nastroj,
tak ta, ktera se omezuje na vyber z nabizenych nastroju a ty uz
neprizpusobuje, maji ve svem svete pravdu.
Dalsi dotaz je, jestli nekoho nenapada neco dalsiho co by se dalo na
FreeBSD vytunit, aby se zvysila sitova propustnost. Jeste me napada
enablovat RSS, ale to neni enabovane ani na Debianu ani na FreeBSD.
Receive Side Scaling zajistuje, ze prichozi pakety se v sitove karte
radi do nekolika front z nichz kazdou muze nezavisle (v limitu celkove
kapacity sbernice) zpracovavat jiny procesor (v porovnani s beznym
non-RSS provozem, kdy data z karty vycita procesor jeden).
Cilem RSS je dosahnout toho, aby TCP resp. UDP data z karty vycitat
stejny procesor, ktery je nasledne bude na aplikacni urovni zpracovavat
(cimz se mohou efektivne zapojit per-CPU cache). Uz z toho plyne, ze u
cisteho routeru nebude mit RSS zasadni efekt.
Zda ti RSS pomuze a jak moc zavisi zejmena na tom, jestli mas sitovou
kartu, ktera ho podporuje a podporu RSS ma i jeji systemovy ovladac. Ve
FreeBSD do tusim je v teto chvili pouze igb, ixgbe a snad jeste cxgbe
Brzdou je mj. chybejici podrobna dokumentace. Neni az takovy problem RSS
"zapnout". Neni ale jasne co presne to pak dela. Napriklad v pripade
fagmentovanych paketu. Kdyz je a kdyz neni soucasne zapnute LRO. A co
teprve, kdyz vedle IPv4 prichazi i IPv6.
V neposledni rade celkovy vysledek zalezi i na tom, jak moc je RSS-ready
aplikace, ktera toky zpracovava. I ona by mela bezet v tolika
paralernich vlaknech na kolika CPU se datove toky ctou ze sitove karty,
jinak cele kouzlo RSS nemusi prinest zadny viditelny efekt.
Dan