龙芯板卡内存压力测试方法
一、自动分配方式
推荐方法
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.sh与stressapptest放到一个目录下,修改执行权限 chmod 777 ddr.sh stressapptest
例如: 计划开5个进程,每个进程200M,测试1小时(3600秒),执行测试脚本./ddr.sh
为了保证内存压力达到最大,将
free -m
看到的空闲内存尽量全部用没!!!
./ddr.sh
备注:
- 如果出错程序会停止,错误信息会保存到err.log文件里
- 整个测试过程log信息保存到ddr.log里
- 测试完成如没有出错则打印:DDR test is OK