Axiomtek社製
NA-812A
にセットした Open vSwitch 1.4 の動作確認・転送能力試験をする。
iperf による試験では 940Mbps を安定して出しており、CPU 負荷も低く良好な結果が得られた。
以下に設定したスイッチの状態を示す。
# ovs-ofctl show br0 OFPT_FEATURES_REPLY (xid=0x1): ver:0x1, dpid:0000000000000012 n_tables:255, n_buffers:256 features: capabilities:0xc7, actions:0xfff 1(eth1): addr:00:60:e0:51:6c:04 config: 0 state: LINK_DOWN current: COPPER AUTO_NEG advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-FD COPPER AUTO_NEG supported: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-FD COPPER AUTO_NEG 2(eth2): addr:00:60:e0:51:6c:05 config: 0 state: 0 current: 100MB-FD COPPER AUTO_NEG advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-FD COPPER AUTO_NEG supported: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-FD COPPER AUTO_NEG ....(snip).... LOCAL(br0): addr:00:60:e0:51:6c:04 config: PORT_DOWN state: LINK_DOWN OFPT_GET_CONFIG_REPLY (xid=0x3): frags=normal miss_send_len=0 # # ovs-vsctl show 44469118-c2e7-4956-b985-7bcb0a23b20b Bridge "br0" Controller "tcp:192.168.12.20" is_connected: true Port "eth2" Interface "eth2" Port "br0" Interface "br0" type: internal Port "eth4" Interface "eth4" 順不同 ....(snip)..... Port "eth3" Interface "eth3" # # ovs-dpctl show system@br0: lookups: hit:2163192 missed:44759 lost:15 flows: 0 port 0: br0 (internal) port 1: eth1 このコマンドでは順どおりに出る port 2: eth2 port 3: eth3 port 4: eth4 port 5: eth5 [root@localhost ~]#
実際の稼働時には対象インタフェイスがすべて ifconfig up してあることに注意。
down であってもただ動作しないだけで何もエラーは出ない。
modprobe openvswitch_mod する必要がある点も注意。
自動ロードには /etc/modprobe.d/ 以下に bridge.conf でも作ればいいが、どのみち実験用で自動起動で困る場合もあるので手作業のままとする。
今回は ovs-controller による単純 L2 lerning bridge として機能させているだけなので、単に eth1 - eth5 ポートのいずれかに二台のマシンを接続して ping などすれば良い。 念のために初期状態では下記のようにフローテーブルの中身が空であることを確認する。
# ovs-ofctl dump-flows br0 NXST_FLOW reply (xid=0x4): #
ping テストの後は、例えば以下のようになっている。
# ovs-ofctl dump-flows br0 NXST_FLOW reply (xid=0x4): cookie=0x0, duration=3.146s, table=0, n_packets=2, n_bytes=196, idle_timeout=5,icmp,in_port=2,vlan_tci=0x0000,dl_src=00:08:74:23:5c:50,dl_dst=00:0a:e4:2e:b8:41,nw_src=192.168.12.201,nw_dst=192.168.12.202,icmp_type=0,icmp_code=0 actions=output:3 cookie=0x0, duration=2.147s, table=0, n_packets=1, n_bytes=98, idle_timeout=5,icmp,in_port=3,vlan_tci=0x0000,dl_src=00:0a:e4:2e:b8:41,dl_dst=00:08:74:23:5c:50,nw_src=192.168.12.202,nw_dst=192.168.12.201,icmp_type=8,icmp_code=0 actions=output:2 #
この環境では arp を飛ばさないようにしているので icmp しか出ていないが、通常は arp なども残っているはず。 デフォルトでは idle_timeout が 5 になっているので、パケットが 5 秒間来ない時間があればフロー情報は消えてしまう点に注意。
iperf (http://sourceforge.net/projects/iperf/) による転送テストを行った。 対向している二台のMacintosh (共に 1Gbps インタフェイス)の一方で iperf -s としてサーバモードで起動、他方で iperf -c 192.168.1.xx のように相手を指定して TCP による転送テストを行う。
# iperf -c 192.168.12.3 ------------------------------------------------------------ Client connecting to 192.168.12.3, TCP port 5001 TCP window size: 129 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.12.6 port 63119 connected with 192.168.12.3 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.09 GBytes 940 Mbits/sec #
10秒間の転送試験で安定して 940Mbps だった。 シングルストリーム、長大パケットであるとは言え、CPU もほぼアイドル状態だった。 カーネルモジュールが効率良く機能していると思える。
以上で Open vSwitch 1.4 をインストールし、テストする準備ができた。