私は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
mc0
781440は、メモリコントローラによって1秒あたりにクリーンアップされたバイト数で、要求された1000000に最も近い値に量子化されます。