いまさら聞けないHyper-Vのハードウェアオフロード機能:今だからこそ学び直すHyper-V再入門(16)
前回まで、実運用環境では必須機能である「Hyper-V」の高可用機能「フェールオーバークラスタリング」を見てきました。今回は、実運用環境でのパフォーマンス向上に欠かせないHyper-Vの「ハードウェアオフロード」機能について、その概要を学び直します。
Hyper-Vのハードウェアオフロード機能とは?
Microsoftの「Hyper-V」はハードウェア仮想化技術であり、仮想化されたハードウェアを仮想マシンに提供することで、1台の物理サーバ上で複数の仮想マシンを稼働できます。これは「物理的には1つのハードウェアを複数の仮想マシンで共有して使用する」ということであり、そのコントロールは全てハイパーバイザーであるHyper-Vと親パーティション(管理用OS)が実施しています。
例えば、仮想マシンがネットワークに接続するには「仮想ネットワークアダプター」が必要です。その通信は「仮想スイッチ」経由で物理ネットワークアダプターに渡され、物理ネットワークにパケットが送出されます。このように書くとたいした処理をしていないように思えるかもしれませんが、ネットワーク通信の裏側では大量の処理が行われています。
イーサネットのフレーム長は通常1518byte(バイト)であり、イーサネットヘッダは14byteです。最大伝送単位(MTU)は1500byteで、残りの4byteはFCS(Frame Check Sequence:フレームチェックシーケンス)と呼ばれる誤り検出符号です。
ネットワークアダプターがイーサネットフレームを受信すると、まず受信したイーサネットフレームを定められた手順で計算し、FCSと一致すればそのイーサネットフレームは正常なフレームとして受信処理が継続します。FCSと一致しない場合は、受信したイーサネットフレームがどこかで破損したと判断され、フレームが破棄されて再送要求が行われます。
他にも、大きなデータを送信する際にはイーサネットフレームに収まるようにデータを分割する必要がありますが、その分割処理や受信後の復元処理なども必要です。
こうした処理をCPUで実施してしまうと、CPUに大きな負荷をかけることになります。これらを別の処理機能、例えば物理ネットワークアダプターの専用チップで処理することで、CPUに負荷をかけることなく高速に処理することができます。
このようにCPUではなく、別のハードウェアに処理を任せることを「ハードウェアオフロード」と呼びます。
仮想ネットワークアダプターでも同様の処理を行っていますが、ハードウェアオフロード機能がなければ、それらの処理は全てCPUでソフトウェア的に処理する必要があります。物理ネットワークアダプターがHyper-Vのハードウェアオフロードに対応していれば、それらの仮想ネットワークアダプターの処理も、物理ネットワークアダプターにオフロードできます。
ネットワークアダプターのハードウェアオフロード(ハードウェアアクセラレーション)については、以下のMicrosoftの公式ドキュメントを参照してください。
- ハイパフォーマンス ネットワーク(HPN)(Microsoft Learn)
上記ドキュメントで説明されているオフロード機能の多くはデフォルト(既定)で有効になっており、使用していることを意識する場面は少ないです。それ以外にもHyper-Vにはハードウェアオフロード機能が用意されており、明示的に有効化することで仮想マシンのパフォーマンス向上に寄与します。
次項からHyper-Vが備えるハードウェアオフロード機能を幾つか紹介します。
個別デバイス割り当て(DDA)
「個別デバイス割り当て」(Discrete Device Assignment:DDA)は、その名の通り、物理デバイスを直接仮想マシンに接続する機能です。例えば、仮想マシン上のディスクはHyper-Vで提供される仮想ディスクであり、実体は物理ディスク上に存在する仮想ディスクファイルになります。DDAを利用することで、Hyper-Vホストに接続されている物理ディスクを直接仮想マシンに接続でき、仮想マシンでありながら物理ディスクのパフォーマンスを利用できます。
以下の画面1はDDAを利用して仮想マシンにNVMe(Non-Volatile Memory Express)ディスクを接続した仮想マシンになります。「デバイスマネージャー」から見ても仮想ディスクではなく、NVMeディスクを認識していることが分かります。
物理ディスクに対して直接アクセス可能であるため、ディスクパフォーマンスも物理ディスクと同等の性能が得られます。NVMeディスクのDDA設定については、以下の公式ドキュメントを参照してください。
- 個別のデバイスの割り当てを使用して NVMe 記憶装置を展開する(Microsoft Learn)
なお、DDAは物理ディスクだけではなく、グラフィックスデバイス(GPU:Graphics Processing Unit)も設定できます(画面2)。
画面2の「物理的な場所」で「Virtual PCI Bus」として認識しているところからも、仮想マシンから物理デバイスとしてのGPUがマッピングされていることが分かります。
このようにGPUを直接仮想マシンに接続できるため、仮想マシン上でGPUを使用したアプリケーションを動作させることが可能です。Windows ServerでのGPUのDDA設定については、以下の公式ドキュメントを参照してください。
- 個別のデバイス割り当てを使用してグラフィックス デバイスを展開する(Microsoft Learn)
NVMeディスクのような記憶デバイスであれ、GPUであれ、物理ホストに接続された物理デバイスを仮想マシンに直接割り当てるため、1デバイスにつき割り当てられる仮想マシンは1つになります。物理デバイスを仮想マシンで占有するため、当然といえます。
しかしながら、ハードウェアを仮想マシンで占有できるため、ハイパフォーマンスを求められる仮想マシンではその威力を発揮することでしょう。
シングルルートIO仮想化(SR-IOV)
Hyper-Vでは、物理デバイスを仮想化して仮想マシンに提供しますが、仮想化している分、オーバーヘッドが存在することも事実です。仮想マシンで物理マシンに匹敵するような高速なネットワークが必要なシナリオの場合、物理ネットワークアダプターを直接仮想マシンにマッピングして使用できれば、要求されるパフォーマンスに到達できる可能性があります。
Hyper-Vでは、PCI Express(PCIe)仕様の拡張機能である「シングルルートIO仮想化」(SR-IOV)が利用可能であり、仮想マシンに対して直接PCIeデバイスである物理ネットワークアダプターをマッピングすることが可能です。
SR-IOVと呼ばれる機能は、ネットワークアダプターやRAIDカードなどのディスクコントローラーを論理分割して「仮想ファンクション」(Virtual Function:VF)として仮想マシンに割り当て、仮想マシンから見てあたかも物理PCIeデバイスを直接アクセスしているようにその機能を利用できます。
前項で紹介したDDAと同じような機能に感じられると思いますが、PCIeデバイスのSR-IOVの場合、1枚のPCIeデバイスで複数の仮想マシンに対して機能を提供できる点が異なります。
Hyper-VでのSR-IOVは、物理ネットワークアダプターをSR-IOVで論理分割し、複数の仮想マシンにネットワークアダプターのVFを割り当ててハイパフォーマンスなネットワークを提供する機能を指します。
Hyper-VでSR-IOVを使用する場合、幾つかの前提条件があります。その1つ目がHyper-Vホストのハードウェア設定です。CPU仮想化とIO仮想化(VT-d〈Virtualization Technology for Directed I/O〉、もしくはIOMMU〈Input/Output Memory Management Unit〉)に対応している必要があります。これらはHyper-Vに対応したサーバハードウェアであれば問題ないと思われます。
また、それらとは別にHyper-VホストのBIOS/UEFIファームウェアからSR-IOVを有効化する必要があります(画面3)。
逆に言えば、ハードウェア設定としてSR-IOVを有効化できないサーバでは、SR-IOVを使用できない可能性が高いです。有効化しようとしているHyper-VホストでSR-IOVが使用できるかどうかは、ハードウェアベンダーに問い合わせてください。
【注】以降、「SR-IOV」という名称が出てきた場合、Hyper-Vのネットワーク機能としての「SR-IOV」ではなく、画面3のハードウェア機能としての「SR-IOV」を指している場合がありますのでご注意ください。
また、SR-IOVを有効化する物理ネットワークアダプターもSR-IOVに対応している必要があります。物理ネットワークアダプターの詳細設定で「SR-IOV」を有効化できる設定が存在する場合は、使用できる可能性が高いです(画面4)。こちらも詳細についてはハードウェアベンダーに問い合わせてください。
Hyper-VホストのハードウェアがSR-IOVに対応していることが確認できたら、実際にSR-IOVの設定を行っていきます。SR-IOVの設定は、仮想スイッチと仮想ネットワークアダプターの双方で行います。
まず、仮想スイッチですが、仮想スイッチ作成時に「シングルルートIO仮想化(SR-IOV)を有効にする」にチェックを入れて作成します(画面5)。この設定は仮想スイッチ作成時にしか行うことができません。既存の仮想スイッチに対して後付けで有効化することはできず、仮想スイッチを再作成する必要がある点に注意してください。
次に仮想ネットワークアダプターの設定でSR-IOVを有効にします(画面6)。仮想ネットワークアダプターの「ハードウェアアクセラレータ」で、「SR-IOVを有効にする」のチェックを入れれば設定は完了です。なお、この設定を行うネットワークアダプターはSR-IOVを有効にした仮想スイッチに接続している必要があります。
これにより、仮想マシンに物理ネットワークアダプターが提供され、ハードウェアの性能を仮想マシンから利用できるようになります。
SR-IOVが有効化された仮想マシン上で「デバイスマネージャー」を確認すると、画面7のようにハードウェアが接続されていることが分かります。しかし、デバイス名に「Virtual」の文字列が挿入されている通り、SR-IOVによって提供されているVFであることも併せて確認できます。
仮想化されているとはいえ、ハードウェアが直接見えるということはハードウェアドライバをインストールする必要がありますので、SR-IOVのVF用のドライバ(もしくは物理デバイス用ドライバ)をインストールしてください。
SR-IOVについては、Microsoftの公式ドキュメントも併せて参照してください。
- シングルルートI/O仮想化(SR-IOV)の概要(Microsoft Learn)
GPU仮想化(GPUパーティション分割)
SR-IOVによって物理ネットワークアダプターというハードウェアが仮想マシンに共有されたのと同じように、GPUも仮想マシンに分割/共有できます。それが「GPUパーティション分割」(GPU-P)です。
GPU-Pによる仮想マシンへのGPU提供は、DDAによるGPUの提供に似ています。しかし、DDAはPCIeデバイスを占有する1対1の関係であるのに対し、GPU-PはGPUをパーティションで分割して仮想マシンに提供するため、GPUから見て1対nの関係になります。nについてはGPU-Pを有効化するGPUによって異なりますが、「NVIDIA A2」GPUの場合は、16分割、8分割、4分割、2分割、1分割のいずれかから選択可能で、最大16台の仮想マシンに対してGPUパーティションを提供できます(画面8)。
このパーティション数は、GPUのVRAM(フレームバッファー)をはじめとするGPUのリソースを分割する数になるので、パーティション数が多ければ多いほど、1パーティション当たりのパフォーマンスは低くなります。例えば、画面9はパーティション数「4」で設定して仮想マシンにvGPU(仮想GPU)を割り当てたものになりますが、VRAM(専用GPUメモリ)は3.5GBの割り当てとなっています。
画面9の「物理的な場所」で「Virtual PCI Bus」として認識しているところからも、仮想マシンであることが分かります。1枚のGPUを複数の仮想マシンで共有できるGPU-Pは、コストパフォーマンスに優れたGPUの利用方法ともいえるでしょう。Windows ServerでのGPU-P設定については、以下の公式ドキュメントを参照してください。
- GPUパーティション分割(Microsoft Learn)
リモートダイレクトメモリアクセス(RDMA)
「リモートダイレクトメモリアクセス」(RDMA)は、その名の示す通り「リモートコンピュータのメモリにダイレクトアクセスする技術」になります。この技術の本質は、RDMAに対応したネットワークアダプター間であれば通常のTCP/IPを通さずに、すなわちCPUを介在せずにデータのやりとりが可能になる、という点でしょう。まさにハードウェアに処理をオフロードしており、本稿の主題の典型例といえます。
RDMA自体はHPC(ハイパフォーマンスコンピューティング)などのスーパーコンピュータの世界では古くから用いられるネットワーク技術ですが、Windows Serverにおいても高速なデータ転送を実現する「SMBダイレクト」で用いられています。SMBダイレクトについては、以下の公式ドキュメントを参照してください。
- SMBダイレクト(Microsoft Learn)
SMBダイレクトを用いるメリットは、ハードウェアオフロードの技術であるため「超低レイテンシ」「低CPU負荷」「高スループット」である点が挙げられます。
ネットワークアダプター間でメモリ転送を実現しているため、CPUを介在することがなかったり、OSレベルの処理をスキップできたりという点で「超低レイテンシ」「低CPU負荷」を実現しています。
ネットワークアダプターのハードウェアで処理が行われるため、OSの遅延に影響されることなく自身が持つネットワーク帯域をフルに使えることで、ワイヤレート(25Gbpsのネットワークアダプターであれば25Gbps)に近いスループットを出すことが可能です。
このネットワーク技術は、本連載第13回でも触れたWindows Serverの「記憶域スペースダイレクト」(S2D)でも利用されており、超高速ストレージを支える技術となっています。
- 記憶域スペースダイレクトの概要(Microsoft Learn)
また、仮想マシンにおいても、前項のSR-IOVを利用することで仮想マシンでもRDMAが使用可能になります(ゲストRDMA)。ゲストRDMAを設定することで、仮想マシンでもSMBダイレクトによる高速ファイルコピーが可能になります。
今回はHyper-Vのハードウェアオフロード機能について概要を見てきました。ハードウェアオフロードの世界は非常にディープですので、興味があればMicrosoftのドキュメントやハードウェアベンダーが提供するドキュメントなどを参照して理解を深めてみてください。
次回はHyper-Vのバックアップや仮想マシンのチェックポイント、災害対策のための「Hyper-Vレプリカ」などの機能について触れていきたいと思います。
筆者紹介
後藤 諭史(ごとう さとし)
株式会社ネットワールド所属。Microsoft MVP for Cloud and Datacenter Management(2012-2025)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.








