web-dev-qa-db-ja.com

ビットフリッピング-検出と理由

約1週間前、私は1つの非常に興味深い状況を経験しました。私はワークステーションを持っていました-AsusP5LD2マザーボードと4x 1GBの未登録DDR2キングストンメモリを備えた古いデスクトップ。その同じマシンは、かなり前のIIRC、12〜14か月前にパワーストロークの犠牲者でした。電源ストロークの時点で、PSUが揚げられ、HDDが故障しました。両方を交換し、memtestを含むテストを実行しましたが、すべて問題ないようでした。先週のある日、ファイルの一部に最近のデータの「破損」が見つかったときまで、ユーザーはこれに喜んで取り組んでいました。私は問題を調査し、マザーボードの障害に絞り込むことができました。ただし、「データ破損」はかなり興味深く、再現可能でした。

  • ローカルディレクトリから別のローカルディレクトリにテキストファイルをコピーし、両方のバージョン間でdiffを実行すると、ファイル内のランダムな場所で1ビットしか変更されませんでした。
  • このビットは常に8のうち6番目で、16進数のテキストエディタで表示されます。つまり、16進数の19は16進数の39になります。
  • この問題は、NFSマウントとローカルマウントにアクセスしているときに再現可能でした。他のクライアントから繰り返された同じ正確なテストは違いを生み出しませんでした。
  • rsync -avを使用してネットワーク経由でこのマシンからコピーしているときに、コマンドはCorrupted MAC on input. Disconnecting: Packet corruptで失敗しました。
  • 同じMBを試しましたが、メモリセットが異なります。
  • 別のAsusP5LD2MBに設定された古いメモリ-違いはありません。
  • memtestは24時間以上実行されました-単一のエラーは報告されていません。

テストの結論-使用されているメモリセットとデータの場所(ローカルまたはNFS)に関係なく、ビットフリッピングはこの正確なマシンでのみ発生します。

私のすべてのテストに基づくと、方程式に残っているコンポーネントはマザーボードとCPUだけです。

私の質問は次のとおりです。

  1. 何がビットフリッピングを引き起こし、それがどのように正確に起こるのですか?;
  2. それを検出する方法はありますか?;
  3. memtestが失敗したときに、それをテスト/プローブする方法は?

私はまだ面倒なマシンを社内に持っており、これについてもっと学ぶためにどんなテストも実行したいと思っています。

OSはUbuntuLucid 10.04、64ビットです。

編集 MB上のほとんどの(すべてではないにしても)コンデンサーは、平らではなく上に曲がっていることを忘れました。

3
grs

CPUがディスクコントローラやネットワークカードなどの周辺機器にアクセスする際の問題のように聞こえます。ノースブリッジの過熱である可能性があります。 CPUが高温になると、ノースブリッジはそれ以外の場合よりも高温になります。 CPUの過熱の可能性もあります。

Memtestの間、最小限のI/Oと最小限のCPU作業があります。

MBのほとんどの(すべてではないにしても)コンデンサーは、平らではなく上に曲がっていることを忘れました。

これにより、RAM、CPU、ノースブリッジなどのコンポーネントに供給されるDC電力が、負荷が上がるとノイズが発生します。これが問題の原因になりやすいと思います。マザーボードと言えます。引退する必要があります。

1
David Schwartz