Skip to main content

Fujitsu

Japan

まっちーの仮想化講座
第19回:ゲストドメインでネットワークの帯域制御

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にて、ハッシュタグ #fjsparcOpen a new window までお願いします。