で帯域幅を制限し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
2つのインスタンスは、イーサネット経由で直接接続されます。
次にhtb
qdisc
、1つのデフォルトクラスを使用して、帯域幅を1 Mbpsに制限するようにセットアップします。
# 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
レートを2倍にしても、測定された帯域幅は変わりません。私は何が欠けていますか?測定された帯域幅がrate
パラメータの1 メガビットに対応しないのはなぜですか?帯域幅を特定のレートに制限するには、どのパラメーターを設定する必要がありますか?
ただし、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 Kビット/秒の測定帯域幅が得られました。これらのパラメーターをいじってみても、値を追加mtu
すると物事が大幅に変わることに気付くまでそれほど変わりませんでした。
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k mtu 5000
測定された帯域幅は1.00 Mbits / secでした。
帯域幅を特定の正確なレートに制限するには、どのパラメーターを設定する必要がありますか?
私は使用すべき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
ボンディングのある仮想マシン(eth0で構成された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
での測定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
ボンディングのある仮想マシン(bond0で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
での測定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のフロントエンドであるを調べることをお勧めします。(これらはクイックポインターです...)