LinuxでECC RAMクリーンアップを有効にして確認するには?

LinuxでECC RAMクリーンアップを有効にして確認するには?

私はECC RAMを含む最初のシステムを購入し、Linuxで警告と保守の可能性を理解しようとしました。より具体的に言えば、Debian LinuxスーパーマイクロH8SGLマザーボードにAMDオプテロン6386 SECPUとサムスンM393B2G70QH0-YK0DDR3 ECCメモリ。

できることを学んだミサイル発射停止ECC RAM、良いアイデアのようです。 ECC RAMが正常に動作します。修理する1ビットエラーの合計発覚2ビットエラー。クリーンアップには、定期的にRAMを読み取って1ビットエラーが最終的に2ビットエラーになる前に修正することが含まれます。

また、Linuxでこの機能をサポートしていることもわかりましたが、使用に問題があるため、起動して設定を理解するのに役立ちます。

Linux EDACドライバ

私が理解したところ、LinuxはEDACというサブシステムを使用してECC RAMを処理します/sys/devices/system/edac/。ここでは、2つのメモリコントローラ(2ノードNUMA)を見ることができます。

# ls /sys/devices/system/edac/mc/
mc0  mc1  power  subsystem  uevent

また、EDACドライバが何とか読み込まれていることがわかります。

# edac-util --status
edac-util: EDAC drivers are loaded. 2 MCs detected
# lsmod | grep edac
amd64_edac_mod         36864  0
edac_mce_amd           28672  1 amd64_edac_mod

今スクラブを有効にしたいと思います。 ~によるとLinux ABI ドキュメント清掃率は文書を通じて公開され、/sys/devices/system/edac/mc/mc*/sdram_scrub_rate次のように記録されます。

メモリコントローラで使用されるスクラブ速度は、プロパティファイルに最小帯域幅(バイト/秒)を書き込むことによって設定されます。レートは、少なくとも指定されたレートを提供する内部値に変換されます。ファイルを読み取ると、使用された実際のスクラブ速度が返されます。設定が失敗した場合、またはメモリクリーンアップが実装されていない場合、プロパティファイルの値は-1です。

しかし、これを行うと何も起こりません。適切な値を使用してください(確認するときは途中)源泉そしてCPUドキュメント)をファイルに追加するとうまくいくようですが、0ファイルを読み取ると常に次のように返されます。

# cat /sys/devices/system/edac/mc/mc0/sdram_scrub_rate
0
# echo 1000000 >/sys/devices/system/edac/mc/mc0/sdram_scrub_rate
# echo $?
0
# cat /sys/devices/system/edac/mc/mc0/sdram_scrub_rate
0

そう深く掘り下げて、私が何を逃したのか?

BIOS ECCの設定

BIOSで他の設定も試しました。 BIOSにはECCを設定するオプションがありますが、Linuxに表示されるスクラブ速度には影響しません。

ここに画像の説明を入力してください。

これで設定を試していますが、2つUserの違いを実際に見ることはできません。

ベストアンサー1

カーネルエラーです

これがコントロールの設定方法ですが、このCPUのハードウェア読み取り値が常にゼロを返すようにするカーネルバグがあります。

修理するこれに対する修正は待機していますが、いつメインカーネルに適用されるかはわかりません。そのような場合は、回答を更新できます。

パッチを適用した後、質問に使用されたコマンドの出力は次のとおりです。

# echo 1000000 >/sys/devices/system/edac/mc/mc0/sdram_scrub_rate
# echo $?
0
# cat /sys/devices/system/edac/mc/mc0/sdram_scrub_rate
781440

mc0781440は、メモリコントローラによって1秒あたりにクリーンアップされたバイト数で、要求された1000000に最も近い値に量子化されます。

おすすめ記事