仮想マシンのパフォーマンスが悪化したので調べてみた

# はじめに

Windows11 24H2はあまり評判が良くないようですが、これまでも単純なUIの変更に対して辛辣な意見が表明されるなど、Windowsユーザーの多くからは"変更"そのものに建設的ではないネガティブな意見が散見されてきた印象です。

とはいえ今回はカーネルのバージョンそのものが変更されているのでドライバ周りで深刻な影響を受けることもあるでしょうし、機能が増えることでこれまでのハードウェアでは資源が不足する状況も想定されます。

たまたまWindows11の24H2にしたタイミングでVM上のUbuntuのパフォーマンス低下が気になるようにしたので、調べた結果をまとめてみました。

という書き出しでオリジナルのタイトルにはWindows11の文字も入れて、24H2が悪いという論調だったのですが、結論は関係がなかったということで修正しています。

さて、私は日常的にThinkPad T14 Gen2 (CPU: i7-1165G7, Memory: 48GB) + j5 JTD568 Thunderbolt4 (TB4) ドックの組み合せで、電源を供給しながらWindows11をメインの作業用に利用しています。

データ処理やプログラミングなどはVMware Workstation Pro上のUbuntuを利用していて、このVMを引っ越せば業務は継続できるようにしています。

# 現象

メインの作業場であるVM上のUbuntuで日本語の入力などをしていると、キーボードをタイプしてから入力までに数秒の遅延が発生するようになりました。

またTB4ドックに接続しているキーボードは静電容量無接点タイプなのにVM上ではチャタリングが発生していて、実用上問題だと感じる状態になっています。

レスポンスの悪化はVMware Workstationの自動スナップショットの機能を試した時に経験があります。

また全体のパフォーマンスについてはIntel CPU 12世代以降からのP-coreがちゃんと使われないといった問題があって以前から公式フォーラムなどでも話題になっていましたが、徳丸さんのつぶやきでpowercfgで全コア利用する方法が知られるようになってきました。

https://forest.watch.impress.co.jp/docs/serial/yajiuma/2010063.html

VMwareのフォーラムではP-coreだけ有効にするといった提案もあったと思いますが、全コアを稼動させることでも改善するようです。

今回はいずれの機能も利用していないので、Windows11の電源管理やセキュリティ周りを中心に設定変更でできることがないか調べてみました。

# 結論

という前段の書き出しから試したことはここから後ろのセクションにまとめています。

最終的に仮想CPUの割り当て数を実コアを越えないように変更することで改善しました。

Core i7-1165G7は4コア、8スレッドが実効可能ですが、最近1ソケット**2コア**から1ソケット**4コア**に割り当てを変更していたことを失念していて、これが原因でした。

これを**3コア**に減らしたところ劇的にレスポンスが改善して、快適にVMが利用できるようになっています。

メモリについてもやや不足気味だったので、8GBに一応変更していますが、これは6GBに戻しても問題なく直接パフォーマンスには影響しませんでした。

確認のためメモリ8GBの状態でコア数を実コアと同じ**4コア**にしたところ、レスポンスが劇的に悪化する現象が再発しました。

:::note
結論：VMのパフォーマンスはセキュリティよりもコア数の割り当て状況(**実コア数未満!!**)をまず確認すること。
:::

# 既存設定の確認とパフォーマンス・チューニング

ホストOSと仮想環境側の両方の設定をみていきます。

今回はゲストOSのソフトウェアには変更はないので、Windows11とVMware Workstation以外は変更せずにこの記事を作成しながらパフォーマンスが改善するように変更していきます。

## バックグラウンドプロセス

ホストOS側でバックアップを取得していたりすると、その間はパフォーマンスの低下が発生する可能性があります。

基本的に毎朝早朝にバックアップ取得は完了しているので、CPUやメモリ、ディスクやネットワークへのアクセス状況に問題がないことを確認しています。

## 電源管理

23H2ではコントロールパネルの電源管理設定は「バランス」設定で問題なかったのですが、今回は「最適なパフォーマンス」に変更します。

ThinkPadではインテリジェントクーリングという機能はありますが、これは自動にしています。 (Fn + Tキーで変更・確認可能)

またBIOS(UEFI)の設定で電源接続時は最大パフォーマンスになるよう設定しています。

また次のような記事もありました。

https://www.itmedia.co.jp/pcuser/articles/2208/09/news115_2.html

インテリジェントクーリングはOFFの方が良いのではという意見もあるので、様子をみながら調整していきます。

## デバイスの放熱

Thermal Throttlingが発生したわけではありませんが、購入から4年近くが経過して音が気になってきたのでThinkPadのシステム・ファンは少し前に新品に交換しています。

SSDをSamsung 990 Pro 4TBに交換していて少し発熱が気になるので、底面に12cm USBファンを敷いているので、放熱については配慮した状態にはなっています。

:::note
T14 Gen2iはSSDのI/FはPCIe Gen3 x4なので990 Proの性能は活かせていませんが、4TBが必要だったので利用しています。

一般的なThinkPadに搭載されているSamsungのSSDは最大でも5.6W程度の消費電力ですが、990 Proは6.5〜8W程度の消費電力になっているため発熱には配慮が必要です。現在4TBのSSDは各社から発売されているので次の機会には消費電力も考慮して選択すると思います。
:::

## セキュリティ関連

Windows11やVMware Workstationのパフォーマンスに影響を与える設定項目を確認していきます。

### VMware Workstationのグルーバル設定

環境設定の優先順位の設定を確認しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/a0e4f67c-f176-46f2-a592-fa9e236d6cec.png)

最終的に優先度を**高**にしても体感として違いは分かりませんでした。

### VMWare Workstationのサイドチャネル攻撃への対処

VM毎に設定できる項目ですがチェックを外さず、有効化して利用しています。

### Windowsセキュリティ

デバイス・セキュリティについては、コア分離が無効化されていると表示されています。

この画面は後述するグループポリシーで無効を定義した場合のものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/16483933-3431-45ff-a569-efca45c81088.png)

未定義にしてから可能な項目は全て有効にしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/69a03703-0517-4479-861e-de3660a49571.png)

### VBS(仮想化ベースのセキュリティ)

無効化してみたいのですが、WSL2を利用していたり、Hyper-Vの利用をやめるのは難しい状況です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/6dddef0d-6727-4ea4-b510-4ff83217219e.png)

VMwareのパフォーマンス・チューニングでは無効化する情報もありますが、私自身は影響がほとんどない項目だと考えています。

### グループポリシーの設定

ここは無効化していましたが、現在は未構成に変更しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/0eff7685-add0-4057-a6c7-04f6082ed198.png)

無効でもHyper-Vが起動するとVBSは有効化されていましたが、前述したように中途半端な設定だったので有効化しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/2677dc76-c700-482e-8150-9619bf206636.png)

## その他のシステムの設定

UEFIとBIOSの選択についてはどちらでも大きな影響はなさそうです。

LinuxをホストOSにするのであればfwupdmgrコマンドを利用するためにUEFIを利用するべきだとおもいます。

この点についての情報を検索すると、ProxmoxのフォーラムではZFSを使うならUEFIでしょうという意見もあったりします。

https://forum.proxmox.com/threads/benefits-of-using-uefi-intallation-for-prox-instead-of-bios.97944/

オーバヘッドもなさそうなので、VMwareのデフォルト設定のままBIOSでUbuntuは動作させようと思います。

途中で変更しようとするとESP領域の確保など起動ディスクは作り替え(入れ替え)が必要になるため、安易に変更できないことも理由ではあります。

# 現状のVMパフォーマンス

これまではセキュリティ関連の項目を可能な限り有効化するなど、どちらかといえばパフォーマンスを悪化させる方向に構成を変更してきましたが、できるだけ最小の手順で改善を目指します。

## VMの優先順位でフォアグラウンドを高に変更する

グローバル設定ではフォアグラウンドもバックグラウンドも標準設定だったので、問題になっているVMの個別設定でフォアグラウンドの優先順位を*高*に変更してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/a50d558d-1ce6-4c94-ad48-b16e16fbf7bf.png)

### 変更後のレスポンス

体感としては大きく変わっていませんが、チャタリングの発生頻度はわずかには改善されているかもしれない、といった程度です。

まだ遅延が発生していて、少なくともタイピングゲームを安定的に遊べるような状況ではありません。

この設定が他に影響しないのであれば、**高**のままにしておきます。

:::note
最終的にこの項目はあまり関係なさそうです。
:::

## サイドチャネルの攻撃への緩和を無効化する

公式がパフォーマンスに影響するけど設定を推奨する項目です。

無効化して様子を確認します。

:::note
最終的にこの項目は無効化せずにチェックを外して有効化した状態で利用しています。
:::

### 変更後のレスポンス#2

変化がまったく分からない状況です。

この程度であればサイドチャネル攻撃への緩和処置は有効にして利用しようかなと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/e276a431-983c-4b81-84cc-15e8bb98ee8b.png)

# 次の変更案

セキュリティ設定が影響するように考えてきましたが、これらの項目は体感としてはそれほど大きな影響はありませんでした。

次にホストOSとゲストOSとの通信が影響している可能性を考慮して他の設定を確認していきます。

## ディスプレイの3Dアクセラレーションを無効にする

この設定項目はLinuxでは無効化するべきだった期間が長かったように感じます。

現在では問題なくデフォルトで有効化されている項目です。

結論からいうとこの項目はレスポンスに影響を与えなかったため、現在は十分なメモリを割り当てた上で有効にしています。

## メモリとコア数の割り当てを確認する

ここで冒頭の結論に到達しました。

# まとめ

冒頭にまとめたとおり、レイテンスが悪化したのはCPUのコア数割り当てが原因でした。

検索するとヒットするセキュリティ関連の設定無効化はどれも関係がなかったと思います。

原理的にはオーバーヘッドが削減されるので、全体のパフォーマンス向上には寄与するはずですが、影響を体感することは難しそうです。

今回はついでにホストOSのセキュリティ設定も改善できたので良かったのかなと思います。