nasazený to nikde nemám protože nám to generuje script ale snad brzo se zákazníci systems4isp dočkají optimalizace včetně mě takže pak to mohu předvést.
O co jde? jde o to správně použít jumpy v mangle. Vem si, že máš třeba 1000 uživatelů. Což dává 2000 pravidel. Nevim jestli se bere v úvahu in/out iface a rozděluje se to pak do dvou stromů samo ale kdyby ne, tak je to průměrně kontrola paketu v 1000 pravidlech. Každá síť má ale nějaký bloky IP adres. Většina sítí jede na neveřejkách a pokud aspoň trochu dává smysl tak je rozdělená do určitných subnetů a nejčastěji na /24.
My třeba máme co bod to jeden neveřejnej /24. Takže jednoduchý počty. Máš 50 bodů po 20 lidech (jeden /24 subnet na bod). (20x50=1000 userů). Takže to nám dává šupu 2000 (1000down/1000up) pravidel. No jo ale co kdybych udělal na začátku mangle 50 pravidel s jumpama do nových chainů kam budu směrovat /24 subnety? a do těch nových chainů bych zařazoval jednotlivý usery pověšených v tom subnetu. Ano, defakto přibude nějakých 100 pravidel s jumpy k těm 2000 pravidle ale jakej to má výsledek? Bez jumpů máš jeden velkej seznam s obsahem 2000 řádků. Ovšem s jumpy procházím max 50 prvních jumpů, jump mě pošle do jinýho seznamu kde je podle příkladu max 20 userů tedy jump mě hodi do jinýho seznamu s 20 řádky. Kratší seznamy se prohledávaji rychleji a hlavně když pravidlo nevyhovuje, projde mas 70 řádků a ne 2000 řádků. Takže průměr nebude 1000 ale nějakých 35.
Jistě se sluší říct, že je vhodný aby síť byla nějak logicky číslovaná nebo se dala nějak rozdělit subnety na větší bloky. Není nutné mít /24 ale klidně menší, větší je to fuk. Samozřejmě, že pokud máš v jednotlivých subnetech málo klientů tak to zase tolik nepřinese ale u zákazníků v řádech stovek a víc to přinese hodně moc úspor na CPU.
Příklad kterej jsem testoval. Měly jsme na pár hodin místo našeho xeonu na bráně RB1100AHx2. Nahodit tam 1300 QTček, 1300 mangle a 700 natů trvalo snad 2 minuty (pomalost nandů v RBčku). Hrůza. No ale větší hrůza přišla potom. Při cca 25-30Mbit šlo cpu do kolen. Tak sem začal zkoušet nějaký věci. QT nejsou zátěž, nat neni zátěž, filtr neni zátěž, mangle to položilo. Pokud se vypnuly mangle, RBčko běhalo na 1-2 procenta vytížení. Takže jsem začal ručně přepisovat mangle do jumpů a už po chvíly se objevily úspěchy. Neříkám že jsem to udělal kompletně ale jisté snížení CPU a ne zrovna malí tam bylo. Troufám si říct že takovej duální atom při důsledném optimalizování by snesl i 75-100Mbit konektivity rozshapovat.