stressapptest 其是:Stressful Application Test (stressapptest) 的简称
Stressful Application Test试图让来自处理器和I/O到内存的数据尽量随机化,以创造出模拟现实的环境来测试现在的硬件设备是否稳定,Google就在使用它,现在是Apache 2.0许可,这里有介绍、安装向导和指南(http://code.google.com/p/stressapptest/wiki/InstallationGuide)。不过连接可能被墙,要用代理上。
其大概如下:
stressapptest may be used for various purposes:
- Stress test: as described here. 压力测试
- Hardware qualification and debugging. 硬件检查和调试
- Memory interface test: see the Theory behind this. 内存接口测试
- Disk testing. 磁盘测试
据谷歌的介绍,这个软件会生产线程来拷贝和直接对磁盘进行读取和写入。目标则是尽可能地载入系统内存,以便更加有效地进行测试。该软件更多的时候测试的是内存控制器和总线接口,而不是存储单元的功能。谷歌称,与其他内存诊断程序的比较,五分之一的内存模块相关的系统误差只能通过stressapptest发现。
Background
Many hardware issues reproduce infrequently, or only under corner cases. The theory being used here is that by maximizing bus and memory traffic, the number of transactions is increased, and therefore the probability of failing a transaction is increased. 这个测试会最大化总线和内存的交换量,从而交换失败的概率也会增加。
Overview
stressapptest is a userspace test, primarily composed of threads doing memory copies and direct IO disk read/write. It allocates a large block of memory (typically 85% of the total memory on the machine), and each thread will choose randomized blocks of memory to copy, or to write to disk. Typically there are two threads per processor, and two threads for each disk. Result checking is done as the test proceeds by CRCing the data as it is copied. 该软件采用多线程对内存进行拷贝和磁盘接口读写,占用了85%的内存块,而且每个线程都是随机进行的读写操作,一般每个处理器2个线程,磁盘也是;
Downloading it
stressapptest can be download at http://code.google.com/p/stressapptest/downloads
Detailed Design
The code is structured fairly simply: 代码结构简单
- A large amount of memory is allocated in a single block (default is 85% of physical memory size). 每个数据块都占用到了大量内存资源
- Memory is divided into chunks, each filled with a potentially stressful data pattern. 内存被分成了许多块,每块都覆盖了对应大量的数据;
- Worker threads are spawned, which draw pages from an "empty" queue and a "valid" queue, and copy the data from one block to the other.
- Some threads memory copy the data. 一些线程负责数据拷贝
- Some threads invert the data in place. 一些线程负责数据插入
- Some threads write the data to disk, and read it to the new location. 一些线程负责数据写入和读出
- After the specified time has elapsed, all "valid" pages have their data compared with the original fill pattern. 超过设定的时间,就会与初始数据进行比较
Caveats 警告
This test works by stressing system interfaces. It is good at catching memory signal integrity or setup and hold problems, memory controller and bus interface issues, and disk controller issues. It is moderately good at catching bad memory cells and cache coherency issues. It is not good at catching bad processors, bad physical media on disks, or problems that require periods of inactivity to manifest themselves. It is not a thorough test of OS internals. The test may cause marginal systems to become bricks if disk or memory errors cause hard drive corruption, or if the physical components overheat.
该软件在测试系统接口方面比较好,可以评估一些内存信号完整性或内存芯片,接口总线及磁盘方面的情况;但是对已经损坏的处理器,物理存储设备不具有检查功能,在该条件下测试,可能会导致系统或驱动崩溃,以及芯片过热。
Security Considerations
Someone running stressapptest on a live system could cause other applications to become extremely slow or unresponsive. 测试中会导致系统反应变慢
Logged information
stressapptest can output a logfile of miscompares detected during its execution. stressapptest cannot yet log reboot failures, or other failures not visible to user space.
整个执行过程可以输出日志记录文件。
下面介绍下其简单的使用过程,由于本人使用的平台不是很支持该软件,所以具体的其它功能和详细说明不好书写和记录。
1、下载该文件包:stressapptest_1.0.4.orig.tar.gz
2、tar -xvf stressapptest_1.0.4.orig.tar.gz
3、进入该文件夹然后:
<span class="pun">./</span><span class="pln">configure
make
sudo make install</span>
配置过程中可能会报错,缺少某些库,例如: libaio.a, librt.a (libaio.a: libaio-dev librt.a: libc6-dev);只需在网上查找下对应的库文件,然后连网更新下载便可,然后再编译,一般都可以通过;
也有可能cpu支持不同,如出现下述情况:
- root@LOonux:~/test/stressapptest-1.0.4
- Making all in src
- make[1]: 正在进入目录 `/root/test/stressapptest-1.0.4/src'
- make all-am
- make[2]: 正在进入目录 `/root/test/stressapptest-1.0.4/src'
- g++ -DHAVE_CONFIG_H -I. -DCHECKOPTS -Wreturn-type -Wunused -Wuninitialized -Wall -Wno-psabi -O3 -funroll-all-loops -funroll-loops -DNDEBUG -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cc
- In file included from finelock_queue.h:29,
- from sat.h:28,
- from main.cc:18:
- os.h:131:4: warning:
- os.h:161:4: warning:
- mv -f .deps/main.Tpo .deps/main.Po
- g++ -DHAVE_CONFIG_H -I. -DCHECKOPTS -Wreturn-type -Wunused -Wuninitialized -Wall -Wno-psabi -O3 -funroll-all-loops -funroll-loops -DNDEBUG -MT os.o -MD -MP -MF .deps/os.Tpo -c -o os.o os.cc
- In file included from os.cc:21:
- os.h:131:4: warning:
- os.h:161:4: warning:
- os.cc:165:2: warning:
- mv -f .deps/os.Tpo .deps/os.Po
目前支持的类型应该有下述三种,否则编译出错:
- case x"$target_cpu" in
- "xx86_64")
-
- $as_echo "#define STRESSAPPTEST_CPU_X86_64 /**/" >>confdefs.h
-
- ;;
- "xi686")
-
- $as_echo "#define STRESSAPPTEST_CPU_I686 /**/" >>confdefs.h
-
- ;;
- "xpowerpc")
-
- $as_echo "#define STRESSAPPTEST_CPU_PPC /**/" >>confdefs.h
-
- ;;
- "xarmv7a")
安装完成后,运行该软件,可得记录日志如下:
例如 测试1200M大小的内存,测试300000秒的时间
- Log: Commandline - ./stressapptest -M 1200 -s 300000
- Stats: SAT revision 1.0.1_autoconf, 32 bit binary
- Log: root @ RAYS-0bedc0f6 on Sun Mar 14 18:59:09 UTC 2010 from open source release
- Log: 1 nodes, 4 cpus.
- Log: Defaulting to 4 copy threads
- Log: Flooring memory allocation to multiple of 4: 1200MB
- Log: Using memaligned allocation at 0x2b4d9000.
- Stats: Starting SAT, 1200M, 300000 seconds
- Log: Region mask: 0x1
- Log: Seconds remaining: 299990
- Log: Seconds remaining: 299980
- Log: Seconds remaining: 299970
- Log: Seconds remaining: 299960
- Log: Seconds remaining: 299950
- Log: Seconds remaining: 299940
- Log: Seconds remaining: 299930
- Log: Seconds remaining: 299920
- Log: Seconds remaining: 299910
- Log: Seconds remaining: 299900
- Log: Seconds remaining: 299890