先週、AMD の Bypass Translation Buffer (TLB) バグとクアッドコア Opteron チップへの影響について多くの報告がありました。海外メディアの報道によると、AMD は既知の 64 ビット Red Hat Enterprise Linux 用のカーネルを準備しているとのことです。アップグレード 4. パッチとして。パフォーマンスが10~20%低下すると報告されているAMDのBIOS(基本入出力システム)修正やマイクロコードアップデートとは異なり、Linuxパッチのパフォーマンス低下は1%未満と言われている。ただし、パッチを入手するにはユーザーが機密保持契約に署名する必要があることもわかりました。
状況の確認後、AMDはパッチのソースコードをx86-64.orgメーリングリストに公開した。ただし、このコードは現在の状況に基づいているため変更されず、主流のシステムには完全には適していないという別の警告が表示されます。
このパッチの強力な侵入性と、影響を受けるユーザーの数が非常に少ないため (システムの一部が影響を受けるとわかります)、通常の Linux システムでこのパッチを使用することはお勧めしません。このパッチはメインストリーム ユーザーを対象としたものではなく、販売用の Linux 製品でもありません。このパッチには最小限の機能テストが行われています。各ユーザーは使用前に評価して、必要な品質基準を満たしていることを確認する必要があります。
AMD従業員のElsie Wahlig氏も、同じメーリングリストに以前公開された投稿で、このパッチは「アップストリーム製品には推奨されない」と警告した。 Wahlig 氏は、このパッチは AMD のオペレーティング システム リサーチ センター グループによって Linux 2.6.23.8 向けに開発されたものであり、エラーの詳細な説明を提供したと述べました。
エラー 298 の説明は次のとおりです: 「プロセッサーの操作がアトミックではない可能性があり、ページ変換テーブル エントリーのアクセスされたバイトまたはダーティ バイトが 2 次キャッシュのアドレス 0b から 1b に変更されます。短い時間間隔内に、他のキャッシュ操作が行われます。」さらに、この間隔中にキャッシュ ラインが検出された場合、プロセッサはアクセスされたデータに対して無関係なキャッシュ操作を実行しません。ダーティ バイト、および誤ったデータの可能性があり、システムはマシン検出イベントを通じてレベル 3 キャッシュ プロトコル エラーを報告する可能性があります。この場合、レジスタ (MSR 0000_0410) の内容は B2000000_000B0C0F になります。 MC4 アドレス レジスタ (MSR 0000_0412) は 26h になります。
Wahlig 氏は、Linux パッチがどのように機能するかについて説明しました。このパッチは BIOS ワークスペースをバイパスし、「アクセスされたダーティ バイト」をエミュレートして、誤ったデータがファイル ヘッダーを構築するのを防ぎます。
カーネル パッチの解決策は、L2 キャッシュの削除問題の根本原因によって異なります。この問題は、TLB がページ テーブル エントリに A または D ビットを設定する必要がある場合にのみ明らかになります。 TLB が A または D ビットを設定する必要がない場合、エラーは発生しません。現在書き込み可能なビットを使用して A ビットと D ビットをエミュレートすることにより、パッチは実際の A ビットと D ビットが確実にプリセットされるようにします。これは、エミュレーション A ビットが設定されていないページに最初にアクセスしたとき、およびエミュレーション D ビットが設定されていない書き込み可能なページに最初に書き込みアクセスしたときに、エラー ページを強制することによって実現されます。シミュレートされた A ビットと D ビットはビット レジスタに格納され、通常はオペレーティング システムでページ テーブル エントリとして使用できます。
AMDは、当初の予想よりも気の利いた声明でパッチの発行を停止したが、同社はBIOS修正によるパフォーマンス低下を避けるために、すべてのLinuxユーザーに「パス」を発行しなかった。