hack のためのネタ帳, etc,,,

これまでの経緯

状況

dmesg を見てみると、前回の対応で kernel option に memmap を指定したことによって、
以下のように 10GiB...12GiB (= 0x28000000..0x2ffffffff) が除外されていることが確認出来た。
...
...
[    0.000000] e820: user-defined physical RAM map:
...
[    0.000000] user: [mem 0x0000000100000000-0x000000027fffffff] usable
[    0.000000] user: [mem 0x0000000280000000-0x00000002ffffffff] reserved
[    0.000000] user: [mem 0x0000000300000000-0x000000082edfffff] usable
...
...
[    0.000000] Early memory node ranges
...
[    0.000000]   node   0: [mem 0x0000000100000000-0x000000027fffffff]
[    0.000000]   node   0: [mem 0x0000000300000000-0x000000082edfffff]
...
...
[    0.000000] PM: Registered nosave memory: [mem 0x280000000-0x2ffffffff]
...
...

この状態で memterster をかけてみた。

memmap で除外した直前の領域を physical address 指定すると以下のようにエラーとなった。
$ sudo memtester -p 0x200000000 $((0x80000000))B
memtester version 4.3.0 (64-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 2048MB (2147483648 bytes)
failed to mmap /dev/mem for physical memory: Operation not permitted
physical address 指定して調査するには memmap で、未使用領域にしておく必要があるのかも?

memmap で除外した領域は以下のように physical address 指定出来た。
$ sudo memtester -p 0x280000000 $((0x80000000))B
memtester version 4.3.0 (64-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 2048MB (2147483648 bytes)
Loop 1:
  Stuck Address       : ok         
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
FAILURE: 0xb811430a1b1e68a7 != 0xb811430a1b1e68b7 at physical address 0x2b1523fb8.
  Compare MUL         :   Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : testing  12FAILURE: 0x00000000 != 0x00000010 at physical address 0x2b1523fb8.
  Block Sequential    : testing  14FAILURE: 0xe0e0e0e0e0e0e0e != 0xe0e0e0e0e0e0e1e at physical address 0x2b1523fb8.
  Checkerboard        : testing  52FAILURE: 0xaaaaaaaaaaaaaaaa != 0xaaaaaaaaaaaaaaba at physical address 0x2b1523fb8.
  Bit Spread          : ok         
  Bit Flip            : testing  33FAILURE: 0xffffffffffffffef != 0xffffffffffffffff at physical address 0x2b1523fb8.
  Walking Ones        : ok         
  Walking Zeroes      : testing  86FAILURE: 0x20000000000 != 0x20000000010 at physical address 0x2b1523fb8.
  8-bit Writes        : ok
  16-bit Writes       : ok

Loop 2:
  Stuck Address       : ok         
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : testing   6FAILURE: 0x00000000 != 0x00000010 at physical address 0x2b1523fb8.
  Block Sequential    : testing  35FAILURE: 0x2323232323232323 != 0x2323232323232333 at physical address 0x2b1523fb8.
  Checkerboard        : ok         
  Bit Spread          : ok         
  Bit Flip            : testing  52FAILURE: 0x00000040 != 0x00000050 at physical address 0x2b1523fb8.
  Walking Ones        : ok         
  Walking Zeroes      : testing  23FAILURE: 0x00800000 != 0x00800010 at physical address 0x2b1523fb8.
  8-bit Writes        : ok
  16-bit Writes       : ok

Loop 3:
  Stuck Address       : testing   4FAILURE: possible bad address line at physical address 0x2f1523fb8.
Skipping to next test...
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : testing  20FAILURE: 0x00000000 != 0x00000010 at physical address 0x2b1523fb8.
  Block Sequential    : testing   9
20171226_150714 くらいに開始し、上記、Loop 3 に突入したのがおおよそ 20171226_234816 くらいで、loop 3 の Compare SUB の時点で 20171226_2345433 くらい
上記の最終結果の時点で 20171227_001448 くらい
1 loop 当たり 4 時間 20 分強かかっているっぽい
結構な時間がかかる。

[0-9]+FAILURE ってのは FAILURE した回数かと思っていたのだが、どうも testing の方の回数っぽくって、
testing [0-9]+ が順次カウントアップして行って最後まで行くと ok となり、
FAILURE するとその時点で testing を打ち切って、その時点の testing の数値がそのまま残ってるっぽい雰囲気。
特定のテストパターンについてエラーが検出出来なかったループもあったりするので、
完全に壊れていると言うよりも、特定ビットが不安定な状態になっており、運が悪いと化けるという感じだろうか?
そのせいもあって memtest86+ では 0x2b1523fb8 以外のアドレスもエラー報告されていたが、memtester では 0x2b1523fb8 以外のアドレスが報告されない。
memtest86+ はスクロールアウトしてしまった結果を確認できなかったり、結果を export 出来なかったりというのが地味に辛いのだが、何か上手い方法はないものだろうか?

1 loop 当たりのラップタイムの計測考えると以下のようにした方が良さそう。
$ sudo bash -c 'while true; do time memtester -p 0x280000000 $((0x80000000))B 1; done'
$ sudo bash -c 'while true; do time memtester 16G 1; done'
なんか physical address 指定すると、しない場合に比べて進捗が凄く遅いんだけどなぜ???

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます