ESXiにおいて11th Gen Intel Core CPU（Rocket Lake世代）のSpeed Shift TechnologyがPSODを起こす件について

自宅仮想化ホストマシーン（ESXi）更新の際のトラブル事例の共有です。

### 更新の理由
* 2014年に購入した部品をそろそろ更新したい（耐用年数的な意味で）
* 慢性的なメモリー不足が徐々に深刻化
* VMwareが将来的にHaswell世代の製品のサポートの打ち切りを言及（具体的な時期はまだ未定ですが…）

### 更新前の主な構成
* Intel Core i7-4770 （Haswell世代） 4C8T
* ASUS Z87-Plus
* G.SKILL DDR3-1600 8GB×4枚=32GB

### 更新後の主な構成
* Intel Core i9 11900T（Rocket Lake世代） 8C16T（→後でCore i7 11700に変更）
* ASUS PRIME Z590-A
* Crucial DDR4-2666 16GB×4枚=64GB

### その他の主な構成（今回の更新で変更無し）
* ストレージ用のHDD：メーカー色々 14TB×7枚（ロットアウトのリスク避けて意図的にメーカーとLOTばらけています）
* ストレージ用のSSD：Crucial MX500 1TB×6枚
* OS兼ESXiデータストア用SSD Intel P4510 2TB
* ESXiデータストア用SSD WD SN550 1TB
* LSI SAS 9211-8i（TI Firmware使用）
* Intel X540-T2
* （その他色々…）

### 色々前提
* メモリー、CPUのOC一切しません。
* 「K」付き買いません。
* 電圧、動作周波数すべてデフォルト。
* 省エネ運用前提。
* ESXi 7.0.3→7.0.3a（検証中に7.0.3aがリリース）

### 予定していた更新手順
1. 検証段階：新HW仮組→ESXi新規インストール→動作確認
1. 移行段階：旧HW（CPU、マザボ、メモリー）取り外し→新HW装着
1. 確認段階：通電確認→VMインポート→VM起動

### トラブル一部始終
1. 検証段階でESXiインストール後、Bootに失敗（添付画像）、PSODになる。エラー内容：Fatal CPU mismatch on feature "Intel Hardware-Controlled Performance States"（CPU4, 5, 6, 7の値がCPU0のそれと異なってESXiがPanicを起こす。）![PSOD_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255848/a7a688e0-9f9a-1db8-46f8-88ecb0546c25.jpeg)
1. [vmwareサポートフォーラム](https://communities.vmware.com/t5/ESXi-Discussions/Upgrade-ESXI-7-0-1-Fatal-CPU-mismatch/td-p/2813635)の情報に基づいて、起動オプションに「cpuUniformityHardCheckPanic=FALSE」を追記して、とりあえずCPUの均一性チェックを強制的に無効化したところで起動に成功。仮のVMをインポートしてうまく動いたため、移行開始を決断。
1. 全VM移行後無事動作を確認。が、、、
1. UPタイムが約20時間になったところで、CPU mismatch再発。（添付画像）![PSOD_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255848/9a7ad0de-0220-c314-a7d9-903973874bd7.jpeg)
1. 自宅の別マシーンから10世代目（Comet Lake）Core i5 10500Tを移植し、24時間程度安定動作。
1. 冷静さを失って手元の11900Tを疑いはじめ、慌ててCore i7 11700を調する達もUPタイム24時間未満でCPU mismatch再発。（添付画像②と同じ）
1. ESXiのバージョンを7.0.2に戻すもPSOD再発（内容は異なるが…）![PSOD_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255848/2e4ad580-ed7d-b417-8840-7ca52b68a1ff.jpeg)（言い訳をさせてもらうと、同時期[10月中下旬]にESXi 7.0.3がPSODになるBugが見つかったという出来事があって自分の中でその要因の切り分けがしたかった）
1. 仕方なく再び10500Tに戻し、問題なく動作。
1. 冷静さを取り戻しつつ、エラーコードを頼りにいろいろ情報を漁ったところ、どうやらIntel Hardware-Controlled Performance States（HWP, Hardware P-State、後述）というのは、Intel Speed Shift Technologyという技術に使われたもので、こいつが悪さ（語弊しなかい…）しているのではと考え、11700を戻し、BIOSで「Speed Shift Technology」をOFFに。
1. UPタイム36時間経過でPSODならず。　←いまここ

（スクリーンショットはみやすさ優先で白黒に加工しています。）

### ちょい深堀
エラーの内容的に、CPUの"Intel Hardware-Controlled Performance States"という特性において、各コアがバラバラに動き、異なるステータになり、ESXiがパニックを起こすという内容ですが、そもそも「バラバラじゃなダメなの？」という疑問が残るので、ちょっと調べてみた。
どうやらこのIntel Hardware-Controlled Performance States（HWP, Hardware P-State）は、Intel CPUが採用しているSpeed Shift Technologyという、CPUの動作周波数と動作電圧の変更の応答性を向上させるための技術の一つ（[参考記事](https://coderbag.com/product/quickcpu/features/hwp/intel-speed-shift-performance-settings)）。
現代のマイクロプロセッサは、C-State（アイドル状態）とP-State（アクティブ状態）と二種類動作モードを持っておりますが、Intelは省電力とハイパフォーマンスの両立を目指して、Haswell世代からC-State（アイドル状態）を進化（拡張）し、C-State（アイドル状態）においての電力消費のさらなる低減を実現した。
P-Stateにおいても改良が重なってきた。Skylake世代以前のIntel CPUでは、オペレーション負荷のヒントをOSから受信し、それを動作周波数と動作電圧の設定に使ってきたが、OS⇔CPUの通信の遅延により応答性の低下など課題を抱えていた。応答性の向上のため、Skylake世代以降ではSpeed Shiftの主導権をOSではなくCPU自らが握るように進化し、それと同時に生まれたのが「Intel Hardware-Controlled P-State」です。（詳しくは、[PC Watchの記事](https://pc.watch.impress.co.jp/docs/column/ubiq/717008.html)やASCIIの[記事1](https://ascii.jp/elem/000/001/937/1937460/),[記事2](https://ascii.jp/elem/000/001/942/1942549/)の解説が非常に役に立ちます。）

### んで結局なに？
あくまで推測ですが、

* Rocket Lake世代においてHWPに何かしら変更があり、それをESXiがうまく扱えなかったか、ESXiとCPUとマザボ（BIOS）の組み合わせが良くなかったのでは
* うまく動作したCore i5 11500Tに使われているブースト技術はIntel Turbo Boost Technology 2.0と、Core i7 11700 / i9 11900Tに採用されているIntel Turbo Boost Max Technology 3.0と異なるため、このブースト技術の振る舞いによる差

によるものではないかと推測します。

### おわりに

今回はIntel Speed Shift TechnologyをOFFにすることによりPSODを回避できたが、自作PCでESXi運用するユーザーが少く、ネット上の情報が少なすぎるため、自分財力と手持ちのハードウェアだけでこれ以上の検証ができないため、何とも後味が悪い結果になりました。
同じ問題を抱える人あまりいない気がしますが、少しでも少しでも役に立てたら嬉しいです。

長文駄文失礼しました。