Saya mencoba membatasi bandwidth dengan tc
dan 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
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 laju, bandwidth yang diukur tidak berubah. Apa yang saya lewatkan? Mengapa bandwidth yang diukur tidak sesuai dengan 1mbit dari rate
parameter? Parameter apa yang harus saya atur untuk membatasi bandwidth ke tingkat yang tepat?
Namun, man
halaman tersebut mengatakan bahwa itu tbf
harus menjadi qdisc
pilihan untuk tugas ini:
Filter Token Bucket cocok untuk memperlambat lalu lintas ke tingkat yang dikonfigurasi dengan tepat. Timbangan baik untuk bandwidth besar.
tbf
membutuhkan parameter rate
, burst
dan ( limit
| latency
). Jadi saya mencoba yang berikut tanpa memahami bagaimana burst
dan ( 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 mtu
perubahan 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 htb
atau tbf
untuk 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 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
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 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 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 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 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 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 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 filter
untuk meletakkan paket ke dalam kelas. Anda mungkin juga perlu mengubah beberapa parameter htb (selaras seperti tbf). Saya sarankan melihat ke dalamtcng
, yang merupakan front-end ke tc. (Ini adalah petunjuk cepat ...)Jawaban:
Ketika Anda tidak yakin tentang cara kerja tc, Anda masih bisa memantau tc dan melihat bagaimana paket mengalir? Anda dapat menggunakan skrip saya untuk memonitor tc dan perlu menjalankannya di terminal dengan hak istimewa yang terangkat. Anda dapat mengubah wlan0 ke antarmuka lain dan Anda juga perlu grep dan awk:
sumber
Coba tambah nilai
burst
/limit
. The token bucket algoritma skala baik, tetapi memiliki rasio akurasi / kecepatan terbatas.Akurasi dicapai dengan menggunakan ember kecil, mempercepat dengan meningkatkan ukuran token. Token besar berarti laju pengisian ulang menurun (token per detik = byte per detik / byte per token).
The
rate
parameter memberikan rata-rata tingkat yang tidak akan terlampaui,burst
ataulimit
parameter memberikan ukuran jendela averaging. Karena pengiriman paket dengan kecepatan garis melebihi tingkat yang ditetapkan untuk waktu di mana paket ditransfer, jendela rata-rata harus setidaknya cukup besar sehingga pengiriman paket tunggal tidak mendorong seluruh jendela melebihi batas; jika lebih banyak paket yang cocok di jendela, algoritme akan memiliki peluang yang lebih baik untuk mencapai target dengan tepat.sumber
jalankan ini sebelum menambahkan disiplin antrian pada antarmuka ikatan (bond0 dalam kasus ini)
itu tidak berfungsi karena perangkat lunak perangkat virtual seperti antarmuka ikatan tidak memiliki antrian default.
sumber
Karena
bond
perangkat tidak memiliki antrian yang ditentukan, pengaturanqdisc
ukuran secara eksplisit memperbaiki masalah bagi saya.Berikut adalah contoh untuk daun yang
qdisc
digunakan di bawahHTB
struktur:tc qdisc add dev $dev parent $parent handle $handle pfifo limit 1000
sumber