hehe, a vy poslední dva jste se právě střetnuly na otázkách proč to nejde rozložit na více jader. Jeden se ptá proč použít SGP-i2 a druhej proč se to mezi jádra nerozkládá? Odpověď je jednoduchá.
Může za to x86 hardware. Projděme si trochu historie x86. Tato platforma primárně v dřevních dobách je dělaná na IRQ vytvářený obsluhou tedy člověkem. Z tohoto pohledu je IRQček který přicházejí do CPU minimum. A tak to je i u domácích PC a to i u těch co se staví pro hraní her. IRQ do GPU jdou směrem od CPU a opačně jenom minimum. No jo ale co když x86 použiju jako router? Hmm, dříve více méně na každej příchozí paket se vyvolalo jedno IRQ přerušení. Hmm takže na 10.000 paketů tu máme 10.000 externích přerušení k CPU za sekundu. Kurva to je ale nářez. Člověk by si řek že cpu s několika miliony operací za sekundu to hravě zvládne jenomže IRQ je IRQ a to se musí vykonat obvykle okamžitě takže CPU si musí udělat čas na zpracování IRQ a to už je víc operací jako třeba pozastavení operací co právě děla, uložení je do ramky a zpracovat IRQ až potom a po zpracování zase načíst z ramky nedokončenou práci a pokračovat. To už je kopec času který tomu muselo vyhradit. Takže x86 architektura musela vymyslet featury jako třeba MSI/MSI-X atd.. aby odlehčila IRQ zátěži protože na tu v tý době vychcípalo.
Takže po tom co přišly různý shlukování paketů pod jedno IRQ a podobný věci přišlo víc jader na cpu. K čemu to ale je když IRQ je mapovaný na konkrétní jádro takže to jedno jádro dostává furt stejný kapky? Je to více méně k ničemu protože jádro který přijme IRQ a následně paket taky zpracovává ten paket jako firewall queue atd.. Neopustí mantinely jádra. Jak zpracovat pakety na více jádrech? od toho je RPS. Ano, RPS co je v mikrotiku podporovaný (system resources RPS). Co to dělá? Jedno jádro přijímá pakety ze sítový karty a přeposílá je ostatním na zpracování. Ano jde o softwarovou berličku takže to něco přidá na výkonu než bez RPS.
Dostáváme se k tomu proč Supermicro SGP-i2. Tato eth karta díky svému chipu umí spoustu featur a pro naše routovací požadavky nám stačí jenom jedna. Ona totiž umí obsadit až 8 IRQ (v závislosti na počtu jader v CPU)... jinak řečeno umí pakety posílat na střídačku podle toho jak přichází až mezi 8 IRQ přerušení. A to dělá ona sama hardwarově!! Takže RPS je v tomhle případě featura co škodí protože to nahrazuje sama síťová karta. Navíc se paket dostane přímo na konkrétní jádro a navíc v mikrotiku si můžeme namapovat IRQčka na konkrétní jádra. Takže pokud to nastavím třeba takhle:
tak obsazuju všechny jádra více méně rovnoměrně a hlavně hardwarově. A tim dochází k obrovskýmu škálování výkonu. Tohle mikrotik karta neumí. Má jedno IRQ. Stejně tak jako většina ostatních eth karet. Máme ověřeno že 2x4jádrovej xeon starý generace (X5570) s touto kartou dokáže nejenom ukočírovat přes 800.000 paketů za sekundu skrz sebe ale hlavně s těmi pakety dokáže ještě něco dělat jako třeba filtrovat, natovat, shapovat... a to už je obrovská síla. Eth karta umístěná na desce v tom samém stroji tohle nedokázala (na obrázku jsou to poslední dvě IRQ). Proto byl router dovybaven touto supermicro kartou.
Takže pokud mám stavět něco co má tahnout 100Mbit a shapovat (filtr ani nat a podobný věci nesežerou tolik výkonu jako shaping) a vydržet minimálně 3x tak větší průtok (nezapomeňte že s rostoucí rychlostí bude nesporně růst i počet pravidel takže zátěž na cpu bude vyvíjena ze dvou směrů) tak to bude něco s minimálně 4 jádry a frekvencí cpu nad 2GHz a bezpodmínečně vybavenou supermicro kartou nebo nějakou jinou s chipem 82575, 82576, i350 a pár broadcomů to umí taky ale nevim konkrétně jaký.
Docela dost lidí mi volá že chce použít ty nový 4core atomy a já říkám že není problém ale musíš tam dát kartu s více IRQ jinak zapláčeš při +100Mbit a hodně shapingem. Nikdy bych nedoporučoval použití atomů ale ty nový atomy jsou prostě jiný kafe a na tohle se více než hodí. Samozřejmě v porovnání s E3 xeonem je to čajíček a pokud to ISPík myslí vážně tak si pořídí minimálně Xeon E3 kterej prostě se spotřebou kolem 50W nebude dělat idiota a dá k tomu 1000VA UPSku na hodinu a hotovo. A hlavně vydrží nesporně větší brutality než atom kterej si stejně nekoupíte od supermicra takže bude i v desktopový variantě na prkně který nebylo stavěný na nonstop provoz a zbastlený do nějaký skříně...
No a nesmíme zapomenout na software že? k čemu nám je že to hardware rozloží když queue už se tak hezky mezi jádry nerozloží že? Je to stejná úchylárna jako koupit si mobilní telefon co má 4 jádra taktovaný na 1.2GHz.... ty voe proč neudělaji 2 jádrovej cpu taktovanej na 2GHz? ono by to totiž mělo pro uživatele větší užitnej výkon protože některý věci se prostě rozložit mezi jádra nedají a museji se zpracovat v single operaci seriově na jednom jádře a hotovo.
Queue zpracování běží v single threadu takže když přijde do týhle queue třeba 500.000 paketů za sekundu tak to vyžere jedno jádro... ale ouha, CCR má ubohých 1200MHz na jádro a ještě je samo o sobě jádro velmi slaboulinký na výkonu takže ho zabije v queue asi tak 75.000 paketů za sekundu... hoooo takže jedno jádro na max a je průser, že. Plánovač úloh neni tak chytrej aby všemu předcházel a začínaji se dít nehezké věci jak sem tam lidi popisují. Takže ano, CCR je hezký ale na seriozní práci s ním nemá dost výkonu ale pro většinu věcí na co ho lidi používají je dostatečný i když je kurva drahý a radsi si koupim xeona protože nechci důležitou věc dávat na v číně poslepovanou desku s naflusanými součástkami. Vždyť ty kokoti tam nedaji ani pořádnej kvalitní zdroj a chtěji za to 20 tisíc!!!