2012年12月28日 星期五

Memory Testing utility.

目前我們換了 Hynix 200 mDDR , 跑起來還算正常 , 只是 RTC-only mode 進入 suspend 後 卻沒有辦法 resume , suspend 前我將 resume 的 phy address 內容 printk 出來和 warn reset 後將 mDDR 中 的對應值 printf 出來比對 , 發現相同 (前 5 個 word) .

猜想說是否 , mDDR 的 timing 有問題 , 所以找個 memory 的壓力測試程式來跑跑看吧 !!

尋找了一下 , GNU 有 memtester , 並且是 open source ... 就用這個吧 !!
http://pyropus.ca/software/memtester/

Download 後需要移植到ARM上 ,
其實很簡單 , 修改 conf-cc & conf-ld 兩個檔案內容即可.
將 cc 改成對應的 Cross-compiler 即可.

另外猜想 , mDDR 連續 Access 時候耗電比較大 , Idle 時候耗電比較小 ,
所以稍微修改一下在 每個測試項目結束的時候進行 usleep , 讓耗電減少 , 看看能不能
測出 mDDR 輕載和重載 過程導致 電源不穩定.

執行結果如下:

[root@jeff :/bin]# memtester 100
memtester version 4.3.0 (32-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffff000
want 100MB (104857600 bytes)
got  100MB (104857600 bytes), trying mlock ...locked.
Loop 1:
  Stuck Address       : ok        
  Random Value        : ok       Sleep 92mS
  Compare XOR         : ok       Sleep 187mS
  Compare SUB         : ok       Sleep 246mS
  Compare MUL         : ok       Sleep 20mS
  Compare DIV         : ok       Sleep 187mS
  Compare OR          : ok       Sleep 84mS
  Compare AND         : ok       Sleep 205mS
  Sequential Increment: ok       Sleep 232mS
  Solid Bits          : ok       Sleep 122mS
  Block Sequential    : ok       Sleep 146mS
  Checkerboard        : ok       Sleep 70mS
  Bit Spread          : ok       Sleep 163mS
  Bit Flip            : ok       Sleep 27mS
  Walking Ones        : ok       Sleep 133mS
  Walking Zeroes      : ok       Sleep 147mS
  8-bit Writes        : ok       Sleep 12mS
  16-bit Writes       : ok       Sleep 208mS