21.2. Windows 仮想マシンの最適化
RHEL 9 でホストされる仮想マシンで Microsoft Windows をゲストオペレーティングシステムとして使用すると、ゲストのパフォーマンスが悪影響を受ける可能性があります。
そのため、Red Hat は、以下のいずれかを組み合わせて実行して Windows 仮想マシンを最適化することを推奨しています。
- 準仮想化ドライバーの使用。詳細は、Installing KVM paravirtualized drivers for Windows virtual machines を参照してください。
- Hyper-V Enlightenment の有効化。詳細は、Hyper-V enlightenment の有効化 を参照してください。
- NetKVM ドライバーパラメーターの設定。詳細は、Configuring NetKVM driver parameters を参照してください。
- Windows バックグラウンドプロセスの最適化または無効化。詳細は、Optimizing background processes on Windows virtual machines を参照してください。
21.2.1. Windows 仮想マシン用の KVM 準仮想化ドライバーのインストール
Windows 仮想マシンのパフォーマンスを改善する主な方法は、Windows 用の KVM 準仮想化 (virtio
) ドライバーをゲストオペレーティングシステムにインストールすることです。
virtio-win
ドライバーは、各 virtio-win
リリースの時点で利用可能な Windows 10 および 11 の最新リリースに対して認定 (WHQL) されています。ただし、virtio-win
ドライバーは広くテストされており、Windows 10 および 11 の以前のビルドでも正しく機能することが期待されます。
Windows VM にドライバーをインストールするには、次の操作を実行します。
- ホストマシンにインストールメディアを準備します。詳細は、Preparing virtio driver installation media on a host machine を参照してください。
- インストールメディアを既存の Windows 仮想マシンに接続するか、新しい Windows 仮想マシンを作成するときに接続します。詳細は、RHEL への Windows 仮想マシンのインストール を参照してください。
-
Windows ゲストオペレーティングシステムに
virtio
ドライバーをインストールします。詳細は、Installing virtio drivers on a Windows guest を参照してください。 -
QEMU Guest Agent
を Windows ゲストオペレーティングシステムにインストールします。詳細は、Windows ゲストへの QEMU ゲストエージェントのインストール を参照してください。
21.2.1.1. Windows virtio ドライバーの仕組み
準仮想化ドライバーは仮想マシンのパフォーマンスを向上し、I/O レイテンシーを下げ、ベアメタルレベルまでスループットを増加させます。Red Hat は、I/O 負荷の高いタスクとアプリケーションを実行する仮想マシンには、準仮想化ドライバーを使用することを推奨します。
virtio
ドライバーは、KVM ホストで実行する Windows 仮想マシンで利用可能な、KVM の準仮想化デバイスドライバーです。これらのドライバーは、virtio-win
パッケージにより提供されます。これには、以下のドライバーが含まれます。
- ブロック (ストレージ) デバイス
- ネットワークインターフェイスコントローラー
- ビデオコントローラー
- メモリーバルーニングデバイス
- 準仮想化シリアルポートデバイス
- エントロピーソースデバイス
- 準仮想化パニックデバイス
- マウス、キーボード、タブレットなどの入力デバイス
- エミュレートされたデバイスの小規模セット
エミュレートされたデバイス、virtio
デバイス、および割り当てられたデバイスの詳細は、仮想デバイスの管理 を参照してください。
KVM の virtio ドライバーを使用すると、以下の Microsoft Windows バージョンが、物理システムのように動作することが見込まれます。
- Windows Server バージョン - Red Hat ナレッジベースの Certified guest operating systems for Red Hat Enterprise Linux with KVM を参照してください。
Windows デスクトップ (サーバー以外) バージョン:
- Windows 10 (32 ビット版および 64 ビット版)
- Windows 11 (64 ビット)
21.2.1.2. ホストマシンでの virtio ドライバーインストールメディアの準備
KVM virtio
ドライバーを Windows 仮想マシン (VM) にインストールまたは更新するには、最初にホストマシンで virtio
ドライバーインストールメディアを準備する必要があります。これを行うには、virtio-win
パッケージで提供される .iso
ファイルをストレージデバイスとして Windows VM に接続します。
前提条件
- RHEL 9 ホストシステムで仮想化が有効になっていることを確認する。詳細は、仮想化の有効化 を参照してください。
- 仮想マシンへのルートアクセス権限があることを確認します。
手順
サブスクリプションデータを更新します。
# subscription-manager refresh All local data refreshed
virtio-win
パッケージの最新バージョンを入手します。virtio-win
がインストールされていない場合:# dnf install -y virtio-win
virtio-win
がインストールされている場合:# dnf upgrade -y virtio-win
インストールが成功すると、
virtio-win
ドライバーファイルが/usr/share/virtio-win/
ディレクトリーで使用可能になります。これには、ISO
ファイルと、ディレクトリーにドライバーファイルを持つdrivers
ディレクトリー (各アーキテクチャーと対応している Windows バージョン用のファイル) が含まれます。# ls /usr/share/virtio-win/ drivers/ guest-agent/ virtio-win-1.9.9.iso virtio-win.iso
virtio-win.iso
ファイルをストレージデバイスとして Windows VM に接続します。-
新しい Windows 仮想マシンを作成する ときは、
virt-install
コマンドオプションを使用してファイルをアタッチします。 既存の Windows 仮想マシンにドライバーをインストールする場合は、
virt-xml
ユーティリティーを使用してファイルを CD-ROM としてアタッチします。# virt-xml WindowsVM --add-device --disk virtio-win.iso,device=cdrom Domain 'WindowsVM' defined successfully.
-
新しい Windows 仮想マシンを作成する ときは、
21.2.1.3. Windows ゲストへの virtio ドライバーのインストール
KVM virtio
ドライバーを Windows ゲストオペレーティングシステムにインストールするには、ドライバーを含むストレージデバイスを (仮想マシン (VM) の作成時または作成後に) 追加し、Windows ゲストオペレーティングシステムにドライバーをインストールする必要があります。
この手順では、グラフィカルインターフェイスを使用してドライバーをインストールする手順を説明します。Microsoft Windows Installer (MSI) コマンドラインインターフェイスを使用することもできます。
前提条件
-
KVM
virtio
ドライバーを備えたインストールメディアを仮想マシンに接続する必要があります。メディアの準備手順は、Preparing virtio driver installation media on a host machine を参照してください。
手順
-
Windows ゲストオペレーティングシステムで、
File Explorer
アプリケーションを開きます。 -
この PC
をクリックします。 -
デバイスおよびドライブ
ペインで、virtio-win
メディアを開きます。 仮想マシンにインストールされているオペレーティングシステムに基づいて、次のいずれかのインストーラーを実行します。
-
32 ビットオペレーティングシステムを使用している場合は、
virtio-win-gt-x86.msi
インストーラーを実行します。 -
64 ビットオペレーティングシステムを使用している場合は、
virtio-win-gt-x64.msi
インストーラーを実行します。
-
32 ビットオペレーティングシステムを使用している場合は、
表示された
Virtio-win-driver-installer
セットアップウィザードで、表示される指示に従い、Custom Setup
ステップまで進みます。- カスタムセットアップ画面で、インストールするデバイスドライバーを選択します。推奨されるドライバーセットが自動的に選択され、ドライバーの説明がリストの右側に表示されます。
- をクリックして、 をクリックします。
- インストールが完了したら、 をクリックします。
- 仮想マシンを再起動してドライバーのインストールを完了します。
検証
Windows 仮想マシンで、Device Manager に移動します。
- Start をクリックします。
- Device Manager を検索します。
デバイスが正しいドライバーを使用していることを確認します。
- デバイスをクリックして Driver Properties ウィンドウを開きます。
- Driver タブに移動します。
- Driver Details をクリックします。
次のステップ
- NetKVM ドライバーをインストールした場合は、Windows ゲストのネットワークパラメーターの設定も必要になる場合があります。詳細は、Configuring NetKVM driver parameters を参照してください。
21.2.1.4. Windows ゲストでの virtio ドライバーの更新
Windows ゲストオペレーティングシステム (OS) で KVM virtio
ドライバーを更新するには、Windows OS バージョンがサポートしている場合、Windows Update
サービスを使用できます。そうでない場合は、Windows 仮想マシン (VM) に接続されている virtio
ドライバーインストールメディアからドライバーを再インストールします。
前提条件
- virtio ドライバーがインストールされた Windows ゲスト OS。
-
Windows Update
を使用しない場合は、最新の KVMvirtio
ドライバーを含むインストールメディアを Windows 仮想マシンに接続する必要があります。メディアの準備手順は、Preparing virtio driver installation media on a host machine を参照してください。
手順 1: Windows Update を使用してドライバーを更新する
Windows 10、Windows Server 2016 以降のオペレーティングシステムでは、Windows Update
グラフィカルインターフェイスを使用して、ドライバーの更新が利用可能かどうかを確認します。
- Windows 仮想マシンを起動し、ゲスト OS にログインします。
Optional updates ページに移動します。
Settings
Windows Update Advanced options Optional updates - Red Hat, Inc. からのすべての更新をインストールします。
手順 2: ドライバーを再インストールして更新する
Windows 10 および Windows Server 2016 より前のオペレーティングシステムの場合、または OS が Windows Update
にアクセスできない場合は、ドライバーを再インストールします。これにより、Windows ゲスト OS のネットワーク設定がデフォルト (DHCP) に復元されます。カスタマイズしたネットワーク設定を保持する場合は、バックアップを作成し、netsh
ユーティリティーを使用して復元する必要もあります。
- Windows 仮想マシンを起動し、ゲスト OS にログインします。
Windows コマンドプロンプトを開きます。
- Super+R キーボードショートカットを使用します。
-
表示されるウィンドウで、
cmd
と入力し、Ctrl+Shift+Enter を押して管理者として実行します。
Windows コマンドプロンプトを使用して、OS ネットワーク設定をバックアップします。
C:\WINDOWS\system32\netsh dump > backup.txt
付属のインストールメディアから KVM
virtio
ドライバーを再インストールします。次のいずれかを行います。Windows コマンドプロンプトを使用してドライバーを再インストールします。ここで、X はインストールメディアのドライブ文字です。次のコマンドは、すべての
virtio
ドライバーをインストールします。64 ビット vCPU を使用している場合:
C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x64.msi /passive /norestart
32 ビット vCPU を使用している場合:
C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x86.msi /passive /norestart
- VM を再起動せずに、グラフィカルインターフェイスを使用して ドライバーを再インストールします。
Windows コマンドプロンプトを使用して、OS ネットワーク設定を復元します。
C:\WINDOWS\system32\netsh -f backup.txt
- 仮想マシンを再起動してドライバーのインストールを完了します。
21.2.1.5. Windows ゲストでの QEMU ゲストエージェントの有効化
RHEL ホストが Windows 仮想マシン上で 特定の操作のサブセット を実行できるようにするには、QEMU ゲストエージェント (GA) を有効にする必要があります。これを行うには、QEMU ゲストエージェントインストーラーを含むストレージデバイスを、既存の仮想マシンに追加するか、新しい仮想マシンを作成するときに追加し、Windows ゲストオペレーティングシステムにドライバーをインストールします。
グラフィカルインターフェイスを使用してゲストエージェント (GA) をインストールするには、以下の手順を参照してください。コマンドラインインターフェイスで GA をインストールするには、Microsoft Windows Installer (MSI) を使用してください。
前提条件
- ゲストエージェントを含むインストールメディアが仮想マシンに接続されている。メディアの準備手順は、Preparing virtio driver installation media on a host machine を参照してください。
手順
-
Windows ゲストオペレーティングシステムで、
File Explorer
アプリケーションを開きます。 -
この PC
をクリックします。 -
デバイスおよびドライブ
ペインで、virtio-win
メディアを開きます。 -
guest-agent
フォルダーを開きます。 仮想マシンにインストールされているオペレーティングシステムに基づいて、次のいずれかのインストーラーを実行します。
-
32 ビットオペレーティングシステムを使用している場合は、
qemu-ga-i386.msi
インストーラーを実行します。 -
64 ビットオペレーティングシステムを使用している場合は、
qemu-ga-x86_64.msi
インストーラーを実行します。
-
32 ビットオペレーティングシステムを使用している場合は、
-
オプション: ホストと Windows ゲスト間の通信インターフェイスとして準仮想化シリアルドライバー (
virtio-serial
) を使用する場合は、virtio-serial
ドライバーが Windows ゲストにインストールされていることを確認します。virtio
ドライバーのインストールの詳細は、Windows ゲストへの virtio ドライバーのインストール を参照してください。
検証
Windows 仮想マシンで、Services ウィンドウに移動します。
Computer Management > Services
-
QEMU Guest Agent
のステータスがRunning
であることを確認します。
21.2.2. Hyper-V Enlightenment の有効化
Hyper-V Enlightenment では、KVM が Microsoft Hyper-V ハイパーバイザーをエミュレートするための方法を利用できます。これにより、Windows 仮想マシンのパフォーマンスが向上します。
以下のセクションは、対応している Hyper-V Enlightenment と、その有効化に関する情報を提供します。
21.2.2.1. Windows 仮想マシンでの Hyper-V Enlightenment の有効化
Hyper-V Enlightenment により、RHEL 9 ホストで実行している Windows 仮想マシン (VM) でパフォーマンスが向上します。それを有効にする方法は、次を参照してください。
手順
virsh edit
コマンドを使用して、仮想マシンの XML 設定を表示します。以下に例を示します。# virsh edit windows-vm
XML の
<features>
セクションに、以下の<hyperv>
サブセクションを追加します。<features> [...] <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <stimer state='on'> <direct state='on'/> </stimer> <frequencies state='on'/> <reset state='on'/> <tlbflush state='on'/> <reenlightenment state='on'/> <ipi state='on'/> <evmcs state='on'/> </hyperv> [...] </features>
XML に
<hyperv>
サブセクションが含まれている場合は、上記のように変更します。以下のように、設定の
クロック
セクションを変更します。<clock offset='localtime'> ... <timer name='hypervclock' present='yes'/> </clock>
- XML 設定を保存して終了します。
- 仮想マシンが実行中の場合は再起動します。
検証
virsh dumpxml
コマンドを使用して、実行中の仮想マシンの XML 設定を表示します。次のセグメントが含まれている場合は、Hyper-V Enlightenment が仮想マシンで有効になります。<hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <frequencies state='on'/> <reset state='on'/> <tlbflush state='on'/> <reenlightenment state='on'/> <stimer state='on'> <direct state='on'/> </stimer> <ipi state='on'/> <evmcs state='on'/> </hyperv> <clock offset='localtime'> ... <timer name='hypervclock' present='yes'/> </clock>
21.2.2.2. 設定可能な Hyper-V Enlightenment
特定の Hyper-V 機能を設定して Windows 仮想マシンを最適化できます。以下の表では、設定可能な Hyper-V 機能およびその値に関する情報を提供します。
Enlightenment | 説明 | 値 |
---|---|---|
evmcs | L0 (KVM) と L1 (Hyper-V) ハイパーバイザーとの間で準仮想化プロトコルを実装し、L2 を終了してハイパーバイザーに移動する時間を短縮できます。 注記 この機能は Intel プロセッサーのみを対象とします。 | on、off |
frequencies | Hyper-V 周波数 MSR (Machine Specific Registers) を有効にします。 | on、off |
ipi | IPI (準仮想化された相互プロセッサー割り込み) サポートを有効にします。 | on、off |
reenlightenment | タイムスタンプカウンター (TSC) 周波数の変更がある場合に (移行時のみ) 通知します。新しい周波数に切替える準備ができるまで、ゲストでそのまま以前の周波数を使用することも可能です。 | on、off |
relaxed | 仮想マシンを高負荷のホストで実行すると、一般的に BSOD に陥る Windows のサニティーチェックを無効化します。これは、Linux カーネルオプション no_timer_check と似ています。これは、Linux が KVM で実行している場合に自動的に有効になります。 | on、off |
runtime | ゲストコードの実行に費やすプロセッサー時間および、ゲストコードの代わりに費やすプロセッサー時間を設定します。 | on、off |
spinlocks |
| on、off |
stimer | 仮想プロセッサーの合成タイマーを有効にします。この Enlightenment が指定されない場合には、特定の Windows バージョンが、HPET (HPET が利用できない場合には RTC も使用) を使用するように戻るため、仮想 CPU がアイドル状態であっても、CPU の消費量が大幅に消費される可能性があることに注意してください。 | on、off |
stimer-direct | 有効期限イベントが通常の割り込みで配信されると合成タイマーを有効にします。 | on、off |
synic | stimer とともに、synthetic タイマーをアクティブにします。Windows 8 では、この機能は定期的なモードで使用します。 | on、off |
時間 | 仮想マシンでできるように、以下の Hyper-V 固有のクロックソースを有効にします。
| on、off |
tlbflush | 仮想プロセッサーの TLB をフラッシュします。 | on、off |
vapic | 仮想 APIC を有効にして、高負荷のメモリーマッピングされた APIC (Advanced Programmable Interrupt Controller) レジスターへのアクセラレート MSR アクセスを提供します。 | on、off |
vendor_id | Hyper-V ベンダー ID を設定します。 |
|
vpindex | 仮想プロセッサーのインデックスを有効にします。 | on、off |
21.2.3. NetKVM ドライバーパラメーターの設定
NetKVM ドライバーをインストールした後は、ご使用の環境に応じて設定を行うことができます。次の手順にリストされているパラメーターは、Windows デバイスマネージャー (devmgmt.msc
) を使用して設定できます。
ドライバーのパラメーターを変更すると、Windows はそのドライバーを再読み込みします。これにより、既存のネットワークアクティビティーが中断します。
前提条件
NetKVM ドライバーが仮想マシンにインストールされている。
詳細は、Installing KVM paravirtualized drivers for Windows virtual machines を参照してください。
手順
Windows デバイスマネージャーを開きます。
Device Manager を開く方法は、Windows のドキュメントを参照してください。
Red Hat VirtIO Ethernet Adapter を見つけます。
- Device Manager 画面で、Network アダプターの隣にある をクリックします。
ネットワークアダプターのリストの下で、Red Hat VirtIO Ethernet Adapter をダブルクリックします。
デバイスの プロパティー ウィンドウが開きます。
デバイスパラメーターを表示します。
プロパティー ウィンドウで、詳細設定 タブをクリックします。
デバイスパラメーターを変更します。
変更するパラメーターをクリックします。
そのパラメーターのオプションが表示されます。
必要に応じてオプションを変更します。
NetKVM パラメーターオプションの詳細は、NetKVM ドライバーパラメーター を参照してください。
- をクリックして変更を保存します。
21.2.4. NetKVM ドライバーパラメーター
次の表に、設定可能な NetKVM ドライバーのロギングパラメーターに関する情報を示します。
パラメーター | 説明 2 |
---|---|
logging.Enable | ロギングが有効であるかどうかを決定するブール値。デフォルト値は Enabled です。 |
logging.Level | ロギングレベルを定義する整数。この整数を高くすると、ログの詳細度が上がります。
注記 ロギングレベルが高くなると、仮想マシンの速度が低下します。 |
次の表に、設定可能な NetKVM ドライバーの初期パラメーターに関する情報を示します。
パラメーター | 説明 |
---|---|
Assign MAC | 準仮想化 NIC のローカル管理 MAC アドレスを定義する文字列。これはデフォルトでは設定されません。 |
Init.Do802.1PQ | Priority/VLAN タグポピュレーションと削除サポートを有効にするブール値。デフォルト値は Enabled です。 |
Init.MaxTxBuffers | 割り当てられた TX リング記述子の数を表す整数。この値は、QEMU の Tx キューのサイズによって制限されます。 デフォルト値は 1024 です。 有効な値は、16、32、64、128、256、512、1024 です。 |
Init.MaxRxBuffers | 割り当てられた RX リング記述子の数を表す整数。この値は、QEMU の Tx キューのサイズによって制限されます。 デフォルト値は 1024 です。 有効な値は、16、32、64、128、256、512、1024、2048、および 4096 です。 |
Offload.Tx.Checksum | TX チェックサムオフロード機能を指定します。 Red Hat Enterprise Linux 9 では、このパラメーターの有効な値は次のとおりです。
|
Offload.Rx.Checksum | RX チェックサムオフロード機能を指定します。 Red Hat Enterprise Linux 9 では、このパラメーターの有効な値は次のとおりです。
|
Offload.Tx.LSO | TX ラージセグメントオフロード (LSO) 機能を指定します。 Red Hat Enterprise Linux 9 では、このパラメーターの有効な値は次のとおりです。
|
MinRxBufferPercent | RX キュー内の使用可能なバッファーの最小量を、RX バッファーの合計量に対するパーセントで指定します。使用可能なバッファーの実際の数がこの値よりも少ない場合、NetKVM ドライバーは、オペレーティングシステムにリソース不足状態を通知します (できるだけ早く RX バッファーを返すように要求します)。
最小値 (デフォルト) -
最大値 - |
21.2.5. Windows 仮想マシンでのバックグラウンドプロセスの最適化
Windows OS を実行している仮想マシンのパフォーマンスを最適化するには、さまざまな Windows プロセスを設定するか、無効化してください。
設定を変更すると、プロセスによっては、予想通り機能しない場合があります。
手順
次の組み合わせを実行すると、Windows 仮想マシンを最適化できます。
- USB や CD-ROM などの未使用のデバイスを削除して、ポートを無効にします。
- SuperFetch や Windows Search などのバックグラウンドサービスを無効にします。サービスの停止に関する詳細は、システムサービスの無効化 または サービス停止 を参照してください。
useplatformclock
を無効にします。これには以下のコマンドを実行します。# bcdedit /set useplatformclock No
- スケジュール済みのディスクのデフラグなど、不要なスケジュールタスクを確認して無効にします。方法は、スケジュール済みタスクの無効化 を参照してください。
- ディスクが暗号化されていないことを確認します。
- 定期的なサーバーアプリケーションのアクティビティーを減らします。これには、各タイマーを編集します。詳細は Multimedia Timers を参照してください。
- 仮想マシンで Server Manager アプリケーションを閉じます。
- ウイルス対策ソフトウェアを無効にします。ウイルス対策ソフトウェアを無効にすると、仮想マシンのセキュリティーが侵害される可能性があることに注意してください。
- スクリーンセーバーを無効にします。
- 使用時以外は、Windows OS のサインイン画面のままにします。