Bant genişliğini sınırlamaya tc
ve sonuçları kontrol etmeye çalışıyorum iperf
. Ben şöyle başladı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 35213 connected with 192.168.2.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 830 MBytes 696 Mbits/sec
İki örnek doğrudan Ethernet üzerinden bağlanır.
Daha sonra htb
qdisc
bant genişliğini 1mbit / sn ile sınırlamak için bir varsayılan sınıf ile ayarladım :
# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate 1mbit
Ama beklediğim şeyi elde edemiyorum:
# 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
Hızı iki katına çıkarsam, ölçülen bant genişliği değişmez. Neyi kaçırıyorum? Ölçülen bant genişliği neden rate
parametreden 1 mbit'e karşılık gelmiyor ? Bant genişliğini belirli bir hızla sınırlamak için hangi parametreleri ayarlamam gerekir?
Ancak man
sayfa bunun bu görev için tercih tbf
edilmesi gerektiğini söylüyor qdisc
:
Token Kovası Filtresi, trafiği hassas bir şekilde yapılandırılmış bir hıza yavaşlatmak için uygundur. Büyük bant genişliklerine göre iyi ölçeklendirilir.
tbf
parametreleri gerektirir rate
, burst
ve ( limit
| latency
). Bu yüzden kullanılabilir bant genişliğini nasıl burst
ve ( limit
| latency
) etkilediğini anlamadan aşağıdakileri denedim :
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k
Bu bana 113 Kbit / sn'lik bir bant genişliği verdi. Bu parametrelerle oynamak, bir mtu
şeyleri büyük ölçüde değiştirdiğini fark edene kadar çok fazla değişmedi :
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k mtu 5000
1,00 Mbits / sn'lik bir bant genişliği ile sonuçlandı.
Bant genişliğini belirli bir hızla sınırlamak için hangi parametreleri ayarlamam gerekir?
Bunun için htb
veya tbf
kuyruk disiplini kullanmalı mıyım ?
DÜZENLE :
Bu kaynaklara dayanarak bazı testler yaptım:
- https://help.ubuntu.com/community/UbuntuBonding
- https://help.ubuntu.com/community/LinkAggregation
- /usr/share/doc/ifenslave-2.6/README.Debian.gz http://lartc.org/
Aşağıdaki kurulumları denedim.
Fiziksel Makinede
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports eth0
İle ölçüm 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
Oysa iperf
sunucunun farklı bir bant genişliği hesaplanır:
[ 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
Yapışmasız Sanal Makinede
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
İle ölçüm 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
Oysa iperf
sunucunun farklı bir bant genişliği hesaplanır:
[ 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
Yapıştırma ile Sanal Makinede (tc eth0 üzerinde yapılandırılmıştır)
/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
İle ölçüm 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
Oysa iperf
sunucunun farklı bir bant genişliği hesaplanır:
[ 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
Yapıştırma ile Sanal Makinede (bond0 üzerinde yapılandırılmış tc)
/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
İle ölçüm 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
Oysa iperf
sunucunun farklı bir bant genişliği hesaplanır:
[ 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
Bağdan eth1
(pasif arayüz) çıkarırsam sonuç değişmez .
Sonuç
Bir bağ arabirimindeki Trafik Denetimi çalışmıyor veya en azından beklendiği gibi çalışmıyor. Daha fazla araştırmam gerekecek.
Çözüm olarak kuyruk disiplinleri doğrudan tahvile ait arayüzlere eklenebilir .
tc filter
paketleri sınıflara koymak için kullanmak zorunda düşünüyorum . Bazı htb parametrelerini de değiştirmeniz gerekebilir (tıpkı tbf gibi ayarlayın). Ben tcng
tc için bir ön uç olan, bakmak öneririz . (Bunlar hızlı işaretçiler ...)