Malá učebnice OpenFlow (11) – omezujeme propustnost

Část 11 z celkových 15 v seriálu Malá učebnice OpenFlow

Dostupné implementace

Dnes narazíme na jedem z mála případů, kdy softwarová implementace nedosahuje možností hardware, což je poměrně vzácné. Aktuální implemntace OpenvSwitch (a tedy i Mininet apod.) neimplementuje Metering, tedy způsob, jakým OpenFlow řeší některé věci kolem QoS včetně omezení propustnosti. OVS sice takový příkaz může přijmout, ale nic s ním nedělá (jeho dataplane to neumí). Pro dnešní ukázku tedy potřebujete hardwarovou implementaci – já jsem použil HP 2920 a HP 5500 EI.

Omezujeme propustnost

Stáhněte si můj jednoduchý Python skript ratelimitnode. Podobně, jako v předchozích částech, mu zadáte IP adresu stanice, kterou chcete omezit. Skript využije služeb kontroleru, aby zjistil, kde se stanice nachází. Následně vytvoří nový „měřák“ ve výchozí hodnotě 256 kbps (ale jako argument můžete skriptu předat jinou hodnotu). Následně vytvoří flow pravidlo, které zachytává danou stanici a pošle ho na správný prvek s tím, že jako instrukci použije Meter (samotný forwarding necháme na OUTPUT NORMAL, takže se nemusíme trápit s ničím jiným, prvek rozhodne sám – my jen určujeme rate limit). V rámci „měřáku“ jsme řekli, že provoz do 256 kbps je v pořádku, nad tuto rychlost chceme pakety zahazovat. Tím jsme vytvořili jednoduché QoS pravidlo – rate limit, možnosti jsem ovšem podstatně větší (o tom příště).

Nejprve vyzkoušejme rychlost mezi stanicemi bez jakýchkoli zásahů.

Server listening on TCP port 5001 DSCP 0
TCP window size: 0.01 MByte
------------------------------------------------------------
[148] local 16.21.186.32 port 5001 connected with 16.21.166.137 port 59393
[ ID] Interval       Transfer     Bandwidth
[148]  0.0- 2.0 sec  4.77 MBytes  20.0 Mbits/sec
[148]  2.0- 4.0 sec  4.73 MBytes  19.8 Mbits/sec
[148]  4.0- 6.0 sec  4.35 MBytes  18.3 Mbits/sec
[148]  6.0- 8.0 sec  4.75 MBytes  19.9 Mbits/sec
[148]  8.0-10.0 sec  4.73 MBytes  19.8 Mbits/sec
[148]  0.0-10.1 sec  23.5 MBytes  19.6 Mbits/sec

Dosahujeme kolem 20 Mbps. Následně spustíme náš skript.

hp@ubuntu:~$ python ratelimitnode.py --ip 16.21.166.137 --vlan 111
Meter created !
Success !

Co to způsobilo v 2920? Ukažme si její Meters.

Switch1-2920(openflow)# show openflow instance OF meters

OpenFlow Instance Meters

Meter ID             : 1
Flow Count           : 1
Input Packet Count   : 194
Duration             : 278

                       Packet
Band Type Rate         Count
--------- ------------ --------------------
Drop      256 kbps     142692

A také pravidlo

Switch1-2920(openflow)# show openflow instance OF flows source-ip 16.21.166.137

OpenFlow Flow Table

Flow 1
Match
  Incoming Port : 1/21                  Ethernet Type    : IP
  Source MAC    : Any                   Destination MAC  : Any
  Destination MAC Mask      : 000000-000000
  VLAN ID       : Any                   VLAN priority    : Any
  Source IP Address         : 16.21.166.137/32
  Destination IP Address    : Any
  IP Protocol   : Any
  IP ECN        : Any                   IP DSCP          : Any
  Source Port   : Any                   Destination Port : Any
Attributes
  Priority      : 50000                 Duration         : 27 seconds
  Hard Timeout  : 60 seconds            Idle Timeout     : 0 seconds
  Byte Count    : NA                    Packet Count     : 169
  Flow Table ID : 100                   Controller ID    : 1
  Cookie        : 0x0
  Hardware Index: 0
Instructions
   Meter ID                      : 1
   Apply Actions
    Normal

Switch1-2920(openflow)#

A jak dopadl test?

[176] local 16.21.186.32 port 5001 connected with 16.21.166.137 port 59394
[176]  0.0- 2.0 sec  0.03 MBytes  0.12 Mbits/sec
[176]  2.0- 4.0 sec  0.03 MBytes  0.12 Mbits/sec
[176]  4.0- 6.0 sec  0.03 MBytes  0.13 Mbits/sec
[176]  6.0- 8.0 sec  0.03 MBytes  0.12 Mbits/sec
[176]  8.0-10.0 sec  0.02 MBytes  0.10 Mbits/sec

Vidíte, že provoz je méně jak oněch 256 Kbps. To je dáno způsobem, jakým 2920 rate limit implementuje. V případě UDP testu bzste viděli přesně 256 Kbps, ale pro TCP provoz je 2920 příliš hrubá (vytváří pilovou charakteristiku, protože nepoužívá zásobního kbelíku – takže TCP přenos nedosáhne definované hranice, ovšem samozřejmě pokud jde o limitace v řádu desítek megabitů, tak je rozdíl zanedbatelný).

Podívejme se, jak totéž vypadá na HP 5500 EI. Prohlédnéme si nejprve Meter.

dis openflow instance 1 meter
Meter flags: KBPS  -- Rate value in kb/s, PKTPS -- Rate value in packet/sec
             BURST -- Do burst size,      STATS -- Collect statistics

Instance 1 meter table information:
Meter entry count: 1

Meter entry 1 information:
Meter flags:KBPS|BURST|STATS
Band 1 information:
Type: drop, rate: 256kbps, burst size: 128kb
Byte count: --, packet count: 209
Referenced information:
  Count: 1
  Flow table: 0
  Flow entry: 9


A takhle vypadá samotné pravidlo.

dis openflow instance 1 flow-table
Instance 1 flow table information:

Table 0 information:
Table Type: Extensibility, flow entry count: 6, total flow entry count: 6

MissRule Flow entry information:
cookie: 0xffff000000000000, priority: 0, hard time: 0, idle time: 0, flags:
flow_send_rem, byte count: --, packet count: 60231
Match information: any
Instruction information:
Write actions:
  Output interface: Normal
...
Flow entry 8 information:
cookie: 0x0, priority: 50000, hard time: 60, idle time: 0, flags: none,
byte count: --, packet count: 562
Match information:
Input interface: GE1/0/21
Ethernet type: 0x0800
IPv4 source address: 16.21.166.137, mask: 255.255.255.255
Instruction information:
Set meter: 1
Write actions:
  Output interface: Normal

A takto výpis z iperf.

[272] local 16.21.186.32 port 5001 connected with 16.21.166.137 port 59397
[272]  0.0- 2.0 sec  0.07 MBytes  0.30 Mbits/sec
[272]  2.0- 4.0 sec  0.05 MBytes  0.22 Mbits/sec
[272]  4.0- 6.0 sec  0.06 MBytes  0.27 Mbits/sec
[272]  6.0- 8.0 sec  0.05 MBytes  0.22 Mbits/sec
[272]  8.0-10.0 sec  0.06 MBytes  0.27 Mbits/sec
[272] 10.0-12.0 sec  0.06 MBytes  0.23 Mbits/sec
[272] 12.0-14.0 sec  0.06 MBytes  0.24 Mbits/sec
[272] 14.0-16.0 sec  0.05 MBytes  0.22 Mbits/sec
[272]  0.0-16.7 sec  0.50 MBytes  0.25 Mbits/sec

Jak je vidět 5500 EI používá jemnější mechanismus omezování propustnosti, takže výsledek odpovídá našim hodnotám.

Dnes jsme si jen hráli, příště si povíme, co všechno měřáky umí a co se s tím dá dělat.

Series Navigation<< Malá učebnice OpenFlow (10) – flow pravidlaMalá učebnice OpenFlow (12) – metering a rate limit >>
Similar posts
  • L3 a kontejnery bez overlay: Project ... Část 6 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 5 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • HPE Networking na GitHub – skri... Zaměstnanci HPE publikovali zajímavé skripty a celé knihovny jako open source v licenci Apache2, tedy k volnému použití včetně jakýchkoli modifikací. https://github.com/HPENetworking/scriptsonly Obsah se bude jistě dost rozšiřovat… přidejte si záložku [...]
  • L3 a kontejnery bez overlay: Project ... Část 4 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 3 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]

No Comments Yet

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *