33

入手可能なほとんどのデスクトップ (安価な) x86 プラットフォームは、現在も ECC メモリのサポートを行っていません (エラー チェックと修正)。しかし、メモリ ビット フリップ エラーの割合は依然として増加しています (最適な SO スレッドではありません。大規模な CERN 2007 調査「データの整合性」 : 「メモリ モジュールのビット エラー率 10 -12 ... 観察されたエラー率は 4 桁です。予想よりも低い大きさの "; 2009 Google の"DRAM Errors in the Wild: A Large-Scale Field Study" )。データ集約型の負荷 (8 GB/秒の読み取り) を伴う現在のハードウェアの場合、これは、1 分ごと ( CERN07 からの10 -12ベンダー BER) または 2 日に 1 回 (10 -16CERN07 からの BER)。Google09 によると、Mbit あたり最大 25000 ~ 75000 の 1 ビット FIT (10 億時間あたりの時間の失敗) が存在する可能性があり、これは 8 GB の RAM で 1 時間あたり 1 ~ 5 ビット エラーに相当します (「2000 の修正可能なエラー率を意味します。年間 1 GB あたり 6000 ")。

それで、私が知りたいのは、システム全体の方法である種のソフトウェアエラー検出を追加することは可能ですか(ユーザーメモリとカーネルメモリの両方を確認してください)。たとえば、Linux カーネルお​​よび/またはシステム コンパイラ用のパッチを作成して、すべてのメモリ ページのチェックサムを追加し、定期的にチェックサムを再計算してサイレント メモリ破損 (ビット フリップ) を検出しようとしますか?

たとえば、意図したメモリ変更とメモリ内ビット フリップを区別するために、(ユーザー空間とカーネル空間の両方からの) メモリへのすべての書き込みを確認できますか? または、ヘルパーを使用してすべてのコードをインストルメント化できますか?

どのような種類のソフトウェア メモリ ECC もパフォーマンスに多大なコストがかかる可能性があり、すべてのエラーをキャッチするわけではないことは理解していますが、少なくともいくつかのメモリ ビット フリップを早い段階で検出すると、後の計算で再利用したり保存したりする前に役立つと思います。ハードドライブへ。

また、メモリのビットフリップからデータを保護するためのより良い方法は、ECC ハードウェアに切り替えることだと理解していますが、ほとんどの PC はまだ非 ECC です。

4

2 に答える 2

5

事は、ECCは「ソフトウェアECC対策」と比較して非常に安価です。それらが ECC モジュールを持っているかどうかを簡単に検出し、そうでない場合に不平を言う (または警告を出力する) ことができます。

http://www.cyberciti.biz/faq/ecc-memory-modules/

たとえば、意図したメモリ変更とメモリ内ビット フリップを区別するために、(ユーザー空間とカーネル空間の両方からの) メモリへのすべての書き込みを確認できますか? または、ヘルパーを使用してすべてのコードをインストルメント化できますか?

ええと、バスのビットフリップを「見る」ことは決してありません。それらは文字通り、パーティクルが RAM に衝突し、少し反転することによって引き起こされます。ずっと後になって、書き込んだものとは異なるものを読み込んだことに気付くことができます。これをバス経由でのみ検出するには、すべての RAM の複製コピーが必要になります (つまり、実際の RAM にあるもののシャドウ コピーを作成するため、すべての読み取りがその場所に書き込まれたものを返すことを確認できます。)

チェックサムを定期的に再計算して、サイレントメモリ破損 (ビットフリップ) を検出しようとしていますか?

Redis の担当者は、RAM の問題をテストするためのアルゴリズムについて素晴らしい記事を書いています。http://antirez.com/news/43 しかし、これはランダムなビット反転ではなく、実際には RAM エラーを探しています。

「チェックサムの再計算」は、メモリに書き込んでいない場合にのみ機能します。それは「十分」かもしれませんが、どのページが書き込まれていないかを把握する必要があります。

エラーの 100% をキャッチするには、すべての書き込みの前に、そのメモリ ブロックのチェックサムを計算し、それを記録されたチェックサムと比較する必要があります (ブロックが RAM で劣化していないことを確認するため)。その場合にのみ、書き込みを行ってからチェックサムを更新しても安全です。ご想像のとおり、これのパフォーマンスはひどいものになります (少なくとも 100 倍遅くなります)。

どのような種類のソフトウェア メモリ ECC もパフォーマンスに多大なコストがかかる可能性があり、すべてのエラーをキャッチできないことは理解していますが、少なくともいくつかのメモリ ビット フリップを早い段階で検出すると、後の計算で再利用したり保存したりする前に役立つと思います。ハードドライブへ。

50% のパフォーマンスを犠牲にして、100% のエラーを検出する簡単な方法があります。一度に 2 つのボックスで計算を実行するだけです (または、1 つのボックスで 2 つの異なる時間に計算を実行します。結果が異なる場合は、エラーが検出されています。

以下も参照してください。

https://www.linuxquestions.org/questions/linux-hardware-18/how-to-detect-ecc-memory-errors-under-linux-886011/

于 2014-06-18T15:55:34.100 に答える