Traffic Rate Management - Policing and Shaping
Obě metody, policing a shaping, dělají to samé, ale jiným způsobem. Jejich účel je omezit šířku pásma pro určitý provoz, tedy nastavit maximální datový tok, který provoz nemůže překročit. Nijak ale negarantují minimální pásmo pro provoz.
- Class-Based Policing - provoz omezuje tak, že pakety, které by překročili pásmo, zahodí, případně je může přeznačkovat. Můžeme omezovat pásmo na vstupu nebo výstupu z interfacu.
- Class-Based Shaping - oproti policingu, shaping primárně nezahazuje pakety, ale zařazuje je do fronty, vychází se z toho, že tok je nárazový, takže shaping jej rozloží do delšího času. Může tvarovat provoz na výstupu z interfacu.
Pozn.: Jak bylo řečeno dříve, popisuji novější metody Class-Based. Dříve se používala metoda Committed Access Rate (CAR) pro policing, kde se konfiguroval přímo port. A Generic Traffic Shaping (GTS) pro shaping.
Stručně jsou výsledky obou metod zobrazeny na následujících grafech. Na prvním grafu je normální datový tok a červená linka zobrazuje maximální pásmo, na které chceme provoz omezit. Policing ořeže špičky, které překračují omezení. Kdežto shaping lépe využije dostupné pásmo jeho rozložením v čase.
Class-Based Policing
Používá se algoritmus zvaný Token Bucket (kbelík kupónů). Algoritmus říká to, že za daný čas mohu přenést pouze daný objem bytů.
Pozn.: U starších switchů se používal algoritmus Leaky Bucket (děravý kbelík).
Token Bucket algoritmus
Algoritmus Token Bucket se popisuje pomocí následujícího přirovnání. Máme kbelík (bucket), do kterého se přidávají kupóny (tokens) zadanou rychlostí (burst rate nebo average traffic rate nebo CIR). Kbelík má určitou velikost (burst size Bc), když je plný, tak se přicházející kupóny zahazují. Když přijde paket, tak se odeberou kupóny z kbelíku (1 kupón pro 1 byte paketu) a provede se conform-action (většinou se odešlou data). Pokud v kbelíku není dostatek kupónů, tak se na paket aplikuje exceed-action (většinou zahození).
Z popisu plyne, že tento algoritmus umožní přenést shluky dat o maximální velikosti Bc, ale záleží na předchozí komunikaci. Stejně tak je ovlivněna následující komunikace na průměrnou rychlost CIR. Jinak řečeno, můžeme přenášet data průměrnou rychlostí CIR a nárazově přenést Bc bytů navíc. Následující obrázek shématicky zobrazuje funkci algoritmu.
Token Bucket algoritmus se používá ve dvou verzích:
- single token bucket - popsaný výše, má jednu hranici a dvě akce
- dual token bucket - přidává druhou hranici (vyšší) a novou akci violate-action (při překročení nové hranice). Používá se to k tomu, že můžeme určitý provoz odesílat, při větší zátěži ještě provoz odeslat, ale se sníženou prioritou a další provoz zahodit.
Dual Token Bucket algoritmus
Dual Token Bucket algoritmus jsem viděl na Ciscu popisovaný dvěma způsoby. Základem vždy je, že máme dva kbelíky a pokud při příchodu paketu není dostatek kupónů v prvním, tak se podíváme do druhého. Pokud je v druhém kbelíku dostatek kupónů, tak se kupóny odeberou a provede se exceed-action. Pokud nejsou kupóny ani zde, tak se provede violate-action.
Rozdíl je v tom, jak se přidávají kupóny do druhého kbelíku. První možnost je, když je první kbelík plný a má se přidat kupón, tak se nezahodí, ale přidá (přepadne) do druhého kbelíku. Při druhé možnosti se kupóny přidávají i do druhého kbelíku zadanou rychlostí (excess burst rate). Tehdy se při konfiguraci nastavuje CIR (Commited Access Rate) a PIR (Peak Access Rate). Tuto metodu jsem viděl označenou také jako Two Rate Policing.
Pozn.: V různé dokumentaci se různě označuje rychlost, kterou se přidávají kupóny do kbelíku. Někde se uvádí average-rate někde CIR. V jednom dokumentu, kde byli na jednom místě pospány všechny tři (výše zmíněné) varianty, se termín CIR používal až u té poslední.
U policeru můžeme nastavovat akce
- conform action - vyvolá se pro pakety, které spadají do průměrné rychlosti (CIR) a normální velikosti shluku (Bc)
- exceed action - vyvolá se pro pakety, které spadají do průměrné rychlosti a nadměrné velikost shluku (Bc + Be) nebo do nadměrné rychlosti (PIR) a nadměrné velikosti shluku
- violate action - pakety, které překročí nadměrnou rychlost/velikost shluku
Akce můžeme nastavit na
Pozn.: zde jsou uvedeny pouze hlavní možnosti, existují i další.
- transmit - normálně forwardujeme paket, standardně se nastavuje pro conform action
- drop - zahození paketu, který překračuje naše pásmo, standardně pro violate nebo exceed action
- set-dscp-transmit - přeznačkujeme DSCP a odešleme, většinou nastavíme nižší prioritu
Hodnoty, které se objevují u Token Bucket algoritmu
- CIR - Committed Information Rate - průměrná přenosová rychlost [bps]
- Bc - Committed Burst Size - počet bytů, o které je možno jednorázově překročit průměrnou přenosovou rychlost [B] (velikost kbelíku)
- PIR - Peak Information Rate - špičková přenosová rychlost [bps]
- Be - Excess Burst Size - velikost druhého kbelíku [B]
- Tc - Time Interval - časový interval [s]
- maximální rychlost datového toku = CIR + Bc/Tc
Policing na switchi
U switchů můžeme pro fyzické porty vytvářet dva typy policerů:
- Individual (individuální) - QoS aplikuje omezení šířky pásma v policeru samostatně pro každou třídu, konfigurujeme samostatně v každé třídě policy-mapy
- Aggregate (agregované) - omezení šířky pásma se aplikuje kumulativně na všechny odpovídající datové toky, vytvoříme agregovaný policer a ten aplikujeme uvnitř několika policy-map
Class-Based Shaping
Shaping využívá pro měření také algoritmus Token Bucket (jiní výrobci používají obdobný algoritmus Leaky Bucket). Ale k němu se přidává využití fronty (Class Based Weighted Fair Queuing - CBWFQ). Funguje to tak, že do fronty se zařazují příchozí pakety. Ty se z této fronty odebírají, pokud jsou k dispozici kupóny v kbelíku. Pokud kupóny nejsou, tak se neděje nic a pakety čekají ve frontě. Samozřejmě fronta má nějakou maximální velikost, takže při jejím zaplnění se pakety začnou zahazovat.
Shaping máme ve dvou metodách buď average nebo peak. Pro average je rychlost přenosu rovna CIR a krátkodobě se může zvýšit o přenos Bc dat. U peak metody se může zvýšit o Bc+Be.
Konfigurace v Cisco IOSu
Class-Based Policing
Tak jak existuje celá řada algoritmů nebo jejich modifikací, tak se značně liší tvar příkazu pro konfiguraci policingu. Důležité je porozumět principu Token Bucket algoritmu, pak již není problém policing nakonfigurovat. Nějaký základní příklad je níže.
ROUTER(config)#policy-map test-policy ROUTER(config-pmap)#class test-class SWITCH(config-pmap-c)#police rate-bps burst-byte [exceed-action {drop | policed-dscp-transmit}] ROUTER(config-pmap-c)#police bps [burst-normal][burst-max] conform-action action exceed-action action [violate-action action]
Vyzkoušel jsem konfiguraci na třech různých Cisco zařízeních a následně uvádím příklady možností konfigurace, které tyto zařízení nabízí.
Pozn.: Řada parametrů bývá nepovinných. Jako hlavní jsou většinou průměrná rychlost (CIR) a velikost kbelíku (burst size).
Catalyst 3750
Na switchi je třeba QoS nejprve zapnout.
SWITCH(config)#mls qos
Na nižší řadě switchů se nachází pouze Single Token Bucket algoritmus.
SWITCH(config-pmap-c)#police 128k 8000 exceed-action drop // 128k = bps (average-rate), 8000 = normal-burst [B]
Switche podporují (na rozdíl od routerů) využití aggregate policeru.
SWITCH(config)#mls qos aggregate-policer test-policer 1000000 16000 exceed-action drop
SWITCH(config-pmap-c)#police aggregate test-policer // nastavení aggregate policeru do class mapy uvnitř policy mapy
Catalyst 6509
Modulární switch řady 6500 již obsahuje Dual Token Bucket algoritmus (který může fungovat i jako Single Token Bucket).
SWITCH(config-pmap-c)#police cir 256000 bc 8000 pir 8000 be 8000 conform-action transmit exceed-action set-dscp-transmit af11 violate-action drop
Router 871
I ten nejmenší router, jako je 871, má celou řadu možností zápisu konfigurace. Tímto způsobem můžeme nakonfigurovat všechny varianty Token Bucket algoritmu.
ROUTER(config-pmap-c)#police 16000 8000 be 4000 conform-action transmit exceed-action set-dscp-transmit af11 violate-action drop ROUTER(config-pmap-c)#police cir 256000 bc 8000 pir 8000 be 8000 conform-action transmit exceed-action set-dscp-transmit af11 violate-action drop ROUTER(config-pmap-c)#police rate 8000 bps burst 2000 bytes peak-rate 2000 bps peak-burst 2000 bytes conform-action transmit exceed-action set-dscp-transmit af11 violate-action drop
Class-Based Shaping
Konfigurace shapingu je výrazně jednodušší a na různých zařízeních stejná. Můžeme se pokusit shaping ladit zadáním více parametrů (Bc a Be), ale není to doporučeno a tyto hodnoty se nastaví na optimální dle Cisca.
Řada switchů vůbec nemá možnost shapingu (jako Catalyst 3750), vyšší řady a routery mají konfiguraci shodnou. Zadávaná hodnota je v obou případech bit-rate, tedy CIR.
SWITCH(config-pmap-c)#shape average 16000 ROUTER(config-pmap-c)#shape peak 16000
Komentáře
Sem by sa mi hodil malinky obrazok, kde su naznacene jednotlive rychlost (CIR, Bc, Be...). Mozno iba stlpec kde je ukazane, toto je average rychlost (2Mb/s) kratkodobo sa moze prekrocit o... Trochu sa v tom totiz stracam
odpověď na [1]morgun: Doporučuju se podívat 6. díl seriálu, kde se tomu věnuji prakticky (a je tam i tabulka). Musím říct, že praktický výsledek úplně neodpovídá tomu, co jsem čekal po teoretickém principu. Jinak chápu, že je to docela matoucí (jak zmiňuji i v článku) používá se několik metod a různá terminologie.