Windows 11にアップグレード可能なCPUは基本はやっぱり第8世代/Zen+以降になりそう?
文●塩田紳二 編集● ASCII
2021年07月04日 10時00分
第7世代/Zen世代のPCでも
一部はWindows 11にアップグレード可能!?
Windows Insider Previewでプレビュー版Windows 11の配布が開始された。また、Windows 11のアップグレード条件に関しては、ちょっとしたアップデートがあった。
発表当初は、Windows 11にアップグレード可能なのは、Intelの第8世代以降、AMDのZen+世代以降とされていた。しかし、その後に公開されたMicrosoftのブログでは、第7世代やZen世代のPCがアップグレードに適するかどうか、PCメーカーと調査して報告するという表現になった。
第7世代/Zen世代のメーカー製PCであっても、Microsoftが定める「原則」(Principal)を満たすなら、アップグレードを可能にするかもしれないということだ。もし、CPUのスペックだけがインストールの可否をきめているのであれば、こうした表現にはならない。つまり、CPUのスペック以外になんらかの条件が存在している。
今配布されているプレビュー版Windows 11は、インストール時のチェックがないため、第7世代以前のPCにもインストールが可能だ。筆者の環境では、第4世代にはインストールできたが、第3世代はインストールが失敗した。少なくとも、Windows 11自体は古いPCでも動作する。
Windows 11のアップグレード条件とは、Microsoftが決めた「原則」に合うか合わないかで決められるもので、動く・動かないという技術的な条件ではない。これは、おそらく2018年に公開されたSpectre/Meltdown(以下、これらの変種を含めSpectre/Meltdownと表記する)という脆弱性に関係するものだと思われる。簡単に言えば、Spectre/Meltdown対策が最初からなされているIntel第8世代、AMD Zen+世代以降をWindows 11のアップグレード対象にしたのだ。
Spectre/Meltdownは、2017年に発見されたが、投機実行を装備する広範囲のCPU(少なくともIntel、AMD、ARM)に影響するものであったため、公開より先に対策を優先させて、その発表は2018年1月まで伏せられた。その影響を受けたのが第7世代、Zen世代のCPUだ。Spectre/Meltdownを発見したProject Zeroによれば、CPUメーカーに正式に通知されたのは2017年6月だという。
●Project Zero Blog「Reading privileged memory with a side-channel」
https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html
2017年6月(2017Q2)以前に出荷されたCPUに関しては、マイクロコードのパッチで対応する必要があった。Kaby Lakeはちょうどその境界にあった製品だった。つまり、Kaby Lakeの出荷開始後にSpectre/Meltdownが発覚したため、Kaby Lakeは、再設計してステッピングを変更(再設計の時間が必要)するか、マイクロコードをアップデートするか(PC側のファームウェアの変更が必要)のどちらかでしか対策ができなかった。
これに対して、第8世代のCoffee Lakeに関しては、出荷前にSpectre/Meltdownが発見されたため、対策した製品を出荷することが可能だった。
AMDも同様で、最初のZen世代の出荷中にSpectre/Meltdownが発覚、Intelの第7世代と同様の対応を取る必要があった。Zen+世代は、その後の出荷になるため、おそらく対策された製品が出荷されたのだと思われる。
CPU脆弱性の対応はもうOSではしたくない
つまり、最初のWindows 11のアップグレード条件、第8世代/Zen+世代以降というのは、Spectre/Meltdown対策が最初からなされているかどうかが線引きの条件だったのだろう。Microsoftはなぜここにこだわったのか? それはWindows 11では、Spectre/Meltdownの「緩和策」「対応策」を排除したいからだろう。
Spectre/Meltdownの対応策は、システムの速度低下を引き起こした。CPUのマイクロコードアップデートでは、修正範囲が限定されるため、安全を取るか、速度を取るかといった二択になりやすい。ソフトウェア側の対策も処理効率を落としてしまう。SpectreV2(Branch Target Injection)では、CPUのマイクロコードアップデートだけでは不十分で、Windows側も対策を強いられた。
そこで導入されたのが「緩和策」だ。プログラムをSpectre/Meltdownに影響されないコードに書き換えるという方法だ。ソフトウェア的な緩和策の1つ「retpoline」は、Jump命令をPush命令とRet命令に置き換えることでSpectreV2を回避できる。Jump命令とRet命令では、実行のメカニズムが違い、Ret命令ではSpectreV2の原因となるブランチターゲットバッファ(分岐先を記憶しておく機構)が使われなくなる。しかし、命令数が増えてしまうため、緩和策を適用する前と同じ速度を保てるというものでもない。このように「緩和策」はWindowsの効率を落としていた。
Windowsを始め現在のOSは、高級言語で書かれているため、retpolineのような緩和策を実現するには、コンパイラーを書き換える必要がある。こうした緩和策やコンパイラーの改造は、それが原因で別の問題を引き起こす可能性があった。実際、Windowsの緩和策アップデートにより、ゲームアプリが起動しないといった問題が生じたようだ。
さらにretpolineの手法は、悪意のあるプログラムからの攻撃手法ROP(Return Oriented Programming)に似ているため、IntelのTiger Lakeに搭載されたCET(Control-Flow Enforcement Technology)に影響してしまう。この世代のCPUで使うためにはretpolineなどの緩和策は外す必要がある。
Microsoftは、Windows 11にこれらのSpectre/Meltdown関連の緩和策、回避策をもう組み込みたくないのであろう。そもそもSpectre/MeltdownはCPU側の問題である。Spectre/Meltdownの緩和策、回避策が入っていないWindowsは、第7世代/Zen世代より前のプロセッサでも動作はするが、脆弱性が残ったままの危険な状態だ。とはいえ、今後減少こそすれ、決して増えることがないこうした古いCPUのために緩和策を入れたままにしておくのは、今後のソフトウェア改良の足かせになりかねない。
そういうわけで、MicrosoftはWindows 11のアップグレード条件を最初からSpectre/Meltdown対策がしてある第8世代/Zen+世代以降としたのではないだろうか。
では、どうやってWindows 11対応かを調べるのか?
では、冒頭に記した「第7世代、Zen世代のPCがアップグレードに適するかどうか、PCメーカーと調査する」というのはどういうことか? これは、第7世代/Zen世代のCPUを搭載したマシンで、Spectre/Meltdown対策が済んでいるかどうかを調べるということだろう。
一般にCPU脆弱性対策は、マイクロコードのアップデートか、CPUの設計変更によってなされている。マイクロコードのアップデートは、PCのファームウェア(UEFI。まだBIOSと呼ぶ人もいるが……)に組み込まれ、電源オンの直後にプロセッサに読み込まれる。CPU自体を交換する必要はないものの、アップデートが更新されると、PCのファームウェア書き換え(BIOS書き換え)が必要になる。これに対してCPUを設計変更して対策変更するためには、それなりの時間がかかる。
第7世代/Zen世代の場合、出荷後にSpectre/Meltdownが発覚したため、それ以前に製造されたPCは、ファームウェアアップデートが必須だ。それは、PCメーカーの責任で行われるため、調査にはPCメーカーの協力が必要となる。
ファームウェアのアップデートはユーザーから放置されることもあれば、メーカーがもう存在しないので配布が止まっていることもあり、PCは古いマイクロコードアップデートのままになっている可能性がある。おそらくこのあたりを調べて許容範囲の機種には、Windows 11のアップデートを許可するのではないかと思われる。
そういうわけで、第7世代/Zen世代のWindows 11へのアップグレードは機種を限定したものになるだろう。また、筆者が予想したように原因がSpectre/Meltdown対策にあるとしたら、第7世代やZenより前の世代のプロセッサーにアップグレード範囲を広げる可能性はかなり低いと思われる。
■関連記事