VMware vSphere 5.1 の SR-IOV 構築手順 - (2) ESXi ホスト側の設定
ハードウェア側で SR-IOV が有効になりましたら、次に ESXi 側の設定を行います。
設定手順は VMDirectPath I/O とほぼ一緒ですので、前回の最後にご紹介した
SR-IOV と VMDirectPath I/O の関係 を思い出すと理解しやすいかもしれません。
ESXi ハイパーバイザー側で SR-IOV を有効化する
下記は通常時の VMDirectPath I/O(PCI パススルー)の画面です。
SR-IOV はまだ有効になっていません。
ここで SR-IOV を有効にします。
PowerShell で CLI 設定した 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 です。
http://pubs.vmware.com/vsphere-51/topic/com.vmware.vsphere.networking.doc/GUID-C5043E19-F84D-4E2E-9162-16D9967C2DB8.html
単一ホストの VF 合計が 64 ならば、デュアル ポート カード 2 枚を 16,16,16,16 に設定する必要があります。
分かりにくいので少し解説すると、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 は適当に割り当てるのではなく、次のような意識が必要があります。
- 物理ポート (PF) の同じ VF NIC 間の通信は NIC 内の仮想スイッチで収束できるため、トラフィックがアップリンクを流れずに済みます。
- 但し、NIC の冗長化(チーミング)を行う場合には、物理ポートの異なる 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"