[root@sylixos:/root]# free
heap show >>
HEAP TOTAL USED MAX USED SEGMENT USED
-------------- ---------- ---------- ---------- ------- ----
kersys 1302549KB 305619KB 306644KB 1988 23%
vmm physical zone show >>
ZONE PHYSICAL SIZE PAGESIZE PGD FREEPAGE DMA USED
---- ---------------- ------------ -------- ---------------- -------- ----- ----
0 b1700000 3400000 1000 90e88000 10900 true 18%
1 b4b00000 26500000 1000 90e88000 156765 false 0%
2 2000000000 180000000 1000 90e88000 1572864 false 0%
ALL-Physical memory size: 8104MB
VMM-Physical memory size: 6809MB
VMM-Physical memory free: 6798MB
[root@sylixos:/root]#
free命令可得内存最大可用6798MB,./memtester 第一个参数表示测多大内存(单位可以是G、M、K、B),第二个参数表示测试次数。
(测试内存大小建议是VMM-Physical memory free大小的40%)
测试结果:
memtester-4.3.0 | memtester-ARM |
---|---|
int test_stuck_address(bufa, count); | (√ ) 先全部把地址值交替取反放入对应存储位置,然后再读出比较,重复2次(官网的重复了16次):测试address bus |
int test_random_value(bufa, bufb, count); | (√ )等效test_random_comparison(bufa, bufb, count):数据敏感型测试用例 |
int test_xor_comparison(bufa, bufb, count); | (-) 与test_random_value比多了个异或操作,用户场景之一,用例覆盖。数据敏感/指令功能验证,同时可验证SAF; |
int test_sub_comparison(bufa, bufb, count); | (-)与test_random_value比多了个减法操作,用户场景之一,用例覆盖。数据敏感/指令功能验证,同时可验证SAF; |
int test_mul_comparison(bufa, bufb, count); | (-)与test_random_value比多了个乘法操作,用户场景之一,用例覆盖。数据敏感/指令功能验证,同时可验证SAF; |
int test_div_comparison(bufa, bufb, count); | (-)与test_random_value比多了个除法操作,用户场景之一,用例覆盖。数据敏感/指令功能验证,同时可验证SAF; |
int test_or_comparison(bufa, bufb, count); | (√ )在test_random_comparison()里面合并了,用户场景之一,用例覆盖。数据敏感/指令功能验证,同时可验证SAF; |
int test_and_comparison(bufa, bufb, count); | (√ )在test_random_comparison()里面合并了,用户场景之一,用例覆盖。数据敏感/指令功能验证,同时可验证SAF; |
int test_seqinc_comparison(bufa, bufb, count); | (√ )这是 test_blockseq_comparison的一个子集;模拟客户压力测试场景。 |
int test_solidbits_comparison(bufa, bufb, count); | (√ )固定全1后写入两个buffer,然后读出比较,然后全0写入读出比较;这就是Zero-One算法,Breuer & Friedman 1976 ,检测SAF的,算法是{w0,r0,w1,r1}时间复杂度是4N,又叫做MSCAN,验证每个cell能读写,间接测试了stuck at fault |
int test_checkerboard_comparison(bufa, bufb, count); | (√ )把设定好的几组Data BackGround,依次写入,然后读出比较 (注:论文里说设计良好的Data background可以检测出state coupling faults时间复杂度是4N,这是验证相邻位置是否互相影响从而设计的用例。 |
int test_blockseq_comparison(bufa, bufb, count); | (√ )一次写一个count大小的块,写的值是拿byte级的数填充32bit,然后取出对比,接着重复256次;也是压力用例,只是次数变多了; |
int test_walkbits0_comparison(bufa, bufb, count); | (√ )就是bit=1的位置在32bit里面移动,每移动一次就全部填满buffer,先是从低位往高位移,再是从高位往低位移动,(这么做的目的是啥?其中的一个目的是检测NPSF其次是CFs,其次是数据敏感型异常检测,注这里是32bit的,还有8bit的粒度更细了) |
int test_walkbits1_comparison(bufa, bufb, count); | (√ )与上同理,另注:早memtester86中这个算法叫做moving inversions algorithm |
int test_bitspread_comparison(bufa, bufb, count); | (√ )还是在32bit里面移动,只是这次移动的不是单单的一个0或者1,而是两个1,这两个1之间隔着两个空位,(是临近耦合异常的一种data pattern变体:两个1之间间隔1个位置,然后同步移动) |
int test_bitflip_comparison(bufa, bufb, count); | (√ )也是32bit里面的一个bit=1不断移动生成data pattern然后,每个pattern均执行:{取反交替写入a、b缓冲区,写完之后检查一遍,然后不断重复以下步骤八次{用八个DMA从a缓冲区搬数据到b缓冲区,并行搬,模拟短时间内反复读写同一位置看是否有数据丢失异常}}核心思想:短时间内反复读写同一位置。 |
int test_8bit_wide_random(bufa, bufb, count); | (√ )以char指针存值,也就是每次存8bit,粒度更细; |
int test_16bit_wide_random(bufa, bufb, count); | (√ )以unsigned short指针存值,也就是每次存16bit,不同粒度检测; |
int test_crosstalk_comparison(bufa, bufb, count); | [32个0,接着32bit里面1个0移动]以这样的模型叠加写入内存;(只有上行,没像有moving inversions algorithm一样进行反转) |