From 1699ed33d025a105dea39075c9597b907a97250e Mon Sep 17 00:00:00 2001 From: orangepi-xunlong <258384131@qq.com> Date: Fri, 7 Jul 2023 17:49:27 +0800 Subject: [PATCH] Add memtester.sh --- .../packages/bsp/common/usr/bin/memtester.sh | 190 ++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100755 external/packages/bsp/common/usr/bin/memtester.sh diff --git a/external/packages/bsp/common/usr/bin/memtester.sh b/external/packages/bsp/common/usr/bin/memtester.sh new file mode 100755 index 0000000..cd8ce3b --- /dev/null +++ b/external/packages/bsp/common/usr/bin/memtester.sh @@ -0,0 +1,190 @@ +#!/bin/sh + +# Memory Tester Scripts +# by KaKa +# version = date +VERSION="Fri Oct 19 11:56:57 CST 2007" +# trap for irruptions +#MEMTESTER=${PWD}/memtester +MEMTESTER=/usr/sbin/memtester +PPIDKILL=$$ +SIDKILL=$$ +trap "pkill -9 -P ${PPIDKILL};kill -9 $$" INT +trap "pkill -9 -P ${PPIDKILL};kill -9 $$" KILL +cat <<-EOF_vpps >&2 +Version: ${VERSION} +PID: $$ +PPIDKILL: ${PPIDKILL} +SIDKILL: ${PPIDKILL} +EOF_vpps +CORE_NUM=$(grep -i ^processor /proc/cpuinfo|wc -l) +MEMTESTERCOPY=${CORE_NUM} +MEM_TOTAL_K=$(awk '/^MemTotal/{print $2}' /proc/meminfo) +MEM_RESERVE_PERCENTAGE=$((1000*50/1024)) +MEM_RESERVED=$((MEM_TOTAL_K/1024*MEM_RESERVE_PERCENTAGE/1000)) +MEM_TOTAL_TOBETESTED=$((MEM_TOTAL_K/1024-MEM_RESERVED)) +MEM_PER_COPY=$((MEM_TOTAL_TOBETESTED/MEMTESTERCOPY)) +RUN_DURATION_TIME=0 +RUN_LOOPS=-1 +RUN_DURATION_TIME_FLAG=0 +RUN_LOOPS_FLAG=0 +DDPERCOPY_TIME=6s +LOGDIR=/root/memtester-log-${$} +mkdir -p ${LOGDIR} + +show_help () { + cat <&2 + Version: ${VERSION} + Usage: $(basename ${0}) + -r Directory: the root location of memtester binary file + -c NUMBER: the copies of memtester should be run + -m NUMBER: how many memory should be tested totally (in MB) + -t TIME: duration mode, how long will the tests go + -l NUMBER: loops mode,how many loops will each memtester should go + The option -t and -l are exclusive, which means tests could work + only with 1. duration mode or 2. loops mode + RUN 4 copies memtester with in 24 hours, to test total 4000 MB memory: + $(basename ${0}) -t 24h -c 4 -m 4000 + RUN 2 copies memtester with in 1 hours, to test total 4000 MB memory: + $(basename ${0}) -t 1h -c 4 -m 4000 + RUN 4 copies memtester with in 2 loops, to test total 3600 MB memory: + $(basename ${0}) -l 2 -c 4 -m 3600 + -V/-h/-H: show this info. +HELPEOF + exit 0 +} + +while getopts :c:m:t:l:r:p:hHVvx OPTION +do + case ${OPTION} in + c) + #echo "-c ${OPTARG}" + MEMTESTERCOPY=${OPTARG} + ;; + m) + #echo "-m ${OPTARG} MB" + MEM_TOTAL_TOBETESTED=${OPTARG} + MEM_RESERVED=$((MEM_TOTAL_K/1024-MEM_TOTAL_TOBETESTED)) + ;; + t) + #echo "-t ${OPTARG}" + [ 0 -ne ${RUN_LOOPS_FLAG} ] && echo "-t and -l are exclusive." && exit 222 + RUN_DURATION_TIME=${OPTARG} + RUN_DURATION_TIME_FLAG=1 + ;; + l) + #echo "-l ${OPTARG}" + [ 0 -ne ${RUN_DURATION_TIME_FLAG} ] && echo && echo "-t and -l are exclusive." && show_help && echo && exit 223 + RUN_LOOPS=${OPTARG}; + RUN_LOOPS_FLAG=1 + ;; + d) + #echo "-r ${OPTARG}" + MEMTESTER=${OPTARG}/memtester + ;; + p) + #echo "-p ${OPTARG}" + MEMTESTER=${OPTARG} + ;; + V|h|H) + show_help + ;; + v) + set -v + ;; + x) + set -x + ;; + ?) + echo "Error..."; + echo "?Unknown args..." + exit 224 + ;; + *) + #echo "*Unknown args..." + esac +done + #exit +[ 0 -eq ${RUN_DURATION_TIME_FLAG} ] && [ 0 -eq ${RUN_LOOPS_FLAG} ] && +echo && echo "Please specified which mode should we run... -t or -l" && +show_help && echo && exit 225 +MEM_PER_COPY=$((MEM_TOTAL_TOBETESTED/MEMTESTERCOPY)) + echo "Mem total: " $((MEM_TOTAL_K/1024)) MB + echo "Core total: "${CORE_NUM} + echo "Memtester copys: " ${MEMTESTERCOPY} + echo "Mem per copy: "${MEM_PER_COPY} + echo "Mem total to used: "${MEM_TOTAL_TOBETESTED} MB + if [ ${MEM_RESERVED} -lt 1 ]; then + echo "Mem reserved: -- No more memory reserved..." + else + echo "Mem reserved: "${MEM_RESERVED} MB + fi + #exit + # GOGOGO + if [ 0 -ne ${RUN_DURATION_TIME_FLAG} ]; then + echo "Run within a duration: ${RUN_DURATION_TIME}" + elif [ 0 -ne ${RUN_LOOPS_FLAG} ]; then + echo "Run within a loop: ${RUN_LOOPS}" + fi + + echo "Working directory: " $PWD + echo "Memtester: " ${MEMTESTER} + echo "LOGs directory: " $LOGDIR + echo + echo -n "Jobs started at date: " + date #+%Y/%m/%d\ %H:%M + echo + #exit +######################## +# Run testing within a duration time. + if [ 0 -ne ${RUN_DURATION_TIME_FLAG} ]; then + # prepareing the sleeping killers + sleep ${RUN_DURATION_TIME} + echo -n "End of testing(TIMEOUT)... " + echo "KILL CHILD" && kill -9 $(pgrep -P ${PPIDKILL} memtester) && echo + "Childen processes - KILLED." + # attention to how the memtesters are forked... + echo "KILL PARENT" && kill $$ && echo "KILLED." & + echo "Finished the memtester" + echo -n "Jobs finished at date: " + date #+%Y/%m/%d\ %H:%M + fi & + echo -n "Waiting (PID: $$) for ${MEMTESTERCOPY} + memtesters(${MEM_PER_COPY}MB for each). " + if [ 0 -ne ${RUN_DURATION_TIME_FLAG} ]; then + echo -n "For time: ${RUN_DURATION_TIME} " + fi + + if [ 0 -ne ${RUN_LOOPS_FLAG} ]; then + echo -n "For loops: ${RUN_LOOPS} " + fi + echo "..." + while true + do + MEMTESTER_NUM=0 + echo -n "{" + while [ ${MEMTESTER_NUM} -lt ${MEMTESTERCOPY} ] + do + echo -n " ${MEMTESTER_NUM} " + if [ 0 -ne ${RUN_DURATION_TIME_FLAG} ]; then + RUN_LOOPS=0 + fi + ${MEMTESTER} ${MEM_PER_COPY} ${RUN_LOOPS} 2>&1 >> ${LOGDIR}/${MEMTESTER_NUM}.log & + # set loops = 0 to make memtester run loop infinitely... + # .pogo version will run only one loop by default + sleep ${DDPERCOPY_TIME} + MEMTESTER_NUM=$(expr $MEMTESTER_NUM + 1) + done + echo -n "}" + wait + [ 0 -ne ${RUN_LOOPS_FLAG} ] && break + # memtesters' loops... + done +######################## +echo +echo -n "End of testing(Excution ended)... " +pkill -9 -P ${PPIDKILL} +kill $$ +echo "Finished the memtester" +echo -n "Jobs finished at date: " +date #+%Y/%m/%d\ %H:%M