Saya mencoba membatasi bandwidth dengan tcdan memeriksa hasilnya 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 dengan melalui Ethernet.
Saya kemudian mengatur htb qdiscdengan 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 laju, bandwidth yang diukur tidak berubah. Apa yang saya lewatkan? Mengapa bandwidth yang diukur tidak sesuai dengan 1mbit dari rateparameter? Parameter apa yang harus saya atur untuk membatasi bandwidth ke tingkat yang tepat?
Namun, manhalaman tersebut mengatakan bahwa itu tbfharus menjadi qdiscpilihan untuk tugas ini:
Filter Token Bucket cocok untuk memperlambat lalu lintas ke tingkat yang dikonfigurasi dengan tepat. Timbangan baik untuk bandwidth besar.
tbfmembutuhkan parameter rate, burstdan ( limit| latency). Jadi saya mencoba yang berikut tanpa memahami bagaimana burstdan ( limit| latency) memengaruhi bandwidth yang tersedia:
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k
Ini memberi saya bandwidth terukur dari 113 Kbits / detik. Bermain-main dengan parameter itu tidak banyak berubah sampai saya perhatikan bahwa menambahkan nilai untuk mtuperubahan terjadi secara drastis:
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k mtu 5000
menghasilkan bandwidth yang diukur sebesar 1,00 Mbits / detik.
Parameter apa yang harus saya tetapkan untuk membatasi bandwidth ke tingkat yang tepat?
Haruskah saya menggunakan disiplin antrian htbatau tbfuntuk ini?
EDIT :
Berdasarkan sumber daya ini, saya telah melakukan beberapa tes:
- 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 iperfserver 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
Di 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 iperfserver 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 Ikatan (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 iperfserver 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 Ikatan (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 iperfserver 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 ikatan.
Kesimpulan
Kontrol Lalu Lintas pada antarmuka obligasi tidak berfungsi, atau setidaknya tidak seperti yang diharapkan. Saya harus menyelidiki lebih lanjut.
Sebagai solusinya, orang dapat menambahkan disiplin antrian langsung ke antarmuka milik ikatan.
tc filteruntuk meletakkan paket ke dalam kelas. Anda mungkin juga perlu mengubah beberapa parameter htb (selaras seperti tbf). Saya sarankan melihat ke dalam tcng, yang merupakan front-end ke tc. (Ini adalah petunjuk cepat ...)