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

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

Windows Server 2012 Hyper-V の SR-IOV 構築手順 (2)

f:id:ogawad:20190203195637p:plain:right

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

それでは、WS2012RC Hyper-V での構築に入っていきたいと思います。


SR-IOV モードの仮想スイッチを作成する

まずは SR-IOV モードの仮想スイッチを作成します。
「外部ネットワーク」に SR-IOV 対応の未チーム NIC を選択し、WS2012 で追加された「Single-Root I/O Virtualization (SR-IOV) を有効にする」にチェックに入れて仮想スイッチを作成します。通常の仮想スイッチと SR-IOV モードの仮想スイッチは変更できませんのでご注意ください。


作成しましたら、次の PowerShell を実行します。

PS C:\Users\Administrator> Get-VMSwitch | fl *iov*

IovEnabled               : True
IovVirtualFunctionCount  : 0
IovVirtualFunctionsInUse : 0
IovQueuePairCount        : 0
IovQueuePairsInUse       : 0
IovSupport               : False
IovSupportReasons        : {
    このシステムで SR-IOV を使用するには、システムの BIOS を更新して、WindowsPCI Express を制御できるようにする必要があります。更新については、システムの
    製造元に問い合わせてください。, 
    SR-IOV はこのシステムで使用できません。PCI Express ハードウェアでは、どのルー 
    ト ポートでもアクセス制御サービス (ACS) をサポートしません。詳細については、
    システム ベンダーに問い合わせてください。, 
    このシステムのシステム I/O 再マッピング ハードウェアにはセキュリティの脆弱性
    があります。安全を考慮して、SR-IOV を使用する機能は無効になっています。ルート 
    ポートの代替エラー配信メカニズムを有効にする更新されたBIOS については、システ
    ムの製造元に問い合わせてください。すべての仮想マシンで SR-IOV を使用して信頼
    できるワークロードを実行する場合は、DWORD 型の IOVEnableOverride という名前の
    レジストリ キーを 値 1 で 
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization
    に追加し、信頼できる仮想マシンの状態を変更して SR-IOV を有効にできます。
    SR-IOV デバイス仮想マシンに割り当てた後に、システムのパフォーマンスが低下し
    たり、不安定になる場合は、SR-IOV の使用を無効にすることをお勧めします。, 
    このネットワーク アダプターは SR-IOV をサポートしません。
}

まずは「IovSupport」の値を見てください。
ここが True にならないと SR-IOV は利用できません。

False の場合、理由が「IovSupportReasons」に記載されています。
長文に見えますが、実はこの文章はカンマ (,) で区切られており、上記は複数の理由から SR-IOV を利用できないことを示しています。1つずつ潰していきましょう。


サーバー BIOS で SR-IOV を有効化する

このシステムで SR-IOV を使用するには、システムの BIOS を更新して、
WindowsPCI Express を制御できるようにする必要があります。
更新については、システムの製造元に問い合わせてください。
SR-IOV はこのシステムで使用できません。PCI Express ハードウェアでは、
どのルート ポートでもアクセス制御サービス (ACS) をサポートしません。
詳細については、システム ベンダーに問い合わせてください。

上記のようなメッセージが表示される場合、サーバー BIOS で遮断されています。
BIOS 上のパラメータ名はベンダーによってまちまちで、VT-d2 の「2」が省かれていたり、VT-d2 と SR-IOV が1つのパラメータにまとめれているケースもあります。
WS2012 が RTM するまで設定が隠されているケースもありますので、現行サーバーにもかかわらず、見当たらない場合はベンダーの担当者に聞いてみましょう。
また、Microsoft が "SLAT" と呼んでいる Intel VT-x2 (EPT) や AMD RVI も有効にする必要があるそうです。





カードを挿す PCIe スロットを変更する (2012.06.27 追記)

SR-IOV はこのネットワーク アダプターで使用できません。
PCI Express ハードウェアは、アクセス制御サービス (ACS) をサポートしません。
このデバイスは、代替の PCI Express スロットで機能します。
詳細については、ハードウェア ベンダーに問い合わせてください。


SR-IOV 対応サーバーであっても、特定の PCIe スロットでしか動作しないこともあります。上記のようなメッセージが出た場合は、カードを挿入する PCIe スロットを変えてみてください。


Hyper-Vレジストリ・エントリで SR-IOV を有効化する

このシステムのシステム I/O 再マッピング ハードウェアにはセキュリティの脆弱性
があります。安全を考慮して、SR-IOV を使用する機能は無効になっています。ルート 
ポートの代替エラー配信メカニズムを有効にする更新されたBIOS については、システ
ムの製造元に問い合わせてください。すべての仮想マシンで SR-IOV を使用して信頼
できるワークロードを実行する場合は、DWORD 型の IOVEnableOverride という名前の
レジストリ キーを 値 1 で 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization
に追加し、信頼できる仮想マシンの状態を変更して SR-IOV を有効にできます。
SR-IOV デバイス仮想マシンに割り当てた後に、システムのパフォーマンスが低下し
たり、不安定になる場合は、SR-IOV の使用を無効にすることをお勧めします。

このメッセージは指示のとおりで、Hyper-Vレジストリ・エントリで IOVEnableOverride = 1 (DWORD) というパラメータを追加する必要があります。


NICBIOS で SR-IOV を有効化する

このネットワーク アダプターは SR-IOV をサポートしません。

このメッセージが出る場合、
おそらく NICファームウェアデバイスドライバでロックされています。
特に、PowerShellGet-NetAdapterSriov コマンドの実行結果で「Enabled」の値が False の場合は Firmware でロックされていますケースが高いです。
Option ROM に入って SR-IOV の有効状態を確認しましょう。
なお、SR-IOV 非対応の NIC は Get-NetAdapterSriov の実行結果に現れません。

PS C:\Users\Administrator> Get-NetAdapterSriov

Name                 : 554FLR-1
InterfaceDescription : HP NC555a 10Gb 2-Port FlexFabric Network Adapter
Enabled              : False
SriovSupport         : NoOscSupport
SwitchName           : 既定のスイッチ
NumVFs               : 32

Emulex OneConnect CNA (HP 554FLR) の Option ROM:


加えて、ドライバレベルで無効化されていないか確認しておきます。


Broadcom BCM57810S (HP 530FLR) のデバイスドライバ:


「IovSupport」が True になることを確認

ここまでの条件がクリアできれば、「IovSupport」の値が True になるはずです。

PS C:\Users\Administrator> Get-VMSwitch | fl *iov*

IovEnabled               : True
IovVirtualFunctionCount  : 16
IovVirtualFunctionsInUse : 0
IovQueuePairCount        : 16
IovQueuePairsInUse       : 0
IovSupport               : True
IovSupportReasons        : {OK}

複数ゲストからの I/O 調停をハードウェアにやらせるだけあって、色々設定しなければなりませんが、ここが True になれば SR-IOV は利用できます。
「IovVirtualFunctionCount」の数字がこの NIC で調停できるゲストの最大数です。


なお、 IovSupportReasons がどうしても「このネットワーク アダプターは SR-IOV をサポートしません。」になってしまう場合は 前回の記事 にて、NIC/CNA が WS2012 の SR-IOV 対応であるどうかを確認してみてください。
上記の Broadcom 57810S は画面から分かるとおり SR-IOV に対応していますが、WS2012RC では動作させることはできませんでした。同じ Broadcom の SR-IOV 対応 NIC でも、コントローラ・チップによって WS2012 対応に差があるようです。



次回 は実際に SR-IOV NIC をゲストに認識させて動きを確認します。