nkjmkzk.net

powered by Kazuki Nakajima

Oracle VMをCisco UCS + Palo(M81KR)で検証しました

8/6のOracle VM Forumで発表させていただきましたが、Oracle VMとCisco UCSを組み合わせて検証しました。検証の焦点はCisco UCSに装着したCNA, 「Palo」ことM81KRを認識できるかということと、その性能です。

M81KRはmezzanine cardですが一枚のM81KRで最大128個の仮想NICを作成できるところがポイントです。さらにOS側には特段SR-IOV対応等は必要ありません。OSはM81KRで作成された仮想NICを普通のPCIデバイスとして認識します。

Cisco UCS M81KR 仮想インターフェイス カード

結論から言うとまず認識に関してはまったく問題ありませんでした。

Oracle VM Serverでlspciコマンドを実行し、認識しているPCIデバイスを確認するとM81KRで作成した仮想NICは下記のように表示されます。

[root@vmserver]# lspci
0c:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0d:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0e:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0f:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
10:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)

lspciの出力は、デバイスから得られるPCI IDと、/usr/share/hwdata/pci.idsに格納されているPCI IDを照合してデバイス名を表示しています。したがってlspciでデバイス名が得られたからといってドライバがこのデバイスを認識しているかどうか(つまりNICとして使用可能な状態かどうか)は別問題です。

M81KRが作成する仮想NICを利用するにはenicというドライバが必要になります。これはまだ多くのLinuxディストリビューションには含まれていないため、別途Ciscoさんのサイトからダウンロードしてインストールする必要があります。RHEL5.x, OEL5.xであればRPMが用意されています。しかし今回僕も初めて気がつきましたが、Oracle VM Server 2.2.1はこのenicドライバを標準でインストールしてあります。なのでM81KRで作成した仮想NICはOracle VM Serverからは別途ドライバをインストールせずともNICとして正しく認識され、ethX, xenbrXが自動的に作成されます。

一方、この仮想NICを有効活用するにはPCI Passthroughが効果的でしょう。その場合はこのデバイスに対するドライバが必要となるのはゲストOS(仮想マシン)の方です。Passthrough設定を行うとVM Server(つまりdom0)からはそのNICは見えなくなります(ただし依然としてlspciの出力には現れます)。したがってPassthroughした先のゲストOSでこのNICを利用するにはゲストOS側にenicドライバをインストールする必要があります。

RHEL5.x, OEL5.xではenicドライバはバンドルされていませんが、RHEL6.x, OEL6.xでは標準でバンドルされるようです。

2010年8月時点ではOracle VM ServerでのPCI Passthroughは公式サポートされていません。チャレンジャーな方は下記に手順を紹介しますのでトライしてみてください。

Oracle VM Serverで上記の仮想NICをPassthroughするにはまずUCSの該当ブレードでVT-d(I/O Virtualization)がEnabledとなっていることを確認します。
次にOracle VM Serverのgrub.confを編集してI/O Virtualizationを有効にしてOSを再起動します。

title Oracle VM Server-ovs (xen-64-3.4.0 2.6.18-128.2.1.4.25.el5ovs)
        root (hd0,0)
        kernel /xen-64bit.gz dom0_mem=547M iommu=pv
        module /vmlinuz-2.6.18-128.2.1.4.25.el5xen ro root=UUID=f1b13de3-adb2-4b5a-a6e9-a8beda1b4f73
        module /initrd-2.6.18-128.2.1.4.25.el5xen.img

OSが起動したら下記のコマンドでI/O Virtualizationが有効化されていることを確認します。

[root@vmserver]# xm dmesg | grep 'I/O virtualisation'
(XEN) I/O virtualisation enabled
(XEN) I/O virtualisation for PV guests enabled

次にmodprobe.confに下記の記述を追加し、再起動を行います。これはdom0からPCIデバイスを隠蔽するための設定です。(0000:0c:00.0はdom0用に残しておきます)

install enic /sbin/modprobe pciback ; /sbin/modprobe --first-time --ignore-install enic
options pciback hide=(0000:0d:00.0)(0000:0e:00.0)(0000:0f:00.0)(0000:10:00.0)

ifconfig -a等でインターフェースを確認してみるとと、先ほどまでこれらの仮想NICにひもづいて作成されていたethXやxenbrXがなくなるはずです。

その代わりにPCIデバイスはPassthrough用にプールされています。xmコマンドで確認可能です。

[root@vmserver]# xm pci-list-assignable-device
0000:0d:00.0
0000:0e:00.0
0000:0f:00.0
0000:10:00.0

ここにリストされているPCIデバイスはゲストOSにPassthrough可能になっています。仮想マシンの設定ファイルを編集してPCIデバイスを割り当てます。ここではPVHVMを使用しています。

単なるHVMでももちろん可能ですが、PVMの場合はPVMのgrub.confにも少し設定が必要です。

ネットワークの内部構成は下図のようになります。

スクリーンショット(2010-08-07 13.40.36)

[root@vmserver]# vi /OVS/running_pool/oel55-phvm-01/vm.cfg
acpi = 1
apic = 1
builder = 'hvm'
device_model = '/usr/lib/xen/bin/qemu-dm'
disk = ['file:/OVS/running_pool/oel55-phvm-01/System.img,hda,w']
kernel = '/usr/lib/xen/boot/hvmloader'
keymap = 'en-us'
memory = 1000
name = 'oel55-phvm-01'
on_crash = 'restart'
on_reboot = 'restart'
pae = 1
serial = 'pty'
timer_mode = '2'
uuid = '313105b6-15ac-d7ea-de41-0ef0a90d302a'
vcpus = 4
vif = ['bridge=xenbr0,mac=00:16:3E:42:C7:A9,type=netfront'] #これはPVドライバを利用したインターフェース
vif_other_config = []
pci = ['0000:0d:00.0'] #PCI Passthroughの設定
vnc = 1
vncconsole = 1
vnclisten = '0.0.0.0'
vncpasswd = ''
vncunused = 1

これでゲストOSを起動します。まだゲストOSにenicドライバをインストールしていない場合はインストールします。
ドライバ:http://tools.cisco.com/support/downloads/go/ImageList.x?relVer=1.3%281e%29&mdfid=283004074&sftType=Unified+Computing+System+%28UCS%29+Tools+and+Drivers+Bundle&optPlat=Linux&nodecount=2&edesignator=null&modelName=Cisco+UCS+B200+M2+Blade+Server&treeMdfId=282558030&treeName=Unified+Computing&modifmdfid=&imname=&hybrid=Y&imst=N&lr=Y
*アカウントが必要です

[root@guest]# rpm -ivh kmod-enic-1.3.1c-rhel5u5.x86_64.rpm

そしてlspciコマンドで仮想NICをPCIデバイスとして認識できているか確認します。

[root@guest]# lspci | grep Cisco
00:03.0 Ethernet controller: Cisco Systems Inc VIC Ethernet NIC (rev a2)

ドライバをロードしてネットワークインターフェースが認識されることを確認します。

[root@guest]# ls /sys/class/net
eth0 lo sit0
[root@guest]# modprobe enic
[root@guest]# ls /sys/class/net
eth0 eth1 lo sit0

あとはいつも通りネットワークインターフェースを設定するだけです。

性能値についてはOracle社のポリシー上公開できないのですが、かなりの値が期待できると思っていただいて間違いないでしょう。また、スピードが速い、というだけでなくdom0へのCPUインパクトが激減(というかほぼゼロ)になるのが素晴らしいところです。

without comments

Written by 中嶋 一樹

8月 7th, 2010 at 1:48 pm

Posted in Uncategorized

Tagged with , , , , ,

Leave a Reply