CPUの脆弱性問題の根本原因の「投機的実行」との格闘はXbox 360時代から存在する
「Intel製CPU内に構造的な脆弱性がある」という報道から大問題となった「Meltdown(メルトダウン)」や「Spectre(スペクター)」と呼ばれる脆弱性への対応が各ソフトウェアで進められており、性能の低下が懸念されています。このCPU脆弱性問題の原因とされている技術「投機的実行」に関して、ゲーム機Xbox 360時代から投機的実行に基づくバグがあったことをゲーム開発者が明らかにしています。
Finding a CPU Design Bug in the Xbox 360 | Random ASCII
https://randomascii.wordpress.com/2018/01/07/finding-a-cpu-design-bug-in-the-xbox-360/
Googleで働くソフトウェアエンジニアのブルース・ドーソン氏が、自身のブログ「Random ASCII」で、かつてのXbox 360で苦労したCPUバグについて述懐しています。このバグは、今話題のメルトダウンやスペクターと基本的には同じ構造を持つとドーソンさんは述べています。
Xbox 360で採用されていたIBM製のCPU「PowerPC」は、3つのCPUコアと1つのL2キャッシュメモリを持っていました。3コア+1MBのL2キャッシュという独特の構造のPowerPCには、L2キャッシュをバイパスしてL1キャッシュに直接データをプリフェッチできる「xDCBT」命令がオプションで追加されました。データのプリフェッチがパフォーマンスに大きな影響を与えることから、積極的にxDCBT命令オプションを利用しようとしたゲーム開発者は多かったそうですが、ヒープクラッシュを頻繁に起こしてしまうことがあり、ドーソン氏はゲーム内のコードから、xDCBT命令を取り払ったそうです。
しかし、xDCBT命令を使っていないコードでも深刻なクラッシュ現象に悩まされたドーソン氏は、IBMに電子メールでCPU内部の構造について説明を求めた結果、PowerPCは非常に長いCPUパイプラインを採用していることがわかったそうです。
下の模式図がPowerPCのCPUパイプライン。ドーソン氏は命令を順序通りに実行するインオーダー実行型のCPUとはいえ長すぎるパイプラインだと述べています。
上の模式図の「Branch Predictor」では「予測」が行われ、その予測はフェッチされ、デコードされ、実行されます。しかし、予測は正しいことが確認されるまで破棄されないで保持されます。これは、メルトダウンやスペクターにおける投機的実行とほとんど同じ構造です。ドーソン氏によると、Branch PredictorとxDCBT命令の相性は極めて悪いことがわかったとのこと。
ドーソン氏は同僚とともに、ゲーム内のxDCBT関連コードをすべてブレークポイントに置き換える実験をしたところ、「ブレークポイントは実行されない」「クラッシュがなくなる」という2つの現象が確認されました。つまり、Branch Predictorがゲームのコードの安定性に悪影響を与えていることが明らかになったというわけです。
・関連記事
CPUに内在する脆弱性問題「メルトダウン」「スペクター」への各社の対応まとめ - GIGAZINE
プロセッサの脆弱性問題「メルトダウン」「スペクター」対応パッチでAMDユーザーの一部がPCを使えなくなる恐れ - GIGAZINE
Intel製CPUに内在する脆弱性問題の根は深く「すべてのプロセッサが安全性と高速性を両立できない問題を抱える」との指摘 - GIGAZINE
Intelのプロセッサチップに根本的な設計上の欠陥が発覚、各OSにアップデートの必要性 - GIGAZINE
Microsoft、過去に販売したすべてのXbox360に欠陥があることを認める - GIGAZINE
・関連コンテンツ