CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
orangepi-xunlong

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: orangepi-xunlong/orangepi-build
Path: blob/next/external/packages/bsp/common/usr/bin/memtester.sh
Views: 3963
1
#!/bin/sh
2
3
# Memory Tester Scripts
4
# by KaKa
5
# version = date
6
VERSION="Fri Oct 19 11:56:57 CST 2007"
7
# trap for irruptions
8
#MEMTESTER=${PWD}/memtester
9
MEMTESTER=/usr/sbin/memtester
10
PPIDKILL=$$
11
SIDKILL=$$
12
trap "pkill -9 -P ${PPIDKILL};kill -9 $$" INT
13
trap "pkill -9 -P ${PPIDKILL};kill -9 $$" KILL
14
cat <<-EOF_vpps >&2
15
Version: ${VERSION}
16
PID: $$
17
PPIDKILL: ${PPIDKILL}
18
SIDKILL: ${PPIDKILL}
19
EOF_vpps
20
CORE_NUM=$(grep -i ^processor /proc/cpuinfo|wc -l)
21
MEMTESTERCOPY=${CORE_NUM}
22
MEM_TOTAL_K=$(awk '/^MemTotal/{print $2}' /proc/meminfo)
23
MEM_RESERVE_PERCENTAGE=$((1000*50/1024))
24
MEM_RESERVED=$((MEM_TOTAL_K/1024*MEM_RESERVE_PERCENTAGE/1000))
25
MEM_TOTAL_TOBETESTED=$((MEM_TOTAL_K/1024-MEM_RESERVED))
26
MEM_PER_COPY=$((MEM_TOTAL_TOBETESTED/MEMTESTERCOPY))
27
RUN_DURATION_TIME=0
28
RUN_LOOPS=-1
29
RUN_DURATION_TIME_FLAG=0
30
RUN_LOOPS_FLAG=0
31
DDPERCOPY_TIME=6s
32
LOGDIR=/root/memtester-log-${$}
33
mkdir -p ${LOGDIR}
34
35
show_help () {
36
cat <<HELPEOF >&2
37
Version: ${VERSION}
38
Usage: $(basename ${0})
39
-r Directory: the root location of memtester binary file
40
-c NUMBER: the copies of memtester should be run
41
-m NUMBER: how many memory should be tested totally (in MB)
42
-t TIME: duration mode, how long will the tests go
43
-l NUMBER: loops mode,how many loops will each memtester should go
44
The option -t and -l are exclusive, which means tests could work
45
only with 1. duration mode or 2. loops mode
46
RUN 4 copies memtester with in 24 hours, to test total 4000 MB memory:
47
$(basename ${0}) -t 24h -c 4 -m 4000
48
RUN 2 copies memtester with in 1 hours, to test total 4000 MB memory:
49
$(basename ${0}) -t 1h -c 4 -m 4000
50
RUN 4 copies memtester with in 2 loops, to test total 3600 MB memory:
51
$(basename ${0}) -l 2 -c 4 -m 3600
52
-V/-h/-H: show this info.
53
HELPEOF
54
exit 0
55
}
56
57
while getopts :c:m:t:l:r:p:hHVvx OPTION
58
do
59
case ${OPTION} in
60
c)
61
#echo "-c ${OPTARG}"
62
MEMTESTERCOPY=${OPTARG}
63
;;
64
m)
65
#echo "-m ${OPTARG} MB"
66
MEM_TOTAL_TOBETESTED=${OPTARG}
67
MEM_RESERVED=$((MEM_TOTAL_K/1024-MEM_TOTAL_TOBETESTED))
68
;;
69
t)
70
#echo "-t ${OPTARG}"
71
[ 0 -ne ${RUN_LOOPS_FLAG} ] && echo "-t and -l are exclusive." && exit 222
72
RUN_DURATION_TIME=${OPTARG}
73
RUN_DURATION_TIME_FLAG=1
74
;;
75
l)
76
#echo "-l ${OPTARG}"
77
[ 0 -ne ${RUN_DURATION_TIME_FLAG} ] && echo && echo "-t and -l are exclusive." && show_help && echo && exit 223
78
RUN_LOOPS=${OPTARG};
79
RUN_LOOPS_FLAG=1
80
;;
81
d)
82
#echo "-r ${OPTARG}"
83
MEMTESTER=${OPTARG}/memtester
84
;;
85
p)
86
#echo "-p ${OPTARG}"
87
MEMTESTER=${OPTARG}
88
;;
89
V|h|H)
90
show_help
91
;;
92
v)
93
set -v
94
;;
95
x)
96
set -x
97
;;
98
?)
99
echo "Error...";
100
echo "?Unknown args..."
101
exit 224
102
;;
103
*)
104
#echo "*Unknown args..."
105
esac
106
done
107
#exit
108
[ 0 -eq ${RUN_DURATION_TIME_FLAG} ] && [ 0 -eq ${RUN_LOOPS_FLAG} ] &&
109
echo && echo "Please specified which mode should we run... -t or -l" &&
110
show_help && echo && exit 225
111
MEM_PER_COPY=$((MEM_TOTAL_TOBETESTED/MEMTESTERCOPY))
112
echo "Mem total: " $((MEM_TOTAL_K/1024)) MB
113
echo "Core total: "${CORE_NUM}
114
echo "Memtester copys: " ${MEMTESTERCOPY}
115
echo "Mem per copy: "${MEM_PER_COPY}
116
echo "Mem total to used: "${MEM_TOTAL_TOBETESTED} MB
117
if [ ${MEM_RESERVED} -lt 1 ]; then
118
echo "Mem reserved: -- No more memory reserved..."
119
else
120
echo "Mem reserved: "${MEM_RESERVED} MB
121
fi
122
#exit
123
# GOGOGO
124
if [ 0 -ne ${RUN_DURATION_TIME_FLAG} ]; then
125
echo "Run within a duration: ${RUN_DURATION_TIME}"
126
elif [ 0 -ne ${RUN_LOOPS_FLAG} ]; then
127
echo "Run within a loop: ${RUN_LOOPS}"
128
fi
129
130
echo "Working directory: " $PWD
131
echo "Memtester: " ${MEMTESTER}
132
echo "LOGs directory: " $LOGDIR
133
echo
134
echo -n "Jobs started at date: "
135
date #+%Y/%m/%d\ %H:%M
136
echo
137
#exit
138
########################
139
# Run testing within a duration time.
140
if [ 0 -ne ${RUN_DURATION_TIME_FLAG} ]; then
141
# prepareing the sleeping killers
142
sleep ${RUN_DURATION_TIME}
143
echo -n "End of testing(TIMEOUT)... "
144
echo "KILL CHILD" && kill -9 $(pgrep -P ${PPIDKILL} memtester) && echo
145
"Childen processes - KILLED."
146
# attention to how the memtesters are forked...
147
echo "KILL PARENT" && kill $$ && echo "KILLED." &
148
echo "Finished the memtester"
149
echo -n "Jobs finished at date: "
150
date #+%Y/%m/%d\ %H:%M
151
fi &
152
echo -n "Waiting (PID: $$) for ${MEMTESTERCOPY}
153
memtesters(${MEM_PER_COPY}MB for each). "
154
if [ 0 -ne ${RUN_DURATION_TIME_FLAG} ]; then
155
echo -n "For time: ${RUN_DURATION_TIME} "
156
fi
157
158
if [ 0 -ne ${RUN_LOOPS_FLAG} ]; then
159
echo -n "For loops: ${RUN_LOOPS} "
160
fi
161
echo "..."
162
while true
163
do
164
MEMTESTER_NUM=0
165
echo -n "{"
166
while [ ${MEMTESTER_NUM} -lt ${MEMTESTERCOPY} ]
167
do
168
echo -n " ${MEMTESTER_NUM} "
169
if [ 0 -ne ${RUN_DURATION_TIME_FLAG} ]; then
170
RUN_LOOPS=0
171
fi
172
${MEMTESTER} ${MEM_PER_COPY} ${RUN_LOOPS} 2>&1 >> ${LOGDIR}/${MEMTESTER_NUM}.log &
173
# set loops = 0 to make memtester run loop infinitely...
174
# .pogo version will run only one loop by default
175
sleep ${DDPERCOPY_TIME}
176
MEMTESTER_NUM=$(expr $MEMTESTER_NUM + 1)
177
done
178
echo -n "}"
179
wait
180
[ 0 -ne ${RUN_LOOPS_FLAG} ] && break
181
# memtesters' loops...
182
done
183
########################
184
echo
185
echo -n "End of testing(Excution ended)... "
186
pkill -9 -P ${PPIDKILL}
187
kill $$
188
echo "Finished the memtester"
189
echo -n "Jobs finished at date: "
190
date #+%Y/%m/%d\ %H:%M
191
192