仮想化でプリセールスしてるSEの一日

VMware から Azure まで、インフラや仮想化の最新情報をベンダー色をできるだけ抑えて綴っていきます

VMware vSphere 5.1 の SR-IOV 構築手順 - (2) ESXi ホスト側の設定

f:id:ogawad:20190203195705p:plain:right

(1) (2) (3) (4)

ハードウェア側で SR-IOV が有効になりましたら、次に ESXi 側の設定を行います。
設定手順は VMDirectPath I/O とほぼ一緒ですので、前回の最後にご紹介した
SR-IOV と VMDirectPath I/O の関係 を思い出すと理解しやすいかもしれません。


ESXi ハイパーバイザー側で SR-IOV を有効化する

下記は通常時の VMDirectPath I/O(PCI パススルー)の画面です。
SR-IOV はまだ有効になっていません。


ここで SR-IOV を有効にします。
PowerShellCLI 設定した Hyper-V と同様に、ESXi も CLI (esxcli) で設定します。

# esxcli system module parameters set -m <ドライバ> -p "max_vfs=<VF 数の配列>"

# esxcli system module parameters list -m be2net

Name               Type          Value     Description
 ----------------  ------------  --------  -------------------------------
heap_initial       int                     Initial heap size allocated for th...
heap_max           int           20971520  Maximum attainable heap size for t...
max_vfs            array of int            Number of Virtual Functions: 0 = d...
skb_mpool_initial  int                     Driver's minimum private socket bu...
skb_mpool_max      int                     Maximum attainable private socket ...
vlan_offload       uint                    Enable or disable VLAN HW offload ...
#
#
# esxcli system module parameters set -m be2net -p "max_vfs=16,16"
#
#
# esxcli system module parameters list -m be2net

Name               Type          Value     Description
 ----------------  ------------  -----  -------------------------------
Name               Type          Value  Description
heap_initial       int                  Initial heap size allocated for the d...
heap_max           int                  Maximum attainable heap size for the ...
max_vfs            array of int  16,16  Number of Virtual Functions: 0 = dis...
skb_mpool_initial  int                  Driver's minimum private socket buffe...
skb_mpool_max      int                  Maximum attainable private socket buf...
vlan_offload       uint                 Enable or disable VLAN HW offload fea...
#
#


SR-IOV を有効にするパラメータは 「max_vfs だけです。
このパラメータは項目名のとおり SR-IOV VF *1 の設定で、マニュアルには次のように書かれています。

コンマ (,) で区切られたリストに値を設定します。このリストは、個々の物理機能に設定する仮想機能数の一覧です。値 0 は、物理機能で SR-IOV が有効にならないことを意味します。

たとえば、デュアル ポートがあり、それらに次の値を設定したとします。

x,x
ここで、x は作成する VF 数です。

Emulex NIC の有効値は、ポート当たり 0 〜 16 です。
単一ホストの VF 合計が 64 ならば、デュアル ポート カード 2 枚を 16,16,16,16 に設定する必要があります。

http://pubs.vmware.com/vsphere-51/topic/com.vmware.vsphere.networking.doc/GUID-C5043E19-F84D-4E2E-9162-16D9967C2DB8.html

分かりにくいので少し解説すると、VF とは SR-IOV NIC に内蔵された仮想スイッチのポートです。このポート数は NIC によって異なり、今回利用した Emulex BE3 の場合は、上記マニュアルのとおり「1ポートあたり 16 VFs」になります。
これをカンマ区切りの配列として入力します。

  • Emulex BE3 2ポートモデル x 1枚の場合(計2ポート)
    • max_vfs=16,16
  • Emulex BE3 2ポートモデル x 2枚の場合(計4ポート)
    • max_vfs=16,16,16,16

なお、max_vfs の設定は GUI(ホストプロファイル)でも行えます。
但し、SR-IOV は vSphere 5.1 の新機能であるため WebClient で設定する必要があるそうです。従来の Win32 版の vSphere Client ではダメらしいのでご注意ください。


ESXi ハイパーバイザーで SR-IOV が有効になると、
先ほどの VMDirectPath I/O の画面が変化します。


冒頭の画像では 07:00.1 と 07:00.2 と2ポートしかなかった「Emulex〜」ですが、SR-IOV を有効にしたことで増殖しています。これが先ほど有効化した VF です。
今回の CNA は 16 VFs x 2ポートでしたので、合計 32 VFs が追加されています。


仮想マシンに VF NIC を割り当てる

ハイパーバイザーが VF を正しく認識したら、ゲストに VF NIC を割り当てます。

この作業は VM DirectPath I/O と全く一緒でPCIバイスとしてマップします。仮想マシンバージョンが 8 で良ければ vSphere Client でも設定可能です。




VF NIC は適当に割り当てるのではなく、次のような意識が必要があります。


Hyper-V は PF NIC をハイパーバイザー内の仮想スイッチに割り当てるので、このあたりは自動化されます。これに対し、VMware の場合は PF は完全にノータッチなため、管理者は上記のようなポイントの理解が必要ですが、それだけ柔軟な制御・設計が可能です。
一般的には、冗長化チーミング)を考慮して、物理ポートが異なる VF NIC をペアにして仮想マシンに割り当てていくことになると思います。



通常の仮想 NIC と比べて GUI からは何も設定できません。
構成情報ファイル (*.vmx) を覗くと、次のパラメータが追加されています。

pciPassthru0.present = "TRUE"
pciPassthru0.deviceId = "710"
pciPassthru0.vendorId = "19a2"
pciPassthru0.systemId = "50be25f8-ff8a-ae24-da12-2c768a53dd70"
pciPassthru0.id = "07:04.0"


仮想マシンの初回起動時には、下記パラメータも追加されます。「00-0c-29」から始まるこの MAC アドレスは物理 NIC の OUI ではなく VMware 社の登録 OUI です。つまり仮想アドレスですので pciPassthru0.generatedMACAddress を修正することで値を変更できます。

pciPassthru0.pciSlotNumber = "224"
pciPassthru0.MACAddressType = "generated"
pciPassthru0.generatedMACAddress = "00:0c:29:52:3b:ca"
pciPassthru0.generatedMACAddressOffset = "101"


仮想マシンを立ち上げるところまで来ました。
次回 はゲスト側の設定内容と制約事項について説明します。

*1:Virtual Function の略。SR-IOV NIC に内蔵された仮想スイッチのダウンリンクポートのこと。