Atom Login Admin

Above the clouds

OVSDBのQoSをプログラマブルに設定

written on Sunday,April 13,2014

今回はOpenvSwitchのOVSDBという管理プロトコルのデータベースの操作をプログラマブルに行う手法を検討してみた。
OpenFlow コントローラフレームワークのRyuにはovs-vsctlというユーティリティライクにPythonからプログラマブルに操作するためのモジュール(vsctl.py)が用意されているのだが、QoSレコードの操作を行うには各種データベースコマンドを低レベルAPIを用いて設定することになり、少々面倒である。今回はQoSレコードを直感的に操作できるようにRyuのbridge.pyとvsctl.pyを変えてみた(粒度がovs-vsctlと少し変わってしまうのだが、提案してみるのもありかなと思った)

変更箇所は少し多いので、Patch形式で。

使い方は簡単で以下の通りとなる

ovsctl = bridge.OVSBridge(datapath.id, OVSDB_ADDR)
ovsctl.add_qos('s1-eth1', type='linux-htb',max_rate='100000000
', {'max-rate': '50000000', 'min-rate': '40000000'}, {'max-rate': '20000000', 'min-rate': '8000000'}])

tcの確認を行う。

$ sudo /sbin/tc qdisc show dev s1-eth1
qdisc htb 1: root refcnt 2 r2q 10 default 1 direct_packets_stat 0
$ sudo /sbin/tc class show dev s1-eth1
class htb 1:1 parent 1:fffe prio 0 rate 40000Kbit ceil 50000Kbit burst 1560b cburst 1950b 
class htb 1:fffe root rate 100000Kbit ceil 100000Kbit burst 1500b cburst 1500b 
class htb 1:2 parent 1:fffe prio 0 rate 8000Kbit ceil 20000Kbit burst 1563b cburst 3907b 

queuesに設定しているリストはそれぞれqueue idが0,1で紐付けされている。
queue idはフローエントリーで振分ける場合に使用する。

実際にMininetで試してみた。

mininet> h1 iperf -s &
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
mininet> h2 iperf -c h1 -i 1 -t 10
------------------------------------------------------------
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  3] local 10.0.0.2 port 60602 connected with 10.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  2.38 MBytes  19.9 Mbits/sec
[  3]  1.0- 2.0 sec  2.25 MBytes  18.9 Mbits/sec
[  3]  2.0- 3.0 sec  2.38 MBytes  19.9 Mbits/sec
[  3]  3.0- 4.0 sec  2.25 MBytes  18.9 Mbits/sec
[  3]  4.0- 5.0 sec  2.25 MBytes  18.9 Mbits/sec
[  3]  5.0- 6.0 sec  2.38 MBytes  19.9 Mbits/sec
[  3]  6.0- 7.0 sec  2.25 MBytes  18.9 Mbits/sec
[  3]  7.0- 8.0 sec  2.38 MBytes  19.9 Mbits/sec
[  3]  8.0- 9.0 sec  2.38 MBytes  19.9 Mbits/sec
[  3]  9.0-10.0 sec  2.50 MBytes  21.0 Mbits/sec
[  3]  0.0-10.1 sec  23.5 MBytes  19.5 Mbits/sec

フローエントリ

OFPST_FLOW reply (OF1.3) (xid=0x2):
 cookie=0x0, duration=189.757s, table=0, n_packets=10, n_bytes=668, priority=0 actions=CONTROLLER:65535
 cookie=0x0, duration=174.478s, table=0, n_packets=17098, n_bytes=25777244, priority=1,in_port=2,dl_dst=22:cf:94:1e:8f:7c actions=set_queue:1,output:1
 cookie=0x0, duration=174.516s, table=0, n_packets=8745, n_bytes=577286, priority=1,in_port=1,dl_dst=82:dc:88:71:d3:dd actions=set_queue:1,output:2

結果のとおりqueue_id:1には20Mbpsをmax-rateとして設定している為、期待どおりの動作となった。

今回はOVSDBをプログラマブルに扱う目的での考察であったが、今後もOF-CONFIGとOVSDBどちらも押さえていく必要があると考えている。やはり現状OpenvSwitchを利用するケースが圧倒的に多いと考えられる。したがって、OpenvSwitchの管理はOVSDBを使う必要があり、またプログラマブルに扱いたいという要求は必須である。したがって、クライアント側で柔軟に設定する為のAPIの充実も必要になるのではないかと考えている。

Comments

Add Comment

Login
This entry was tagged #Ryu #OpenFlow #OpenvSwitch