155 lines
3.5 KiB
Bash
Executable File
155 lines
3.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
get_total()
|
|
{
|
|
df -k ${dir} 2>/dev/null | tail -n 1 | awk '{print $2}'
|
|
}
|
|
|
|
get_free()
|
|
{
|
|
df -k ${dir} 2>/dev/null | tail -n 1 | awk '{print $4}'
|
|
}
|
|
|
|
get_ddr()
|
|
{
|
|
awk '/^MemTotal/{print $2}' /proc/meminfo
|
|
}
|
|
|
|
get_flash()
|
|
{
|
|
df -k ${dir} 2>/dev/null | tail -n 1 | awk '{print $1}'
|
|
}
|
|
|
|
get_fs()
|
|
{
|
|
df -T ${dir} 2>/dev/null | tail -n 1 | awk '{print $2}'
|
|
}
|
|
|
|
get_time()
|
|
{
|
|
local min="$(awk '/real/{print $2}' $1 | sed 's/m//')"
|
|
local sec="$(awk '/real/{print $3}' $1 | sed 's/[s\.]//g' | sed 's/^0*//')"
|
|
|
|
echo $(( ${min} * 60 * 100 + ${sec} ))
|
|
}
|
|
|
|
get_r_speed()
|
|
{
|
|
[ -z "${sec}" ] && sec=$(get_time $1)
|
|
|
|
[ "${sec}" -le "0" ] \
|
|
&& echo "Get Speed Failed" \
|
|
&& exit 1
|
|
|
|
echo $(( ${test_k} * 100 / ${sec} ))
|
|
}
|
|
|
|
get_w_speed()
|
|
{
|
|
[ -z "${sec}" ] && sec=$(get_time $1)
|
|
|
|
[ "${sec}" -le "0" ] \
|
|
&& echo "Get Speed Failed" \
|
|
&& exit 1
|
|
|
|
echo $(( ${test_k} * 100 / ${sec} ))
|
|
}
|
|
|
|
# test size depends on free flash and total ddr.
|
|
# 2 times bigger than free
|
|
get_test()
|
|
{
|
|
local size_k
|
|
# support 2 * ddr, or 95% of free.
|
|
[ "$(( ${ddr_k} * 2 ))" -lt "${free_k}" ] \
|
|
&& size_k=$(( ${ddr_k} * 2 )) \
|
|
|| size_k=$(( ${free_k} * 95 / 100 ))
|
|
|
|
# if larger than 4G, use around 3.9G
|
|
# (in case of vfat, which support the most large 4G)
|
|
[ "${size_k}" -ge $(( 4 * 1024 * 1024 )) ] \
|
|
&& size_k=$(( 3 * 1024 * 1024 + 921 * 1024 ))
|
|
|
|
echo ${size_k}
|
|
}
|
|
|
|
do_tiny_test()
|
|
{
|
|
in="$1"
|
|
out="$2"
|
|
bs="${blk}k"
|
|
count="$(( ${test_k} / ${blk} ))"
|
|
[ "${out}" = "/dev/null" ] \
|
|
&& args="if=${in} of=${out} bs=${bs} count=${count}" \
|
|
|| args="if=${in} of=${out} bs=${bs} count=${count} conv=fsync"
|
|
echo dd ${args}
|
|
time dd ${args}
|
|
}
|
|
|
|
# ====================== begin here ======================
|
|
tt_base="/spec/storage/tiny-seq"
|
|
dir=`mjson_fetch ${tt_base}/check_directory`
|
|
blk=`mjson_fetch ${tt_base}/block_size_kb`
|
|
|
|
ddr_k="$(get_ddr)"
|
|
[ "${ddr_k}" -ge "$(( 32 * 1024 ))" ] \
|
|
&& echo "This testcase is work for ddr less than 32M" \
|
|
&& echo "You can use /spec/storage/seq instead" \
|
|
&& exit 1
|
|
[ -z "${dir}" ] \
|
|
&& echo "Miss directory, set default: /mnt/SDCARD" \
|
|
&& dir="/mnt/SDCARD"
|
|
[ -z "${blk}" ] \
|
|
&& echo -n "Miss block size, set default: 512K" \
|
|
&& blk=512
|
|
[ "${blk}" -gt "$(( 4 * 1024 ))" ] \
|
|
&& echo -n "block size should not larger than 4m, use 512k instead" \
|
|
&& blk=512
|
|
|
|
total_k="$(get_total)"
|
|
free_k="$(get_free)"
|
|
# test size depends on free flash and total ddr.
|
|
test_k="$(( $(get_test) / ${blk} * ${blk} ))"
|
|
flash="$(get_flash)"
|
|
fs="$(get_fs)"
|
|
|
|
echo
|
|
echo "flash: ${flash}"
|
|
echo "filesystem: ${fs}"
|
|
echo "flash total size: ${total_k} KB"
|
|
echo "flash free size: ${free_k} KB"
|
|
echo "flash test size: ${test_k} KB"
|
|
echo "ddr tital size: ${ddr_k} KB"
|
|
echo "test directory: ${dir}"
|
|
echo "test block size: ${blk} KB"
|
|
echo
|
|
|
|
log="/tmp/spec-tiny-seq.log"
|
|
# do test for write
|
|
do_tiny_test "/dev/zero" "${dir}/dd.tmp" 2>&1 | tee ${log}.w
|
|
echo
|
|
# free memory
|
|
echo sync
|
|
time sync
|
|
echo
|
|
echo free caches
|
|
echo 3 > /proc/sys/vm/drop_caches
|
|
echo
|
|
# do test for read
|
|
do_tiny_test "${dir}/dd.tmp" "/dev/null" 2>&1 | tee ${log}.r
|
|
echo
|
|
|
|
# analyse speed
|
|
r_speed_k="$(get_r_speed ${log}.r)"
|
|
w_speed_k="$(get_w_speed ${log}.w)"
|
|
rm -f ${log}.r ${log}.w ${dir}/dd.tmp
|
|
echo
|
|
[ -z ${r_speed_k} -o -z ${w_speed_k} ] \
|
|
&& echo "Get Speed Failed" \
|
|
&& exit 1
|
|
echo "read speed: ${r_speed_k} KB/s"
|
|
echo "write speed: ${w_speed_k} KB/s"
|
|
|
|
ttips "read speed: ${r_speed_k} KB/s" \
|
|
-n "write speed: ${w_speed_k} KB/s"
|