2013年9月17日
Oracle VM Server for SPARCで複数のゲストドメインを構築する場合、以下の図のように一つの物理NICを複数のゲストドメインで共用することが多くあります。
この場合、あるゲストドメインがネットワークの帯域を使い切ってしまうと、別のゲストドメインのネットワーク性能に影響を与えてしまう可能性があります。
Oracle VM Server for SPARCの仮想スイッチや仮想ネットワークには帯域を制御する機能はありません。しかし、Oracle Solaris 11にはflowadmというネットワーク帯域を制御する機能があります。
これは、Crossbowと呼ばれるネットワーク仮想化機能の一つとして紹介されることが多く、Oracle Solaris ゾーンで使う機能と思われがちですが(私も最初はそう思っていました)、物理NICやゲストドメインの仮想ネットワーク(vnet)でも使用することができます。
そこで今回は、このflowadmを用いて、ゲストドメインのネットワーク帯域を制御する方法をご紹介したいと思います。
なお、Oracle Solaris ゾーンとネットワーク仮想化機能を用いて、帯域制御する方法は、「Oracle Solaris 11 ゾーンを使ってみようOracle Solaris ゾーン構築手順書 ~ネットワーク仮想化編~」をご参照ください。
今回は以下のような構成のゲストドメインでflowadmによる帯域制御の設定方法と効果を確認したいと思います。
primary# ldm ls -o network
NAME
primary
MAC
00:21:28:a6:3d:d8
VSW
NAME MAC NET-DEV ID DEVICE LINKPROP DEFAULT-VLAN-ID PVID VID MTU MODE INTER-VNET-LINK
primary-vsw0 00:14:4f:fb:5d:f5 net0 0 switch@0 1 1 1500 on
------------------------------------------------------------------------------
NAME
guest0
MAC
00:14:4f:f9:6d:b4
NETWORK
NAME SERVICE ID DEVICE MAC MODE PVID VID MTU LINKPROP
vnet0 primary-vsw0@primary 0 network@0 00:14:4f:f8:9e:33 1 1500
ゲストドメイン上で、vnet0(ゲストドメインのOS上ではnet0と表示)に対してフローを設定します。帯域制御をするためには、対象となるネットワークインターフェースに対して、フローを作成する必要があります。
まずは、ネットワークインターフェースとIPアドレスを確認します。
guest# dladm show-phys
LINK MEDIA STATE SPEED DUPLEX DEVICE
net0 Ethernet up 0 unknown vnet0
guest# ipadm
NAME CLASS/TYPE STATE UNDER ADDR
lo0 loopback ok -- --
lo0/v4 static ok -- 127.0.0.1/8
lo0/v6 static ok -- ::1/128
net0 ip ok -- --
net0/v4 static ok -- 192.168.0.11/24
設定されているフローの確認をします。何も設定されていない場合は、何も表示されません。
guest# flowadm show-flow
guest#
net0に対して、flow0という名前のフローを設定します。
guest# flowadm add-flow -l net0 -a local_ip=192.168.0.11 flow0
guest# flowadm show-flow
FLOW LINK IPADDR PROTO LPORT RPORT DSFLD
flow0 net0 LCL:192.168.0.11/32 -- -- -- --
作成したフローに対して、帯域の上限を「50Mbps」に設定します。
guest# flowadm set-flowprop -p maxbw=50M flow0
guest# flowadm show-flowprop
FLOW PROPERTY VALUE DEFAULT POSSIBLE
flow0 maxbw 50 -- --
フローの設定はこれで完了です。
なお、今回は帯域のみ制限しましたが、使用するプロトコルを制限したりすることもできます。その他の設定について、詳しくはこちらをご参照ください。
設定ができましたので、実際に帯域制御できているか確認したいと思います。
今回は以下の図のように、ファイルをFTPで転送してその際の転送速度を確認します。
flowadmの動作を確認するために、flowstatコマンドを使用します。
ゲストドメイン上でFTPを実行し、実行中の転送速度をflowstatコマンドで確認します。
今回はゲストドメインから送信していますので、「OBYTES」の値を確認します。上限が50Mbpsですので、Byteに直すと6.25MB/sです。
OBYTESの各値を見ますと、多少ばらつきはありますが、大体6.25MB/sになっていることが確認できます。
さて、帯域制御を設定していないときとも比べてみたいと思います。まずは50Mbpsに設定した上限を解除します。
guest# flowadm reset-flowprop flow0
guest# flowadm show-flowprop
FLOW PROPERTY VALUE DEFAULT POSSIBLE
flow0 maxbw -- -- --
上限を解除したら、同じようにファイルをFTPで転送し、その際の転送速度をflowstatコマンドで確認します。
50Mbpsに制限したときと比べて、10倍以上の速度が出ていますね。
これらの結果から、帯域制御の効果が確認できると思います。
仮想化で複数システムを統合する場合、物理リソースを共用する必要が出てきます。
このとき、あるシステムがリソースを占有しないようにするために、このような帯域制御が必要になります。
みなさんもOracle VM Server for SPARCで統合する際に、活用してみてはいかがでしょうか。
応援メッセージはtwitterにて、ハッシュタグ #fjsparc までお願いします。