xref: /OK3568_Linux_fs/debian/overlay-debug/rockchip-test/flash_test/flash_stress_test.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun#/******************************************************************/
3*4882a593Smuzhiyun#/*  Copyright (C)  ROCK-CHIPS . All Rights Reserved.       */
4*4882a593Smuzhiyun#/*******************************************************************
5*4882a593Smuzhiyun#File    :   flash_stress_test.sh
6*4882a593Smuzhiyun#Desc    :   flash write and read stress test tools
7*4882a593Smuzhiyun#Author  :   ZYF
8*4882a593Smuzhiyun#Date    :   2020-07-16
9*4882a593Smuzhiyun#Notes   :
10*4882a593Smuzhiyun# Revision Data       Author                                Note.
11*4882a593Smuzhiyun# 1.00     2017/05/05 Zhaoyifeng                            1.First version
12*4882a593Smuzhiyun# 1.10     2020/06/28 Dingqiang Lin(jon.lin@rock-chips.com) 1.Simplify test_log 2.Add more introduction
13*4882a593Smuzhiyun# 1.20     2020/07/16 Hans Yang                             1.use /dev/urandom to generate test data
14*4882a593Smuzhiyun#Introduction.
15*4882a593Smuzhiyun#********************************************************************/
16*4882a593Smuzhiyun# usage��
17*4882a593Smuzhiyun# sudo flash_stress_test.sh dirnum testcount
18*4882a593Smuzhiyun# example  ��
19*4882a593Smuzhiyun# 	count for script command:
20*4882a593Smuzhiyun#		SLC Nand 128MB, 100K P/E cycles, normaly we test 5K P/E ���� 128MB * 5000
21*4882a593Smuzhiyun#       src file size 5MB, totle test data 128MB * 5000, testcount = 128MB * 5000 / 5MB * 5(dirnum) = 20600
22*4882a593Smuzhiyun#   command:
23*4882a593Smuzhiyun#		sudo flash_stress_test.sh 5 20000
24*4882a593Smuzhiyun#	available space need:
25*4882a593Smuzhiyun#		src file size: 5MB
26*4882a593Smuzhiyun#		des file size: 5MB * dirnum = 25MB
27*4882a593Smuzhiyun#       log file size: 189B(log item size) * 20000 = 3691KB
28*4882a593Smuzhiyun#			    total: about 34MB
29*4882a593Smuzhiyun#   result analyze:
30*4882a593Smuzhiyun#		success:
31*4882a593Smuzhiyun#			1. shell progress stop;
32*4882a593Smuzhiyun#			2. print "-------copy and check success------------"
33*4882a593Smuzhiyun#		fail:
34*4882a593Smuzhiyun#			1. shell progress stop;
35*4882a593Smuzhiyun#			2. any printing with "error" tag
36*4882a593Smuzhiyun#
37*4882a593Smuzhiyun#********************************************************************/
38*4882a593Smuzhiyun
39*4882a593Smuzhiyuntest_dir=/data/rockchip-test/flash_test
40*4882a593Smuzhiyunsource_dir=$test_dir/src_test_data
41*4882a593Smuzhiyundest_dir=$test_dir/des_test_data
42*4882a593Smuzhiyunmd5_dir=$test_dir/md5_data
43*4882a593Smuzhiyun
44*4882a593Smuzhiyunusage()
45*4882a593Smuzhiyun{
46*4882a593Smuzhiyunecho "Usage: flash_stress_test.sh [dirnum] [looptime]"
47*4882a593Smuzhiyunecho "flash_stress_test.sh 5 20000"
48*4882a593Smuzhiyun}
49*4882a593Smuzhiyun
50*4882a593Smuzhiyuntest_max_count=200
51*4882a593Smuzhiyuntest_max_dir=5
52*4882a593Smuzhiyunif [ $1 -ne 0 ] ;then
53*4882a593Smuzhiyun    test_max_dir=$1
54*4882a593Smuzhiyunfi
55*4882a593Smuzhiyun
56*4882a593Smuzhiyunif [ $2 -ne 0 ] ;then
57*4882a593Smuzhiyun    test_max_count=$2
58*4882a593Smuzhiyunfi
59*4882a593Smuzhiyun
60*4882a593Smuzhiyunecho "Test Max dir Num = ${test_max_dir}"
61*4882a593Smuzhiyunecho "Test Max count = ${test_max_count}"
62*4882a593Smuzhiyun
63*4882a593Smuzhiyuncount=0
64*4882a593Smuzhiyundir_loop=0
65*4882a593Smuzhiyunrm -rf  $test_dir/test_log.txt
66*4882a593Smuzhiyunmkdir -p $dest_dir
67*4882a593Smuzhiyunmkdir -p $md5_dir
68*4882a593Smuzhiyunmkdir -p $source_dir
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun#generate 5MB random file
71*4882a593Smuzhiyunrm -rf  $source_dir/*
72*4882a593Smuzhiyunfile_path=$source_dir
73*4882a593Smuzhiyunfile_size=(512 1024 3456 512 1024 3456)
74*4882a593Smuzhiyunfile_radio=(5 5 5 5 5 5)
75*4882a593Smuzhiyun
76*4882a593Smuzhiyunfunction random()
77*4882a593Smuzhiyun{
78*4882a593Smuzhiyun    min=$1
79*4882a593Smuzhiyun    max=$2
80*4882a593Smuzhiyun    num=`date +%s`
81*4882a593Smuzhiyun    ((value=$num%($max-$min)+$min+1))
82*4882a593Smuzhiyun    echo $value
83*4882a593Smuzhiyun}
84*4882a593Smuzhiyun
85*4882a593Smuzhiyunfile_size_count=${#file_size[*]}
86*4882a593Smuzhiyunfile_radio_count=${#file_radio[*]}
87*4882a593Smuzhiyun
88*4882a593Smuzhiyunif [ $file_size_count=$file_radio_count  ]
89*4882a593Smuzhiyunthen
90*4882a593Smuzhiyun    for ((i=0;i <$file_size_count;i++))
91*4882a593Smuzhiyun    do
92*4882a593Smuzhiyun        for  ((n=0;n <${file_radio[$i]};n++))
93*4882a593Smuzhiyun        do
94*4882a593Smuzhiyun            if [ $i==0 ]
95*4882a593Smuzhiyun            then
96*4882a593Smuzhiyun                rand=$(random 0 ${file_size[$i]})
97*4882a593Smuzhiyun            else
98*4882a593Smuzhiyun                rand=$(random ${file_size[$i-1]} ${file_size[$i]})
99*4882a593Smuzhiyun            fi
100*4882a593Smuzhiyun            dd if=/dev/urandom of=$file_path/test.$i.$rand.bin bs=$rand count=1024
101*4882a593Smuzhiyun        done
102*4882a593Smuzhiyun        echo ===========
103*4882a593Smuzhiyun    done
104*4882a593Smuzhiyunfi
105*4882a593Smuzhiyun
106*4882a593Smuzhiyuncd $source_dir
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun#find ./ -type f -print0 | xargs -0 md5sum | sort > $md5_dir/source.md5
109*4882a593Smuzhiyunmd5sum ./* > $md5_dir/source.md5
110*4882a593Smuzhiyuncd /
111*4882a593Smuzhiyunwhile [ $count -lt $test_max_count ]; do
112*4882a593Smuzhiyun	echo $count
113*4882a593Smuzhiyun	echo $count >> $test_dir/test_log.txt
114*4882a593Smuzhiyun    dir_loop=0
115*4882a593Smuzhiyun    while [ $dir_loop -lt $test_max_dir ]; do
116*4882a593Smuzhiyun	echo "$count test $source_dir to $dest_dir/${dir_loop}"
117*4882a593Smuzhiyun    	rm -rf  $dest_dir/$dir_loop
118*4882a593Smuzhiyun    	if [ $? == 0 ]; then
119*4882a593Smuzhiyun    		echo "$count clean $dest_dir/${dir_loop} success"
120*4882a593Smuzhiyun		echo "$count clean ${dir_loop}" >> $test_dir/test_log.txt
121*4882a593Smuzhiyun    	else
122*4882a593Smuzhiyun    		echo "$count clean $dest_dir/${dir_loop} error"
123*4882a593Smuzhiyun    		echo "$count clean $dest_dir/${dir_loop} error" >> $test_dir/test_log.txt
124*4882a593Smuzhiyun    		exit 0
125*4882a593Smuzhiyun    	fi
126*4882a593Smuzhiyun    	#sync
127*4882a593Smuzhiyun    	#sleep 1
128*4882a593Smuzhiyun    	#start copy data
129*4882a593Smuzhiyun    	echo "$count $dir_loop start copy data"
130*4882a593Smuzhiyun    	cp  -rf   $source_dir $dest_dir/$dir_loop
131*4882a593Smuzhiyun    	if [ $? == 0 ]; then
132*4882a593Smuzhiyun    		echo "$count cp  $source_dir to $dest_dir/${dir_loop} success"
133*4882a593Smuzhiyun		echo "$count cp ${dir_loop}" >> $test_dir/test_log.txt
134*4882a593Smuzhiyun    	else
135*4882a593Smuzhiyun    		echo "$count cp  $source_dir to $dest_dir/${dir_loop} error"
136*4882a593Smuzhiyun    		echo "$count cp  $source_dir to $dest_dir/${dir_loop} error" >> $test_dir/test_log.txt
137*4882a593Smuzhiyun    	fi
138*4882a593Smuzhiyun    	#sync
139*4882a593Smuzhiyun    	#sleep 1
140*4882a593Smuzhiyun    	dir_loop=$(($dir_loop+1))
141*4882a593Smuzhiyun    done
142*4882a593Smuzhiyun    dir_loop=0
143*4882a593Smuzhiyun    sync && echo 3 > /proc/sys/vm/drop_caches
144*4882a593Smuzhiyun    sleep 5
145*4882a593Smuzhiyun    sync
146*4882a593Smuzhiyun    echo 3 > /proc/sys/vm/drop_caches
147*4882a593Smuzhiyun    sleep 5
148*4882a593Smuzhiyun    while [ $dir_loop -lt $test_max_dir ]; do
149*4882a593Smuzhiyun	#calc dir md5
150*4882a593Smuzhiyun    	echo "$count calc $dest_dir/${dir_loop} md5 start"
151*4882a593Smuzhiyun    	echo "$count calc $dest_dir/${dir_loop} md5 start" >> $test_dir/test_log.txt
152*4882a593Smuzhiyun    	cd $dest_dir/${dir_loop}
153*4882a593Smuzhiyun    	#find ./ -type f -print0 | xargs -0 md5sum | sort > $md5_dir/dest${dir_loop}.md5
154*4882a593Smuzhiyun    	md5sum ./* > $md5_dir/dest${dir_loop}.md5
155*4882a593Smuzhiyun    	cd /
156*4882a593Smuzhiyun    	#cmp with src md5
157*4882a593Smuzhiyun    	diff $md5_dir/source.md5 $md5_dir/dest${dir_loop}.md5
158*4882a593Smuzhiyun    	if [ $? == 0 ]; then
159*4882a593Smuzhiyun    		echo "$count check source to $dest_dir/${dir_loop} success"
160*4882a593Smuzhiyun		echo "$count check ${dir_loop}" >> $test_dir/test_log.txt
161*4882a593Smuzhiyun    		rm  $md5_dir/dest${dir_loop}.md5
162*4882a593Smuzhiyun			rm -rf  $dest_dir/$dir_loop
163*4882a593Smuzhiyun    	else
164*4882a593Smuzhiyun    		echo "$count check source to $dest_dir/${dir_loop} error"
165*4882a593Smuzhiyun    		echo "$count check source to $dest_dir/${dir_loop} error" >> $test_dir/test_log.txt
166*4882a593Smuzhiyun    		exit 0
167*4882a593Smuzhiyun    	fi
168*4882a593Smuzhiyun    	dir_loop=$(($dir_loop+1))
169*4882a593Smuzhiyun    done
170*4882a593Smuzhiyun	count=$(($count+1))
171*4882a593Smuzhiyun        #if test fail, we can save file for debug
172*4882a593Smuzhiyun	#rm -rf  $test_dir/$dest_dir/*
173*4882a593Smuzhiyun	echo -----------------------------------------
174*4882a593Smuzhiyun	echo "-------========You can see the result at and $test_dir/test_log.txt file=======------------"
175*4882a593Smuzhiyun	echo -----------------------------------------  >> $test_dir/test_log.txt
176*4882a593Smuzhiyundone
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun	echo "-------copy and check success------------"
179*4882a593Smuzhiyun	echo "-------copy and check success------------"  >> $test_dir/test_log.txt
180*4882a593Smuzhiyun	echo "-------========You can see the result at and $test_dir/test_log.txt file=======------------"
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun
186