Ryzenで発生しているSEGV問題、原因はCPUのキャッシュ?
2017年6月24日 12:29
あるAnonymous Coward 曰く、 AMDの新CPU「Ryzen」でLinuxカーネルやgccをビルドするとセグメンテーション違反が発生する場合がある問題が確認されている。これはRyzen SEGV Battleと呼ばれて流行中だが、EIRAKU氏によるとSEGVの発生原因はインストラクションポインタから64バイトズレた位置の命令を実行してしまうことだそうだ。
この問題についてはsatoru_takeuchi氏による「Ryzenにまつわる2つの問題」という記事が詳しいが、再現性が低く、また確実な対処方法も判明していないという状況であった。
EIRAKU氏はBitVisorというハイパーバイザで検証を行い、call命令を起点にインストラクションポインタから64バイト手前にある命令を実行してしまう現象を確認したそうだ。この現象の結果、ズレた位置にある命令が不正なアドレスにアクセスしセグメンテーション違反や一般保護違反が起こっていたという。この64バイトという数値はキャッシュラインサイズと一致しており、命令デコーダかL1命令キャッシュ、あるいはRyzenで新設されたμOPキャッシュ辺りに問題がある可能性が高く、Twitterではマイクロコードの更新で直るのか疑問視する意見もあった。
なお、AMDはこの件について現時点ではメディアを通じてのアナウンスはしておらず、コミュニティでの対応とサポートリクエストを発行した人に対する交換対応のみ行っている。