ฉันพยายามที่จะ จำกัด การแบนด์วิดธ์และตรวจสอบผลกับtc
iperf
ฉันเริ่มต้นเช่นนี้:
# 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
สองอินสแตนซ์เชื่อมต่อโดยตรงผ่านอีเธอร์เน็ต
ฉันตั้งค่า a htb
qdisc
คลาสเริ่มต้นหนึ่งตัวเพื่อ จำกัด แบนด์วิดท์ไว้ที่ 1mbit / วินาที:
# 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.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
ถ้าฉันเพิ่มอัตราเป็นสองเท่าแบนด์วิดท์ที่วัดได้จะไม่เปลี่ยนแปลง ฉันกำลังคิดถึงอะไร ทำไมแบนด์วิดท์ที่วัดได้ไม่ตรงกับ 1mbit จากrate
พารามิเตอร์ ฉันต้องตั้งค่าพารามิเตอร์ใดเพื่อ จำกัด แบนด์วิดท์ให้เป็นอัตราที่กำหนดแน่นอน
อย่างไรก็ตามman
หน้าระบุว่าtbf
ควรเป็นqdisc
ตัวเลือกสำหรับงานนี้:
ถังกรองโทเค็นเหมาะสำหรับการลดทราฟฟิกลงสู่อัตราที่กำหนดไว้อย่างแม่นยำ ปรับขนาดได้ดีกับแบนด์วิดท์ขนาดใหญ่
tbf
ต้องใช้พารามิเตอร์rate
, burst
และ ( limit
| latency
) ดังนั้นฉันจึงลองทำสิ่งต่อไปนี้โดยไม่เข้าใจว่าburst
( limit
| latency
) มีผลกับแบนด์วิดท์ที่มีอยู่อย่างไร:
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k
นี่ทำให้ฉันวัดแบนด์วิดธ์ได้ที่ 113 Kbits / วินาที การเล่นกับพารามิเตอร์เหล่านั้นไม่ได้เปลี่ยนแปลงมากนักจนกระทั่งฉันสังเกตเห็นว่าการเพิ่มค่าสำหรับmtu
การเปลี่ยนแปลงต่าง ๆ เป็นไปอย่างรุนแรง:
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k mtu 5000
ส่งผลให้วัดแบนด์วิดท์ที่ 1.00 Mbits / วินาที
ฉันจะต้องตั้งค่าพารามิเตอร์ใดเพื่อ จำกัด แบนด์วิดท์ให้เป็นอัตราที่กำหนดแน่นอน
ฉันควรใช้htb
หรือtbf
จัดคิวระเบียบนี้หรือไม่?
แก้ไข :
จากแหล่งข้อมูลเหล่านี้ฉันได้ทำการทดสอบบางอย่าง:
- https://help.ubuntu.com/community/UbuntuBonding
- https://help.ubuntu.com/community/LinkAggregation
- /usr/share/doc/ifenslave-2.6/README.Debian.gz http://lartc.org/
ฉันลองตั้งค่าต่อไปนี้แล้ว
บนเครื่องทางกายภาพ
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports eth0
การวัดด้วย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
ในขณะที่iperf
เซิร์ฟเวอร์คำนวณแบนด์วิดท์ที่แตกต่างกัน:
[ 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
บนเครื่องเสมือนโดยไม่ต้องเชื่อม
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
การวัดด้วย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
ในขณะที่iperf
เซิร์ฟเวอร์คำนวณแบนด์วิดท์ที่แตกต่างกัน:
[ 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
บนเครื่องเสมือนที่มีการเชื่อม (tc ที่กำหนดค่าบน 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
การวัดด้วย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
ในขณะที่iperf
เซิร์ฟเวอร์คำนวณแบนด์วิดท์ที่แตกต่างกัน:
[ 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
บนเครื่องเสมือนที่มีการเชื่อม (tc กำหนดค่าบน 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
การวัดด้วย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
ในขณะที่iperf
เซิร์ฟเวอร์คำนวณแบนด์วิดท์ที่แตกต่างกัน:
[ 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
ผลลัพธ์จะไม่เปลี่ยนแปลงหากฉันลบeth1
(อินเตอร์เฟสแบบพาสซีฟ) จากพันธะ
ข้อสรุป
การควบคุมปริมาณการใช้งานบนส่วนต่อประสานไม่ทำงานหรืออย่างน้อยก็ไม่เป็นไปตามที่คาดไว้ ฉันจะต้องตรวจสอบเพิ่มเติม
ในฐานะที่เป็นวิธีแก้ปัญหาอย่างใดอย่างหนึ่งสามารถเพิ่มวินัยการจัดคิวโดยตรงกับอินเตอร์เฟซที่เป็นของพันธบัตร
tc filter
เพื่อใส่แพ็กเก็ตลงในคลาส คุณอาจต้องเปลี่ยนพารามิเตอร์ htb บางตัว (ปรับแต่งเหมือน tbf) ฉันแนะนำให้ดูtcng
ซึ่งเป็นส่วนหน้าของ tc (นี่คือตัวชี้อย่างรวดเร็ว ... )