- 構成詳細確認
まずは、お約束チックな確認をする
xen domainの確認から
# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 200 1 r----- 2178.6 test2 2 32 1 -b---- 1637.8
次に仮想スイッチの確認
# brctl show bridge name bridge id STP enabled interfaces xenbr0 8000.feffffffffff no vif0.0 peth0 xenbr1 8000.feffffffffff no vif0.1 vif2.0
仮想スイッチからDom0向けのIFの確認
# ip link show vif0.1 6: vif0.1: <BROADCAST,NOARP,UP,10000> mtu 1500 qdisc noqueue link/ether fe:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff sv2:#
ついでに、帯域制御の対象となるDomUのip
# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:16:3E:28:FC:BA inet addr:192.168.3.2 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fe80::216:3eff:fe28:fcba/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:580955 errors:0 dropped:0 overruns:0 frame:0 TX packets:390100 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:733333329 (699.3 MiB) TX bytes:402026984 (383.4 MiB)
図として書くと今回のターゲットは下記の通り
こんかいは、クラスフルなqdiscのHTBを使う。帯域制限だけが目的なので、2層構造でいく
- 設定
サンプルとして、上記の図にも記載している通り
デフォルトでclass 3:ff0に流れる。ここでは、10Mbit/secで帯域制御。
あとは、filterを使ってソースIPにマッチしたのか、それぞれのclassに入っていく。1Mbit/secだ
tc qdisc add dev vif0.1 root handle 3: htb default ff0 tc class add dev vif0.1 parent 3: classid 3:ff0 htb rate 10Mbit ceil 10Mbit tc class add dev vif0.1 parent 3: classid 3:ff1 htb rate 1Mbit ceil 1Mbit tc class add dev vif0.1 parent 3: classid 3:ff2 htb rate 1Mbit ceil 1Mbit tc class add dev vif0.1 parent 3: classid 3:ff3 htb rate 1Mbit ceil 1Mbit tc filter add dev vif0.1 protocol ip parent 3: u32 match ip src 192.168.3.1 flowid 3:ff1 tc filter add dev vif0.1 protocol ip parent 3: u32 match ip src 192.168.3.2 flowid 3:ff2 tc filter add dev vif0.1 protocol ip parent 3: u32 match ip src 192.168.3.3 flowid 3:ff3
- 設定を確認
ip コマンドで確認。qdiscがhtbになっている
# ip link show vif0.1 6: vif0.1: mtu 1500 qdisc htb link/ether fe:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff
tc コマンドでqdiscを確認。それっぽくなっている。
# tc -s -d qdisc ls qdisc htb 3: dev vif0.1 r2q 10 default ff0 direct_packets_stat 0 ver 3.17 Sent 54 bytes 1 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0
tcコマンドでclassを確認。それっぽくなっている。
# tc class show dev vif0.1 class htb 3:ff0 root prio 0 rate 10000Kbit ceil 10000Kbit burst 6598b cburst 6598b class htb 3:ff1 root prio 0 rate 1000Kbit ceil 1000Kbit burst 2099b cburst 2099b class htb 3:ff2 root prio 0 rate 1000Kbit ceil 1000Kbit burst 2099b cburst 2099b class htb 3:ff3 root prio 0 rate 1000Kbit ceil 1000Kbit burst 2099b cburst 2099b
tc コマンドでfilterを確認。ずらずらと出てくる。ipが16進数で表現されているっぽい
# tc filter show dev vif0.1 filter parent 3: protocol ip pref 49151 u32 filter parent 3: protocol ip pref 49151 u32 fh 802: ht divisor 1 filter parent 3: protocol ip pref 49151 u32 fh 802::800 order 2048 key ht 802 bkt 0 flowid 3:ff3 match c0a80303/ffffffff at 12 filter parent 3: protocol ip pref 49151 u32 filter parent 3: protocol ip pref 49151 u32 fh 801: ht divisor 1 filter parent 3: protocol ip pref 49151 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 3:ff2 match c0a80302/ffffffff at 12 filter parent 3: protocol ip pref 49152 u32 filter parent 3: protocol ip pref 49152 u32 fh 800: ht divisor 1 filter parent 3: protocol ip pref 49152 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 3:ff1 match c0a80301/ffffffff at 12
- 疎通確認
今回は、DomUが1つしかないので、帯域制限されていることだけ確認。他のホストからFTPでダウンロードしてみる。
ちょっとオーバー気味な気がするが、まぁいいだろう。ftp< mget 1MB mget 1MB? y 200 PORT command successful 150 Opening BINARY mode data connection for 1MB (1000000 bytes) 226 Transfer complete. 1000000 bytes received in 7.46 secs (130.9 kB/s) ftp< mget 1MB mget 1MB? y 200 PORT command successful 150 Opening BINARY mode data connection for 1MB (1000000 bytes) 226 Transfer complete. 1000000 bytes received in 7.46 secs (130.9 kB/s) ftp< mget 1MB mget 1MB? y 200 PORT command successful 150 Opening BINARY mode data connection for 1MB (1000000 bytes) 226 Transfer complete. 1000000 bytes received in 7.46 secs (131.0 kB/s)
引自:
http://yorunoseikatsu.com/archives/2007/11/xen-network-qos-xenbr1-dom0.html