投機実行が及ぼす影響。
マイクロコード更新
Googleが発見したマイクロコードによる脆弱性対策によって、Intelのみならず、世界中のプロセッサの多くで性能低下が騒がれている。
大きく分けて3つの問題が挙げられているが、その内の1つはそもそも他2つの問題と絡んでいるようで、2つの問題をクリアする事が今急がれている。
それが「Specter」と「Meltdown」と呼ばれる脆弱性で、共に投機実行機能を利用したもので、本来外部に読み出されてはいけないデータを投機実行によって先行処理したデータをキャッシュに書き込み、それを覗くことで読み出されてしまうという問題である。
難しい話なので詳しい説明は省くが、プログラムを処理する中である程度先読みして処理する内容をキャッシュに書き込む際、そのキャッシュデータの内容をユーザーレベル権限でも閲覧、読み出し出来てしまうという事がこのマイクロコードの問題のようである。
処理している段階ではその権限がなくても、データを格納したキャッシュメモリの中身を閲覧できる権限があったという事実は、ある意味今までの常識があまりにも当たり前になっていて盲点だったようで、今回の脆弱性の影響たるやとても大きなものと言える。
当然だが、マイクロコードを更新してこれらの問題に対策するワケだが、そのマイクロコードの更新によって従来と比較して処理低下が懸念されている。
IntelやAMDといったx86コードプロセッサのメーカーもそうした対策を進めてはいるが、Intelが公開した第6~8世代Coreプロセッサでのベンチマーク結果を見ると、最新の第8世代で概ね6%の低下が見られるようである。
但し、それは最新のCoffee LakeやKaby Lakeでの話であり、SkyLakeまではその程度で収まったとしても、その前であるHaswell世代となると話は変わる。
というのも、Haswell世代のCore i7-6700Kでは最大21%の性能低下が起きている事が判明しているのである。
一方、AMDも対策は進めているものの、そもそもAMD製プロセッサでは「Meltdown」は影響を受けないとされていて、対策は実施されていない。
となると、そもそもIntel製CPUはAMD製CPUに対して処理性能のアドパンテージがある、といっていたIPC性能に関して、本来なら少なくとも数%のアドバンテージを対策によって失うという事になる。
対策、次々
そうした諸処の事情があるとして、現在CPUメーカーやOSメーカー、マザーボードメーカー等がマイクロコード更新に関わるパッチやBIOS等のアップデートを行っている。
CPUやOSの場合はOSのパッチで対応する事になるが、マザーボードに関してはBIOS/UEFIの更新が必要なワケで、多少なりユーザーへの更新リスクを伴う問題になっている。
昨年導入した私の新PCに関しても、マザーボードメーカーのAsRockから早速マイクロコード更新の新BIOSであるver1.40が公開された。
昔から比べれば安全に更新できるようになったとはいえ、ユーザーの手に委ねられるファームウェア更新は多少なりとも危険を伴う。
その危険を覚悟した上でどのタイミングで更新しようか、実はちょっと悩んでいたりするのだが、放置しておいてよいものでもないので、どこかで覚悟しなければならない。
OSの更新はWindows Updateで対応するので、OS上で更新となるが、私の今までの常識でいくと、BIOS/UEFIの更新はOSが起動する前のBIOS/UEFI上でUpdateする必要がある。しかし昨今はOS上からBIOS/UEFIの更新プログラムを走らせて、自動で再起動、そのままBIOS/UEFIの更新をしてしまうというような方法もあるようで、楽になったなと思いつつ、トラブルが発生しやすい更新方法だなとも思ったりする。
どちらにしても、絶対という言葉がないので、ファームウェアアップという行為だけは常に危険が伴う作業だと思うと、この脆弱性対策の必要性というのは、ある種地雷撤去作業と同じような人災だと思えてならない。
Ryzenを選んでおくべきだったか?
こういう問題に直面すると、昨年組んだ新PCに関して思うのは、Ryzenで組んでおくべきだったか? という疑問である。
Ryzenでも「Specter」の影響は受けるものの、少なくとも「Meltdown」の影響は受けないわけで、マイクロコードの更新が行われた場合の性能低下具合は、どう見てもAMD製CPUの方が被害は少なくて済みそうである。
もし仮にそうだったとして、これらの対策であるマイクロコードの更新を実施した後、Intel製CPUとAMD製CPUのベンチマークを比較したとき、今まであったIntel製CPUの優位性はどれぐらい揺らぐものなのだろうか?
第8世代のCoffee Lakeで6%の性能低下だとすると、今まで持ち合わせていた優位性の結構な比率を奪われる事になるような気がする。
逆にRyzenは今回の問題での性能低下率は低いと見られるし、Ryzenが持っていた元々のアドバンテージにも変化はないとすると、かなりIntel製CPUの性能に肉薄するのではないかと思えるのである。
もちろん、Intel製にもAMD製にもそれぞれの得手不得手があるので、特徴に違いは出てこないとは思うが、性能比は前述の通りかなり近づくような気がする。
となると、私があえてIntel製を選んだ理由がまるでなくなるような気がして、実に「なんだかなー」状態である。
ここらへん、最終的な比較ベンチを実施するサイトとか現れるといいなぁと思う。
実用上は…
ただ、そうは言っても恐らく実用上は何の違いも感じないのではないかと思う。
特にIntel製CPUの第8世代の場合、演算能力への影響よりもストレージへのアクセス等に若干の性能低下が見られるとの事で、特に重い処理となるゲーム等にはほとんど影響がないらしい。
なので、私が気にするほどの影響はまずない、というのが実情のようなので、重箱の隅をつつくような事を考えない限りは、気にする必要は無い。
ただ、だからといって放置していて良いものでもないのも事実で、どこかのタイミングでは対策するしかない。
また…これはふざけた考え方かもしれないが、そもそも今回の脆弱性対策は、大きく問題となる前に発覚し、対策が進んでいる事なので、この脆弱性を使った悪意あるプログラムが世界に広まる可能性はないかもしれない。
そうなれば、個人レベルで対策しなくても影響はないかもしれない。性能が落ちる事を嫌うなら、あえて対策しないというのもアリかもしれない。
しかし、もちろんこの対策しないという方向性はとても大きなリスクを背負う事になるので、情報が抜かれる事を覚悟した上での話になる。できれば選択したくない、してはいけない答えと言える。
ただ、Intel CPUの場合のHaswell以前の人からすると、場合によって2割近くも性能が低下する可能性があるとなれば、考えたくもなる話である。
どちらにしても、私の場合はCoffee Lakeなので対策しても低下する性能は6%程度なので、対策は今後進めていこうと思う。