龙芯板卡内存压力测试方法

一、自动分配方式

推荐方法

1.1 准备工作:

  • 创建文件夹ddr
    a、mkdir ddr b、cd ddr
  • ddr目录下准备三个文件和一个结果目录,分别是:README.txt、run、 stressapptest 文件和 result 目录
  • 操作如下:
    a、创建结果目录 mkdir result b、创建帮助信息vim README.txt 内容如下
    c、创建执行脚本vim run 内容如下
    d、获取 stressapptest 文件,提取码:bti9

1.2 帮助信息README.txt

下内存压力测试程序说明
操作流程:

  • 启动到系统下,打开终端,进入超级用户下 sudo -i
  • 修改权限 chmod +x run
  • 开始测试,执行 ./run time
    备注:参数time 单位是秒, 不带参数直接运行 ./run 默认是3600s
    脚本运行内容:将系统剩余的内存容量的90%进行压力测试,总共开10进程
  • 运行后,每间隔60s 检测一次是否有错误,如果出错立即停止
  • 结果保存到当前result目录里

结果:

  • 测试成功:
    终端下打印 "DDR test is OK ^_^ "。
  • 测试失败:
    终端下打印 “DDR test is error!!!”。 ,错误日志保存到当前目录下。

1.3 脚本文件run

#!/bin/bash

filestr=$(pwd)/result/
time=$(date +"%Y%m%d-%H%M%S")
logname="ddr-$time.log"
tmpname="tmp-$time.log"
errname="err-$time.log"

pwdfile=$filestr$logname    #存储log
errfile=$filestr$errname    #存储err
tmpfile=$filestr$tmpname    #临时文件

# 定义一个函数来处理Ctrl+C信号  
myexit() {  
	pkill -9 stressapptest
	# 关闭脚本本身  
	rm $tmpfile $errfile -rf
    exit 1  
}  
  
setterm -blank 0

check=60                    #检测间隔

# 获取剩余内存大小(单位:字节)  
freemem=$(free -m | awk 'NR==2{print $4}')  
# 计算10个进程,每个进程测试的大小 
cont=10
testmem=$(echo "$freemem * 0.09" | bc)    

size=$(echo "$testmem" | cut -d '.' -f1)
  
# 判断传入的参数是否为数字  
if [[ $1 =~ ^-?[0-9]+$ ]]; then  
	#echo "参数是一个数字"  
	seco=$1
else  
	#echo "传入的参数不是一个数字"  
	seco=3600
fi

chmod 777 stressapptest

echo "Run cont:$cont stressapptest -M $size -s $seco" |tee -a  $pwdfile 
echo $(date) |tee -a  $pwdfile
echo "---------------------------------------------"  |tee -a $pwdfile
echo "---------------------------------------------"  |tee -a $pwdfile

for i in $(seq 1 $cont) 
do
	echo "OPEN stressapptest conts --->$i " |tee -a  $pwdfile
	./stressapptest -M $size -s $seco >> $pwdfile &
    sleep 1
done

# 注册 Ctrl+C 信号的处理函数  
trap myexit SIGINT  

sleep 10

free -m

for j in $(seq 1 $(($seco/$check))) 
do
    tail -2000  $pwdfile > $tmpfile
    grep "reread" $tmpfile > $errfile
	if [ $? -eq 0 ]; then
        rm $tmpfile -rf
		echo -------------------		|tee -a  $errfile
		echo -------------------		|tee -a  $errfile
		echo "DDR test is error!!!"		|tee -a  $errfile
		echo -------------------		|tee -a  $errfile
		echo -------------------		|tee -a  $errfile
        echo "Stressapptest is running for $(($j*$check)) seconds, DDR test is error!"  |tee -a  $errfile
		killall -9 stressapptest
		killall	sleep
        exit
	fi
    sleep $check
    echo "Stressapptest is running for $(($j*$check)) seconds"
done

sleep 60 

rm $tmpfile $errfile -rf

echo -------------------	|tee -a  $pwdfile
echo -------------------	|tee -a  $pwdfile
echo "DDR test is OK ^_^"	|tee -a  $pwdfile
echo -------------------	|tee -a  $pwdfile
echo -------------------	|tee -a  $pwdfile

二、 手动分配方式

1、 mips架构测试工具

http://ftp.loongnix.cn/embedd/others/stressapptest 备注: la架构从龙芯获取

2、创建执行脚本ddr.sh,内容如下:

#!/bin/sh

filestr="./"
logname="ddr.log"
tmpname="tmp.log"
errname="err.log"

pwdfile=$filestr$logname    #存储log
errfile=$filestr$errname    #存储err
tmpfile=$filestr$tmpname    #临时文件

check=60                    #检测间隔

while true
do
echo -n "Input Range: 1 ~ 25\n"
echo -n "Input number of processes: "
read line1
if [ $line1 -lt 25 ]; then
    if [ $line1 -gt 0 ]; then
        echo Enter value: $line1
		echo $line1 > $tmpfile
        break
    fi
fi
done

cont=$(cat $tmpfile)
echo "\n"

while true
do
echo -n "Input Range: 1 ~ 1000\n"
echo -n "Input -M parameter: "
read line1
if [ $line1 -lt 1000 ]; then
    if [ $line1 -gt 0 ]; then
        echo Enter value: $line1
		echo $line1 > $tmpfile
        break
    fi
fi
done

size=$(cat $tmpfile)
echo "\n"


while true
do
echo -n "Input Range: 1 ~ 1000000\n"
echo -n "Input -s parameter: "
read line1
if [ $line1 -lt 1000000 ]; then
    if [ $line1 -gt 0 ]; then
        echo Enter value: $line1
		echo $line1 > $tmpfile
        break
    fi
fi
done

seco=$(cat $tmpfile)
echo "\n"

echo "stressapptest -M $size -s $seco"

rm $pwdfile -rf

date > $pwdfile

for i in $(seq 1 $cont) 
do
	echo "OPEN stressapptest conts --->$i "
	./stressapptest -M $size -s $seco >> $pwdfile &
    sleep 1
done

sleep 10
echo "----------------------------------------------------------------\n"
echo "View remaining memory capacity:\n"
free -m
echo "----------------------------------------------------------------\n"

for j in $(seq 1 $(($seco/$check))) 
do
    tail -2000  $pwdfile > $tmpfile
    grep "reread" $tmpfile > $errfile
	if [ $? -eq 0 ]; then
        rm $tmpfile -rf
		echo "DDR test is error!!!"
        echo "Stressapptest is running for $(($j*$check)) seconds, DDR test is error!" >> $errfile
		killall -9 stressapptest
		killall	sleep
        exit
	fi
    sleep $check
    echo "Stressapptest is running for $(($j*$check)) seconds"
done

rm $tmpfile -rf

echo "DDR test is OK ^_^"

3、将ddr.shstressapptest放到一个目录下,修改执行权限 chmod 777 ddr.sh stressapptest例如: 计划开5个进程,每个进程200M,测试1小时(3600秒),执行测试脚本./ddr.sh

为了保证内存压力达到最大,将free -m 看到的空闲内存尽量全部用没!!!

./ddr.sh

stress内存压力测试 内存怎么压力测试_stress内存压力测试

备注:

  1. 如果出错程序会停止,错误信息会保存到err.log文件里
  2. 整个测试过程log信息保存到ddr.log里
  3. 测试完成如没有出错则打印:DDR test is OK