Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Windows ServerのHyper-V仮想マシンでSR-IOVを有効化・構成する方法

SR-IOV(Single Root Input/Output Virtualization)は、仮想マシンがホストの物理デバイスに直接アクセスできるようにするハードウェアデバイス仮想化技術です。さまざまな種類のデバイスを仮想化できますが、最も一般的に使われるのはネットワークアダプターの仮想化です。本記事では、Windows Hyper-Vサーバー上の仮想マシンのネットワークアダプターに対して、SR-IOVを有効化および構成する手順を詳しく解説します。

SR-IOVの概要とメリット

SR-IOVはHyper-V 2012以降でサポートされており、無償版のWindows Hyper-V Serverでも利用可能です。ここではSR-IOVの原理については深く掘り下げませんが、実務上知っておくべきポイントは次のとおりです。

  • SR-IOVを使用すると、VMがホストの物理ネットワークアダプターに直接アクセスでき、Hyper-V仮想スイッチによるトラフィック処理をバイパスできる。
  • SR-IOVモードの1つの物理ネットワークアダプターで、複数の仮想マシンにサービスを提供できる。

Hyper-V仮想マシンでSR-IOVを活用することで、スループットの大幅な向上ネットワークレイテンシの低減、そしてHyper-Vソフトウェアによるネットワークトラフィック処理に起因するCPU負荷の軽減が期待できます。

注意: SR-IOVはNICチーミング(ネットワークアダプターのチーミング)と互換性がありません。

Hyper-Vホスト側の要件

Hyper-VホストでSR-IOVを有効にするには、いくつかの前提条件を満たす必要があります。

BIOS/UEFIでの設定

まず、サーバーのBIOS(またはUEFI)でSR-IOVと仮想化支援機能を有効にします。ベンダーによって設定項目の名称や場所は異なりますが、主な対象項目は以下のとおりです。

  • 仮想化支援機能: Intelの場合「Virtualization Technology」「Intel VT」「VT-d」「Vanderpool」、AMDの場合「SVM」「AMD-V」など
  • IOMMU
  • SR-IOV
  • ASPM

これらの項目がすべて存在するとは限りませんし、SR-IOVの項目自体が見当たらない場合もあります。しかし、それだけでサーバーがSR-IOV非対応と断定することはできません。例えばSupermicroのマザーボードでは、BIOSにSR-IOVの項目がなく、ASPMがデフォルトで無効になっているケースがあります。この場合、ASPMと仮想化支援機能を有効にすると、SR-IOVも自動的に有効になります。

重要: BIOSでSR-IOVが無効な状態でWindowsをインストールしていた場合、後からBIOSでSR-IOVを有効にすると、システムはネットワークアダプターが交換されたものと認識します。その結果、現在設定されている静的IPアドレスがリセットされる点に注意してください。

PowerShellでSR-IOV対応状況を確認する

Hyper-VサーバーがハードウェアレベルでSR-IOVをサポートしているかどうかは、PowerShellで以下のコマンドを実行して確認できます。

(get-vmhost).IovSupport
(get-vmhost).IovSupportReasons

サーバーがSR-IOVに対応していれば IovSupportTrue を返します。非対応の場合は False となり、IovSupportReasons に非対応の理由が表示されます。通常、理由はかなり詳細に記述されています。典型的な理由には以下のようなものがあります。

  • システムのチップセットが割り込みリマッピング(interrupt remapping)に対応しておらず、SR-IOVをサポートできない。
  • プロセッサがSLAT(Second-Level Address Translation)に対応していないため、SR-IOVを使用できない。IntelプロセッサではEPT(Extended Page Tables)、AMDプロセッサではRVI(Rapid Virtualization Indexing)またはNPT(Nested Page Tables)と呼ばれる機能に相当する。
  • PCI ExpressハードウェアがいずれのルートポートでもACS(Access Control Services)をサポートしていないため、SR-IOVを使用できない。詳細はシステムベンダーに問い合わせること。
  • BIOSがハードウェア能力に関する誤った情報を含んでいるため、SR-IOVを使用するにはBIOSの更新が必要。
  • システムのチップセットがDMAリマッピングに対応しておらず、SR-IOVをサポートできない。
  • I/Oリマッピングハードウェアの使用が無効に設定されているため、SR-IOVを使用できない。
  • WindowsがPCI Expressを制御できるよう、システムBIOSの更新が必要。
  • システムがSR-IOVに対応したチップセットを搭載していること、およびBIOSでI/O仮想化が有効になっていることを確認する必要がある。
  • PCI Expressバスが存在しないと報告されているため、SR-IOVを使用できない。

仮想スイッチでのSR-IOV有効化

get-vmswitch | fl *iov* コマンドの出力全体にも有用な情報が含まれています。例えば以下のとおりです。

IovVirtualFunctionCount : 6
IovVirtualFunctionsInUse : 3

これらの数値は、利用可能なIOV仮想デバイス(Virtual Function)の総数と、そのうち仮想マシンによって使用中の数を示しています。

Hyper-V仮想スイッチを作成する際は、「単一ルート I/O 仮想化 (SR-IOV) を有効にする(Enable single-root I/O virtualization)」オプションにチェックを入れてください。

PowerShellで仮想スイッチを作成する場合は、EnableIov オプションを指定します。

New-VMSwitch -Name "VMNetExt" -NetAdapterName "Ethernet 2" -EnableIov 1
重要: 仮想スイッチの作成後にSR-IOVを有効化することはできません。作成時に有効にしなかった場合は、仮想スイッチを削除して再作成する必要があります。

また、ハイパーバイザーホストがSR-IOVをサポートしていても、特定の仮想スイッチで動作するとは限りません。仮想スイッチは、SR-IOV対応のネットワークアダプターにバインドされている必要があります。

もう一つ注意すべき点があります。マザーボードに複数のネットワークアダプターが搭載されていても、SR-IOVをサポートしているのは一部だけということがあります。さらに、仕様書(データシート)上でアダプターがSR-IOV対応とされていても、実際に使用しているマザーボード上で動作するとは限りません。

仮想スイッチを構成したら、以下のコマンドで状態を確認しましょう。

get-vmswitch | select IovSupport, IovSupportReasons, IovEnabled

IovEnabled の値で、SR-IOVが有効になっているかどうかを確認できます。

SR-IOV対応のネットワークアダプターの一覧は、次のPowerShellコマンドで表示できます。

Get-NetAdapterSriov | sort name | ft Name, InterfaceDescription, SriovSupport

仮想マシンのネットワークアダプターでSR-IOVを有効化する

ハイパーバイザーと仮想スイッチの両レベルでSR-IOVを有効にしたら、次は仮想マシン側で有効化します(デフォルトでは無効になっています)。仮想マシンのネットワークアダプター設定にある「ハードウェア アクセラレータ(Hardware Acceleration)」セクション内の「SR-IOVを有効にする」オプションを使用してください。

PowerShellから仮想マシンのネットワークアダプターに対してSR-IOVを有効にすることもできます。

Set-VMNetworkAdapter -VMName mytestvm -VMNetworkAdapterName "Network Adapter" -IovWeight 100

SR-IOVを無効にする場合は、IovWeight の値を 0 に変更します。

イベントログでSR-IOVの動作を確認する

Hyper-VにおけるSR-IOV関連のエラーやイベントは、イベントビューアーの専用ログで確認できます。

アプリケーションとサービス ログ → Microsoft → Windows → Hyper-V-SynthNic → Admin

SR-IOVが正常に動作していれば、仮想マシンの起動時にイベントビューアーに以下のようなエントリが記録されます。

12597 Network adapter (%NIC_ID%) Connected to virtual network.
12582 Network adapter (%NIC_ID%) started successfully.
12584 Network adapter (%NIC_ID%) allocated a virtual function.
12588 Network adapter (%NIC_ID%) assigned a virtual function.

まとめ

SR-IOVは、仮想マシンとハイパーバイザーのネットワークパフォーマンスを大幅に向上させる強力な技術です。特に、多数の仮想マシンが高トラフィックを発生させ、ホストCPUに大きな負荷がかかっているHyper-V環境において、SR-IOVの効果を最大限に実感できるでしょう。導入時は、BIOS設定、ハードウェア対応確認、仮想スイッチ作成時のオプション指定という順序を確実に踏むことが成功のポイントです。

  1. Windows 10のHyper-Vを有効化・設定して仮想マシンを実行する方法【ステップバイステップ完全ガイド】

    Windows PC上でLinuxなどの別のOSを動かしたいと思ったことはありませんか?実は、VirtualBoxのようなサードパーティ製の仮想化ソフトウェアを追加でインストールしなくても、Windowsの標準機能だけで別のOSを実行できます。 Windows 10には、仮想マシンの作成と実行に特化したHyper-Vというツールが標準搭載されています。この機能は仮想化技術をベースに開発されており、Windows 10 / 8.1 / 7やLinuxなど、さまざまなOSのインスタンスを動かすための仮想マシンを作成するのに必要な要素とインターフェースがすべて揃っています。 注意: Hyper-Vは

  2. Windows 10・8・7対応!おすすめレジストリ最適化ソフト3選

    Windowsのレジストリは、システムにインストールされたすべてのソフトウェアの設定情報を保存する、重要な階層型データベースです。本来であればシステムのパフォーマンスを高速化するための情報ですが、時間が経つにつれて不要なデータが蓄積され、定期的なクリーンアップが必要になります。レジストリはシステムの中核を担うため、専門知識のない状態での手動編集は、取り返しのつかない損害を招く危険性があります。だからこそ、信頼できるレジストリ最適化ツールが必要なのです。 家庭用品を使い終わって処分するとき、付属していた小物まで取っておくことはありませんよね。置いておくだけで場所を取るうえ、いつの間にか使わない物