朝から昼寝

ITや家計、身近なことの整理

[お知らせ]
当サイトは、2024年1月1日に
新URL(happynap.net)に引っ越しました





このページの内容は、最新ではない場合がありますので、新URLをご確認ください。






当サイトには広告を含みます。"オススメ"として紹介している商品やサービスは、個人的にそう思えたものだけです。
共感、興味をもっていただけるものがあればご利用ください (広告掲載ポリシー)。

vSphereの仮想NICでVMXNET3推奨の根拠

概要

vSphere 環境で仮想マシンを作成時、仮想NICのタイプとして "VMXNET3" が良いと (なんとなく) 認識していたのですが、その根拠 (ソース) を探してみたところ、ちょっと分かりづらかったです。

本記事では、仮想NICのタイプとして "VMXNET3" が推奨されるとするソースがどこにあるのか調べた結果をまとめます。

対象は、VMware vSphere 7.0や8.0です (ESXi 7系、8系) 。

仮想NICネットワークアダプタタイプ

仮想マシンの作成時 (仮想NICの追加時) のパラメタの1つとして、タイプ (ネットワークアダプタタイプ) があります。

本記事では、このタイプの1つである "VMXNET3" が推奨されることについて、確認していきます。

製品ドキュメントでは推奨されていない

製品ドキュメント、"vSphere の仮想マシン管理" に、各ネットワークアダプタタイプについての説明が一通り書かれています。

vSphereにおいて、多くのゲストOS向けに仮想NICのデフォルト値となっている "E1000E" と "VMXNET3" についての説明を引用します。

E1000E
Intel 82574 ギガビット イーサネット NIC のエミュレート バージョンです。E1000E は、Windows 8 および Windows Server 2012 のデフォルト アダプタです。

VMXNET 3
パフォーマンス向上のために設計された、準仮想化 NIC です。VMXNET 3 は VMXNET 2 で使用可能なすべての機能を提供し、さらに、マルチキュー サポート (Windows では Receive Side Scaling とも呼ばれる)、IPv6 オフロード、および MSI/MSI-X 割り込み配信などのいくつかの新機能も提供します。VMXNET 3 は VMXNET または VMXNET 2 を基盤にしていません。
 
出典:ネットワーク アダプタの基本

ここでは特に、"VMXNET3" が推奨されている訳ではありません。

ざっくりした比較

E1000E (や古いE1000) は、IntelNICのエミュレートバージョンです。

対して、VMXNET3は準仮想化NICです。

この時点で、物理NICのエミュレート (完全仮想化相当) と準仮想化NICを単純に比べれば、パフォーマンスが期待できるのは準仮想化の "VMXNET3" です。

ただ、前述のとおり製品ドキュメントで明確に表現されていないので、もう少し詳しく確認していきます。

互換性ガイド (VMware Compatibility Guide) で推奨

探してみたところ、VMware公式Webサイト上では、互換性ガイド (VMware Compatibility Guide)で、 "VMXNET3" が推奨されているという表現が見つかりました。

検索カテゴリを "Guest OS" 、製品名を "ESXi" に選択し、製品リリースバージョン も適宜選んで検索すると、各ゲストOSのサポート状況が表示されます。

表示の件数を多くすると、検索結果を見やすいです。


出典:VMware Compatibility Guide - Guest/Host Search

"VMXNET3" が推奨されているゲストOS

例えば、Windows Server 2022では、以下のように "VMXNET3" が推奨されています (Recommended)。


出典:VMware Compatibility Guide - Guest/Host Search

他にも同様に、以下のOSでは "VMXNET3" が推奨されています。

ほとんどのOSについて、仮想NICのタイプは "VMXNET3" が推奨されています。
過去のOSバージョンについても同様です。

"VMXNET3" が推奨されている訳ではないゲストOS

一方で、なぜかRHEL系 (Fedora系) のゲストOSについては、"VMXNET3" が推奨 (Recommended) されているという表現が見当たりません。

以下は、RHEL9の場合です。


出典:VMware Compatibility Guide - Guest/Host Search

サポートはされています。

もしかすると根深い何かがあるのかもしれませんが (Red Hatの仮想化製品との兼ね合い等)…、よく分かりません。

大きな影響は無さそうですが、以下のような問題の事例があるようです。

あくまでVMware社の説明

上記の互換性ガイドは、VMware社が提供する情報です。ゲストOSを動作させるための仮想基盤側の見解なので、重要な根拠の1つとなります。

ただし、各ゲストOSの開発元が提供する情報ではありません。

状況に応じ、ゲストOS側の情報も確認すると良いでしょう。

VMXNET3の性能情報

明確なデータは見当たらないのですが、いくつか参考になった情報を記載しておきます。

ベンチマーク情報

かなり古いですが、"E1000E" (や"E1000") と、"VMXNET3" のベンチマーク比較を行った結果が掲載されている記事があります。

上記サイトでは、以下のように"VMXNET3" が "E1000E" (や"E1000") と比べて高いスループットを実現できたことを示しています。


出典:VMXNET3 vs E1000E and E1000 – part 2 – RICKARD NOBEL AB

余談ですが、1Gbps NICであるはずの "E1000"、"E1000E" で、1Gbps超のスループットが出ていたりします。ある意味で物理NIC以上の性能が出てしまっています。

VMware公式の資料

さらに古いですが、VMwareが "VMXNET" の性能について公開している資料があります。

"VMXNET3"でなく、ずっと昔の "VMXNET" です。

(歴史的な情報として) "VMXNET" のときは、E1000アダプタと大差が無かったことが分かります。

実機の挙動

デフォルトがE1000Eになるもの

仮想マシン作成時、ゲストOSとしてWindows、その他 (macOS等で確認) を選択すると、デフォルトの仮想ネットワークアダプタのタイプは "E1000E" となります。

前述のとおり、互換性ガイドではWindowsは "VMXNET3" が推奨されていたのに、デフォルトは "E1000E" のようです。互換性を優先した結果なのかもしれません。

ゲストOS上のデバイス

WindowsゲストOS上では、各仮想NICは以下のように認識されます。

  • "E1000E" の仮想NIC
    バイスマネージャー等で "Intel(R) 82574L Gigabit Network Connection" として認識される。
    リンク速度は1Gbps。

  • "VMXNET3" の仮想NIC
    バイスマネージャー等で "vmxnet3 Ethernet Adapter" として認識される。
    リンク速度は10Gbps

(前述の通り、1Gbpsリンクでも1Gbpsを超えることケースもあるようです)

デフォルトがVMXNET3になるもの

対して、ゲストOSとしてLinux、その他 (FreeBSD等で確認) を選択すると、デフォルトの仮想ネットワークアダプタのタイプは "VMXNET3" となります。

その他のOS

ゲストOSとして、IBM OS/2を選択すると "フレキシブル" になったりもします。

(参考) Hyper-Vの場合

Hyper-Vの場合、特にGUI上はネットワークアダプタの種類を選ぶことはできないのですが、デバイスマネージャー等では、"Microsoft Hyper-V Network Adapter"として認識され、リンク速度は10Gbpsです。

第2世代の仮想マシンでは、"Hyper-V 固有のネットワーク アダプター" (おそらく準仮想化) が使用されるようです (ゲストOSがLinuxの場合どうなるのか等は未確認)。
対して、第1世代でのみ使用できる "レガシ ネットワーク アダプター"はエミュレーションです。

VMXNET3を使用したい場合

Windows仮想マシンの場合は、作成時にネットワークアダプタタイプをデフォルト値から変更する必要性があります。

既に仮想マシンを作成済みの場合、仮想NICの再作成が必要です (作成済みの仮想NICのタイプ変更は不可)。

他の多くのゲストOSでは、デフォルトが "VMXNET3" になっているので、特別な対応は不要です。

その他の問題等

"VMXNET3" や "E1000"、"E1000" に関するトラブル事例です。

結論:どちらでも

個人的な感覚としては、極端な用途のゲストOSでない限り、"VMXNET3" でも "E1000E" でも、どちらでも問題は無いかと思います。

どちらでも良いなら、"VMXNET3" にしておきたいです。

不具合に遭遇する可能性という意味では、枯れたハードウェアのエミュレーションに比べれば準仮想化NICの方が若干高いのかもしれませんが、実用上問題になるほどではないように思います。

まとめ

本記事では、仮想NICのタイプとして "VMXNET3" が推奨されるとするソースがどこにあるのか調べた結果についてまとめてみました。

参考