Ryzen SEGV Battle、原因の一端が解明される
タレコミ by Anonymous Coward
あるAnonymous Coward 曰く、
情報元へのリンク
RyzenでLinuxカーネルやgccを並列ビルドするとセグメンテーション違反が発生する場合がある問題がRyzen SEGV Battleと呼ばれて流行中だが、EIRAKU氏によるとSEGVの発生原因はインストラクションポインタから64バイトズレた位置の命令を実行してしまうことだそうだ。
PC向けCPUの開発競争に久しぶりに火をつけたRyzenは、4月の時点で長時間の並列ビルドによりセグメンテーション違反や一般保護違反が発生する場合があることが発見され、AMDの公式を含む様々なフォーラムで議論を呼んでいた。回避策としてSMTやASLRの無効化が挙げられていたが、それでも起こったという人もおり、問題は解決していない。そんな中、EIRAKU氏はBitVisorというハイパーバイザで検証を行い、call命令を起点にインストラクションポインタから64バイト手前にある命令を実行してしまう現象を確認したそうだ。この現象の結果、ズレた位置にある命令が不正なアドレスにアクセスしセグメンテーション違反や一般保護違反が起こっていたらしい。64バイトはキャッシュラインサイズと一致しており、命令デコーダかL1命令キャッシュ、あるいはRyzenで新設されたμOPキャッシュ辺りに問題がある可能性が高く、Twitterではマイクロコードの更新で直るのか疑問視する意見もあった。
なお、AMDはこの件についてメディアを通じてのアナウンスはしておらず、コミュニティでの対応とサポートリクエストを発行した人に対する交換対応のみ行っている他、デスクトップ向けハイエンドのThreadripperやサーバー向け新CPUのEPYCを発表している。
情報元へのリンク
Ryzen SEGV Battle、原因の一端が解明される More ログイン