QoS
帯域制御にトライ。
環境
上図のように、GNS3上で2つのVM(xubuntuとLubuntu)をルーターR1を介して通信させ、ルーターR1のf0/1インターフェース外側のトラフィックをQoSによりコントロールする。両側のVMで、iperf(xubuntuからLubuntuへの通信)を同時に複数実行させることにより、帯域制御の効果を検証する。
準備
QoS制御未実施時の帯域
まずは、QoS制御がないときのEnd-to-Endの帯域をおおよそ把握する。
$ iperf -u -c 192.168.2.11 -b 10m
[ ID] Interval Transfer Bandwidth
....
[ 3] 0.0-10.0 sec 11.9 MBytes 10.0 Mbits/sec 1.908 ms 0/ 8504 (0%)
上記の「10m」(送信時の指定帯域:10Mbit/s)を変化させたときの実行速度とパケットドロップ率は下記のとおり。
UDP | 10M | 14M | 15M | 16M | 20M |
---|---|---|---|---|---|
実行速度(Mbps) | 10.0 | 14.0 | 15.0 | 14.8 | 15.1 |
drop(%) | 0 | 0 | 0 | 5.4 | 24 |
本環境のEnd-to-Endの帯域は、約15Mbpsと判断。なお、TCPでも実施したが、ほぼ同じような結果が得られている。
ルーターR1の設定
共通
関連するところのみ記載。
ip dhcp excluded-address 192.168.1.1 192.168.1.10
ip dhcp excluded-address 192.168.2.1 192.168.2.10
!
ip dhcp pool P1
network 192.168.1.0 255.255.255.0
default-router 192.168.1.1
!
ip dhcp pool P2
network 192.168.2.0 255.255.255.0
default-router 192.168.2.1
interface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
access-list 101 permit udp any any eq 2000
access-list 102 permit tcp any any eq 3000
- xubuntuおよびLubuntuがDHCPによりIPアドレスを取得
- インターフェースf0/0へのIPアドレスアサイン
- QoS対象とするUDP通信のポート番号指定(2000)
- QoS対象とするTCP通信のポート番号指定(3000)
ケース1:CBWFQ(Class Based Weighted Fair Queue) - %指定
CBWFQはよく使われるものらしい。ポリシーマップ内にQoS対象(アクセスリストで指定)を記述し、適用するインターフェースを指定するもの。次のサイトを参考にした。
ケース1では、帯域を%で指定。
class-map match-all cm-udp
match access-group 101
class-map match-all cm-tcp
match access-group 102
!
policy-map pm-list
class cm-udp
bandwidth percent 50
class cm-tcp
bandwidth percent 30
policy-map pm-cbwfq
class class-default
shape average 10000000
service-policy pm-list
!
interface FastEthernet0/1
ip address 192.168.2.1 255.255.255.0
service-policy output pm-cbwfq
- アクセスリスト101(UDPポート2000)の帯域50%
- アクセスリスト102(TDPポート3000)の帯域30%
- あえて、最大帯域(shape average)を10Mbit/s
- インターフェースf0/1へのIPアドレスアサイン
- インターフェースf0/1へポリシーマップpm-cbwfqの適用
ケース2:CBWFQ(Class Based Weighted Fair Queue) - 数値指定
ケース2では、帯域に具体的な数値を指定。
class-map match-all cm-udp
match access-group 101
class-map match-all cm-tcp
match access-group 102
!
policy-map pm-list2
class cm-udp
bandwidth 6000
class cm-tcp
bandwidth 5000
policy-map pm-cbwfq2
class class-default
shape average 15000000
service-policy pm-list2
!
interface FastEthernet0/1
ip address 192.168.2.1 255.255.255.0
service-policy output pm-cbwfq2
- アクセスリスト101(UDPポート2000)の帯域6Mbit/s
- アクセスリスト102(TDPポート3000)の帯域5Mbit/s
- 最大帯域(shape average)を15Mbit/s
- インターフェースf0/1へのIPアドレスアサイン
- インターフェースf0/1へポリシーマップpm-cbwfq2の適用
ケース3:CAR(Committed Access Rate)
CARは、物理インターフェースに直接的に制約を設けるようなものらしい。次のサイトを参考にした。
interface FastEthernet0/1
ip address 192.168.2.1 255.255.255.0
rate-limit output access-group 101 6000000 1125000 2250000 conform-action transmit exceed-action drop
rate-limit output access-group 102 5000000 937500 1875000 conform-action transmit exceed-action drop
- インターフェースf0/1へのIPアドレスアサイン
- アクセスリスト101(UDPポート2000)の帯域6Mbit/s
- アクセスリスト102(TCPポート3000)の帯域5Mbit/s
検証
iperfサーバー側(Lubuntu)で、下記コマンドを実行。
iperf -s -u -p 2000 >> ./2000.log &
iperf -s -p 3000 >> ./3000tcp.log &
iperf -s -u -p 1245 >> ./1245.log &
iperf -s -p 8821 >> ./8821tcp.log &
iperfクライアント側(xubuntu)で、下記コマンドを実行。
iperf -p 2000 -u -c 192.168.2.11 -b 10m >> ./2000m_udp.log &
iperf -p 3000 -c 192.168.2.11 -b 10m >> ./3000m_tcp.log &
iperf -p 1245 -u -c 192.168.2.11 -b 10m >> ./1245m_udp.log &
iperf -p 8821 -c 192.168.2.11 -b 10m >> ./8821m_tcp.log &
ケース1(CBWFQ:%指定、全体10Mpbs、UDPポート2000:50%、TCPポート3000:30%)
期待値的には下記となる。
UDPポート2000 | TCPポート3000 | UDPポート1245およびTCPポート8821 | |
---|---|---|---|
帯域(Mbps) | 5 | 3 | 2 |
10回実施した平均値は下記である。
UDPポート2000 | TCPポート3000 | UDPポート1245 | TCPポート8821 | |
---|---|---|---|---|
帯域(Mbps) | 5.025 | 3.083 | 2.011 | 0.2253 |
ほぼ期待どおりの結果となっている。また、UDPポート1245およびTCPポート8821の結果から、トラフィックが大きいときに、UDP dominantな状況が発生していることがわかる。
ケース2(CBWFQ:数値指定、全体15Mpbs、UDPポート2000:6Mbps、TCPポート3000:5Mbps)
期待値的には下記となる。
UDPポート2000 | TCPポート3000 | UDPポート1245およびTCPポート8821 | |
---|---|---|---|
帯域(Mbps) | 6 | 5 | 4 |
10回実施した平均値は下記である。
UDPポート2000 | TCPポート3000 | UDPポート1245 | TCPポート8821 | |
---|---|---|---|---|
帯域(Mbps) | 5.933 | 4.926 | 3.918 | 0.2394 |
こちらも、ほぼ期待どおりの結果。UDP dominantについても同様。
ケース3(CAR、全体15Mpbs、UDPポート2000:6Mbps、TCPポート3000:5Mbps)
UDPポート2000 | TCPポート3000 | UDPポート1245およびTCPポート8821 | |
---|---|---|---|
帯域(Mbps) | 6 | 5 | 4 |
10回実施した平均値は下記である。
UDPポート2000 | TCPポート3000 | UDPポート1245 | TCPポート8821 | |
---|---|---|---|---|
帯域(Mbps) | 5.76 | 0.7455 | 8.26 | 0.7149 |
CAR(rate-limit)では、TCPの帯域確保が適切に行われていない。理由は不明。(設定が不適切??)
おわりに
一部ではあるが、Qos設定が機能していることを理解。QoSは奥が深いようだ。Part2にトライしたい。