Saya mencoba membatasi bandwidth dengan tc
dan periksa hasilnya dengan iperf
. Saya mulai seperti ini:
# 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
Kedua instance terhubung langsung melalui Ethernet.
Saya kemudian mengatur htb
qdisc
dengan satu kelas default untuk membatasi bandwidth hingga 1mbit/detik:
# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate 1mbit
Tapi saya tidak mendapatkan apa yang saya harapkan:
# 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
Jika saya menggandakan tarif, bandwidth yang diukur tidak berubah. Apa yang saya lewatkan? Mengapa bandwidth yang diukur tidak sesuai dengan 1mbit dari rate
parameter? Parameter apa yang perlu saya atur untuk membatasi bandwidth ke kecepatan tertentu?
Namun, man
halaman mengatakan bahwa tbf
seharusnya qdisc
pilihan untuk tugas ini:
Filter Bucket Token cocok untuk memperlambat lalu lintas ke tingkat yang dikonfigurasi dengan tepat. Skala yang baik untuk bandwidth yang besar.
tbf
membutuhkan parameter rate
, burst
dan (limit
| latency
). Jadi saya mencoba yang berikut ini tanpa memahami bagaimana burst
dan (limit
| latency
) mempengaruhi bandwidth yang tersedia:
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k
Ini memberi saya bandwidth terukur 113 Kbits/detik. Bermain-main dengan parameter tersebut tidak banyak berubah sampai saya menyadari bahwa menambahkan nilai untuk mtu
mengubah banyak hal secara drastis:
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k mtu 5000
menghasilkan bandwidth terukur 1,00 Mbits/dtk.
Parameter apa yang perlu saya atur untuk membatasi bandwidth ke tingkat tertentu yang tepat?
Haruskah saya menggunakan htb
atau tbf
disiplin antrian selama ini?
EDIT :
Berdasarkan sumber daya ini, saya telah melakukan beberapa pengujian:
- https://help.ubuntu.com/community/UbuntuBonding
- https://help.ubuntu.com/community/LinkAggregation
- /usr/share/doc/ifenslave-2.6/README.Debian.gz http://lartc.org/
Saya telah mencoba pengaturan berikut.
Pada Mesin Fisik
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports eth0
Pengukuran dengan 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
Sedangkan iperf
server menghitung bandwidth yang berbeda:
[ 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
Pada Mesin Virtual tanpa Ikatan
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
Pengukuran dengan 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
Sedangkan iperf
server menghitung bandwidth yang berbeda:
[ 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
Pada Mesin Virtual dengan Bonding (tc dikonfigurasi pada 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
Pengukuran dengan 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
Sedangkan iperf
server menghitung bandwidth yang berbeda:
[ 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
Pada Mesin Virtual dengan Bonding (tc dikonfigurasi pada 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
Pengukuran dengan 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
Sedangkan iperf
server menghitung bandwidth yang berbeda:
[ 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
Hasilnya tidak berubah jika saya menghapus eth1
(antarmuka pasif) dari bond.
Kesimpulan
Kontrol Lalu Lintas pada antarmuka obligasi tidak bekerja, atau setidaknya tidak seperti yang diharapkan. Saya harus menyelidiki lebih lanjut.
Sebagai solusinya, seseorang dapat menambahkan disiplin antrian langsung ke antarmuka milik bond.
Jawaban yang Diterima:
Ketika Anda tidak yakin tentang cara kerja tc, Anda masih dapat memantau tc dan melihat bagaimana paket mengalir? Anda dapat menggunakan skrip saya untuk memantau tc dan perlu menjalankannya di terminal dengan hak istimewa yang dicabut. Anda dapat mengubah wlan0 ke antarmuka lain dan Anda juga memerlukan grep dan 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