GNU/Linux >> Znalost Linux >  >> Linux

Rozumíte Tc Qdisc a Iperf?

Snažím se omezit šířku pásma pomocí tc a zkontrolujte výsledky pomocí iperf . Začal jsem takto:

# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.7 port 35213 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   830 MBytes   696 Mbits/sec

Tyto dvě instance jsou přímo propojeny přes Ethernet.

Potom jsem nastavil htb qdisc s jednou výchozí třídou pro omezení šířky pásma na 1 mbit/s:

# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate 1mbit

Ale nechápu, co očekávám:

# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.7 port 35217 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-12.8 sec   768 KBytes   491 Kbits/sec

Pokud zdvojnásobím rychlost, naměřená šířka pásma se nezmění. co mi chybí? Proč naměřená šířka pásma neodpovídá 1 mbit od rate parametr? Jaké parametry musím nastavit, abych omezil šířku pásma na přesně danou rychlost?

Nicméně man stránka říká, že tbf by měl být qdisc pro tento úkol:

Token Bucket Filter je vhodný pro zpomalení provozu na přesně nakonfigurovanou rychlost. Dobře se škáluje na velké šířky pásma.

tbf vyžaduje parametry rate , burst a (limit | latency ). Zkusil jsem tedy následující, aniž bych pochopil, jak burst a (limit | latency ) ovlivnit dostupnou šířku pásma:

# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k

Tím jsem získal naměřenou šířku pásma 113 Kbit/s. Pohrávání si s těmito parametry se tolik nezměnilo, dokud jsem si nevšiml, že přidání hodnoty pro mtu mění věci drasticky:

# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k mtu 5000

výsledkem byla naměřená šířka pásma 1,00 Mbit/s.

Jaké parametry bych musel nastavit, abych omezil šířku pásma na přesně danou rychlost?

Mám použít htb nebo tbf kázeň ve frontě kvůli tomu?

UPRAVIT :

Na základě těchto zdrojů jsem provedl několik testů:

  • https://help.ubuntu.com/community/UbuntuBonding
  • https://help.ubuntu.com/community/LinkAggregation
  • /usr/share/doc/ifenslave-2.6/README.Debian.gz http://lartc.org/

Vyzkoušel jsem následující nastavení.

Na fyzickém počítači

/etc/network/interfaces :

auto lo
iface lo inet loopback

auto br0
iface br0 inet dhcp
bridge_ports eth0

Měření pomocí iperf :

# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.4 port 51804 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-11.9 sec  1.62 MBytes  1.14 Mbits/sec

Zatímco iperf server vypočítal jinou šířku pásma:

[  4] local 192.168.2.1 port 5001 connected with 192.168.2.4 port 51804
[  4]  0.0-13.7 sec  1.62 MBytes   993 Kbits/sec

Na virtuálním počítači bez vazby

/etc/network/interfaces :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Měření pomocí iperf :

# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.7 port 34347 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-11.3 sec  1.62 MBytes  1.21 Mbits/sec

Zatímco iperf server vypočítal jinou šířku pásma:

[  4] local 192.168.2.1 port 5001 connected with 192.168.2.7 port 34347
[  4]  0.0-14.0 sec  1.62 MBytes   972 Kbits/sec

Na virtuálním počítači s propojením (tc nakonfigurováno na eth0)

/etc/network/interfaces :

auto lo
iface lo inet loopback

auto eth0
allow-bond0 eth0
iface eth0 inet manual
    bond-master bond0
    bond-primary eth0 eth1

auto eth1
allow-bond0 eth1
iface eth1 inet manual
    bond-master bond0
    bond-primary eth0 eth1

auto bond0
iface bond0 inet dhcp
    bond-slaves none
    bond-mode 1
#    bond-arp-interval 250
#    bond-arp-ip-target 192.168.2.1
#    bond-arp-validate 3

Měření pomocí iperf :

# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.9 port 49054 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-11.9 sec  1.62 MBytes  1.14 Mbits/sec

Zatímco iperf server vypočítal jinou šířku pásma:

[  4] local 192.168.2.1 port 5001 connected with 192.168.2.9 port 49054
[  4]  0.0-14.0 sec  1.62 MBytes   972 Kbits/sec

Na virtuálním počítači s Bonding (tc nakonfigurován na bond0)

/etc/network/interfaces :

auto lo
iface lo inet loopback

auto eth0
allow-bond0 eth0
iface eth0 inet manual
    bond-master bond0
    bond-primary eth0 eth1

auto eth1
allow-bond0 eth1
iface eth1 inet manual
    bond-master bond0
    bond-primary eth0 eth1

auto bond0
iface bond0 inet dhcp
    bond-slaves none
    bond-mode 1
#    bond-arp-interval 250
#    bond-arp-ip-target 192.168.2.1
#    bond-arp-validate 3

Měření pomocí iperf :

# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.9 port 49055 connected with 192.168.2.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-13.3 sec   768 KBytes   475 Kbits/sec

Zatímco iperf server vypočítal jinou šířku pásma:

[  4] local 192.168.2.1 port 5001 connected with 192.168.2.9 port 49055
[  4]  0.0-14.1 sec   768 KBytes   446 Kbits/sec

Výsledek se nezmění, pokud odstraním eth1 (pasivní rozhraní) z vazby.

Související:Možnost kontextové nabídky Nautilus pro vytvoření nového souboru?

Závěr

Řízení dopravy na vazebním rozhraní nefunguje, nebo alespoň ne podle očekávání. Budu to muset dále prozkoumat.

Jako řešení lze přidat disciplíny řazení do fronty přímo na rozhraní patřící k vazbě.

Přijatá odpověď:

Když si nejste jisti, jak tc funguje, můžete stále sledovat tc a podívat se, jak pakety proudí? Můj skript můžete použít k monitorování tc a potřebujete jej spustit v terminálu se zrušeným oprávněním. Wlan0 můžete změnit na jiné rozhraní a také potřebujete grep a awk:

      #!/bin/sh
      INTERVAL=15
      while sleep $INTERVAL
      do
             /usr/sbin/tc -s -d class show dev wlan0

             uptime
             more /proc/meminfo | grep MemFree | grep -v grep
             echo cache-name num-active-objs total-objs obj-size
             SKBUFF=`more /proc/slabinfo | grep skbuff | grep -v grep | awk 
             '{print $2} {print $3} {print $4}'`

             echo skbuff_head_cache: $SKBUFF
      done

Linux
  1. Pochopení příkazů vypnutí, vypnutí, zastavení a restartu v Linuxu

  2. Porozumění loutkovým zdrojům, manifestům, modulům a třídám s příklady

  3. Linux – Rozumíte unixovým oprávněním a typům souborů?

  1. Rozumíte komunikaci mezi Pam a démonem vědomým si Pam?

  2. CentOS / RHEL 7:Pochopení Kexec a Kdump

  3. Porozumění označování souborů SELinux a kontextu SELinux

  1. Jak nainstalovat a používat příkaz fping na Linuxu

  2. Pochopení Persistence zařízení a Oracle ASMLib

  3. Pochopení /dev a jeho podadresářů a souborů