FreeBSD 14.2 tcp throughput

Dan Lukes dan at obluda.cz
Mon Apr 21 15:22:22 CEST 2025


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



More information about the Users-l mailing list