轉自:https://blog.csdn.net/vichie2008/article/details/50457566
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. 磁盤測試
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# make
- 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: #warning "Unsupported CPU type: Unable to force cache flushes."
- os.h:161:4: warning: #warning "Unsupported CPU type: your build may not function correctly"
- 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: #warning "Unsupported CPU type: Unable to force cache flushes."
- os.h:161:4: warning: #warning "Unsupported CPU type: your build may not function correctly"
- os.cc:165:2: warning: #warning "Unsupported CPU type: unable to determine feature set."
- 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