diff --git a/test/.gitignore b/test/.gitignore index 4d88114677c05dfce47df9d3771ae89870155689..ef0b03d8dd66d5c356211c02ffa47e4882c00353 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -5,4 +5,6 @@ images/ results/ .vscode/ __pycache__/ +records/ +*.bak diff --git a/test/config_template.py b/test/config_template.py index 6ba92cd874a64c6bc67d9107f97e81bc1aa9b814..3454ff84e1a01f7f02eccb379e3513e64e06bab1 100644 --- a/test/config_template.py +++ b/test/config_template.py @@ -18,15 +18,15 @@ class Config: # 文件系统大å°å‚æ•° IMAGE_SIZE = 1 # 以G为å•ä½ FILE_INTENSIVE = { - "file_number": 102400, + "file_number": 512000 * IMAGE_SIZE, "file_size": 1024, # 以Byte为å•ä½ "dir_num": 100, "file_per_dir": 100, } DIR_INTENSIVE = { - "file_number": 102400, + "file_number": 102400 * IMAGE_SIZE, "file_size": 1024, - "dir_num": 102400, + "dir_num": 102400 * IMAGE_SIZE, "file_per_dir": 1, } # 选择文件系统é…ç½® diff --git a/test/run_test.sh b/test/run_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..2835608f7de04762ad1a6cf0e615aa2dd5d5041d --- /dev/null +++ b/test/run_test.sh @@ -0,0 +1,164 @@ +#!/bin/bash + +set -e # é‡åˆ°é”™è¯¯å³åœæ¢ + + +################## 傿•° satrt ############### +ROUND=3 # è¿è¡Œè½®æ¬¡ +DISKSIZE=(1 5 10 20 50) # æ–‡ä»¶ç³»ç»Ÿå¤§å° +TYPE=f # 文件密集型,å¯é€‰å€¼ {f, d} +CONFIG_PREFIX=./test_configure/ # é…置文件所在å‰ç¼€ +RECORD_PREFIX=./records/ # ä¿å˜æ‰€æœ‰çš„é…置文件 +THREAD=(1 2 4 8 16) +PYTHON_ENV= + +if [ -z %{PYTHON_ENV} ];then + conda activate ${PYTHON_ENV} +fi +################## 傿•° end ################### + +# å°†é…置文件`config.py`临时ä¿å˜èµ·æ¥ +store_config(){ + mv config.py config.py.bak + cp ${config} config.py +} + +recover_config(){ + rm config.py + mv config.py.bak config.py +} + +# 将生æˆçš„æ–‡ä»¶æ‹·è´åˆ°record指定的目录 +do_recore(){ + if [ ${IS_SYSTEM_FSCK} -gt 0 ];then + record_path=${record}/${i}/FSCK/ + mkdir -p ${record_path} + cp ./results/*-sys* ${record_path} + else + record_path=${record}/${i}/wFSCK_${thread}/ + mkdir -p ${record_path} + for tmp_file in `ls ./results | grep -v sys | xargs` + do + cp ./results/${tmp_file} ${record_path} + done + # ${record_path} + fi +} + +do_check(){ + # echo "do check. system? ${IS_SYSTEM_FSCK}. thread ${thread}. disk ${i}" + + if [ ${IS_SYSTEM_FSCK} -gt 0 ];then + python3 test.py -s + else + python3 test.py --thread ${thread} + fi + + do_recore + +} + +check(){ + # echo "doing a check " ${config} ${record} + store_config + + for thread in "${THREAD[@]}" + do + # echo ${thread} + IS_SYSTEM_FSCK=0 + do_check + done + + IS_SYSTEM_FSCK=1 + do_check + + recover_config +} + +testing(){ + for((round=0;round<${ROUND};round++)) do + + echo "round" $round "is start". + record=${RECORD_PREFIX}round${round} # 该次roundä¿å˜çš„ä½ç½® + # echo ${record} + for i in "${DISKSIZE[@]}" + do + config=${CONFIG_PREFIX}config_${TYPE}_${i}.py + check + done + done +} + +parsing_get_time(){ + echo `grep Elapsed $1 | tr ' ' '\n' | tail -1` +} + +parsing(){ + for((round=0;round<${ROUND};round++));do + # set -x + echo "***** round $round *****". + record=${RECORD_PREFIX}round${round} # 该次roundä¿å˜çš„ä½ç½® + + # æ ‡é¢˜ + line="\t" + for disk in "${DISKSIZE[@]}";do + line+="${disk}G" + line+="\t" + done + echo -e ${line} + + # 系统 fsck + line="FSCK\t" + for disk in "${DISKSIZE[@]}";do + record_path=${record}/${disk}/FSCK/runtime-sys.txt + line+=`parsing_get_time ${record_path}` + line+="\t" + done + echo -e ${line} + + # our fsck + for thread in "${THREAD[@]}" + do + line="wFSCK_${thread}\t" + for disk in "${DISKSIZE[@]}";do + record_path=${record}/${disk}/wFSCK_${thread}/runtime.txt + line+=`parsing_get_time ${record_path}` + line+="\t" + done + echo -e ${line} + done + + done +} + +help(){ + echo -e "\ + -t 测试 + -p è§£æž\ +" +} + + +options="tp" +while getopts $options opt; do + case $opt in + p) + # echo "parsing...." + parsing + ;; + t) + # echo "testing....." + testing + ;; + ?) + help + exit 1 + esac +done + + + + + + + diff --git a/test/test_configure/config_d_1.py b/test/test_configure/config_d_1.py new file mode 100644 index 0000000000000000000000000000000000000000..2d2529978f0bb1c5435a1ff67acda78a9b5e4e0f --- /dev/null +++ b/test/test_configure/config_d_1.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 1 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = DIR_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_d_10.py b/test/test_configure/config_d_10.py new file mode 100644 index 0000000000000000000000000000000000000000..988b498797ae8686dd87459c316b665699845b4c --- /dev/null +++ b/test/test_configure/config_d_10.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 10 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = DIR_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_d_20.py b/test/test_configure/config_d_20.py new file mode 100644 index 0000000000000000000000000000000000000000..895e85be9ceba702b021e1215da57d13c119ddb0 --- /dev/null +++ b/test/test_configure/config_d_20.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 20 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = DIR_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_d_5.py b/test/test_configure/config_d_5.py new file mode 100644 index 0000000000000000000000000000000000000000..72a3bf1e0e68ceec9722a3548f151071f3e3f15e --- /dev/null +++ b/test/test_configure/config_d_5.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 5 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = DIR_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_d_50.py b/test/test_configure/config_d_50.py new file mode 100644 index 0000000000000000000000000000000000000000..d21fc7e1203c689cacd2133e1e917abb25142c3c --- /dev/null +++ b/test/test_configure/config_d_50.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 50 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = DIR_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_f_1.py b/test/test_configure/config_f_1.py new file mode 100644 index 0000000000000000000000000000000000000000..3454ff84e1a01f7f02eccb379e3513e64e06bab1 --- /dev/null +++ b/test/test_configure/config_f_1.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 1 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = FILE_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_f_10.py b/test/test_configure/config_f_10.py new file mode 100644 index 0000000000000000000000000000000000000000..488d21f387399c3df8e3b072d630eb5e6e24ef89 --- /dev/null +++ b/test/test_configure/config_f_10.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 10 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = FILE_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_f_20.py b/test/test_configure/config_f_20.py new file mode 100644 index 0000000000000000000000000000000000000000..b1e00d5dfc6b91df2561c84995d5a77f3cc133f7 --- /dev/null +++ b/test/test_configure/config_f_20.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 20 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = FILE_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_f_5.py b/test/test_configure/config_f_5.py new file mode 100644 index 0000000000000000000000000000000000000000..21dd1def049df4c3ea4ee435a3f22a05a01b9dbb --- /dev/null +++ b/test/test_configure/config_f_5.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 5 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = FILE_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/test_configure/config_f_50.py b/test/test_configure/config_f_50.py new file mode 100644 index 0000000000000000000000000000000000000000..5e7a8dc96371badddd7f167a882dc15e18a76711 --- /dev/null +++ b/test/test_configure/config_f_50.py @@ -0,0 +1,43 @@ +""" +Copy this file to config.py and change the values to match your system +""" + +import os + + +class Config: + PROJDIR = './' # é¡¹ç›®åœ°å€ + RESULTPATH = PROJDIR + 'results' # ç»“æžœåœ°å€ + IMAGEPATH = PROJDIR + 'images' # 镜åƒåœ°å€ + FSCKEXE = 'fsck.f2fs' + FSMARKEXE = PROJDIR + 'fs_mark-3.3/fs_mark' + CLEARCACHE = PROJDIR + 'scripts/clear_cache.sh' + FSCK_OUTPUT = 'fsck.txt' + RUNTIME_OUTPUT = 'runtime.txt' + + # 文件系统大å°å‚æ•° + IMAGE_SIZE = 50 # 以G为å•ä½ + FILE_INTENSIVE = { + "file_number": 512000 * IMAGE_SIZE, + "file_size": 1024, # 以Byte为å•ä½ + "dir_num": 100, + "file_per_dir": 100, + } + DIR_INTENSIVE = { + "file_number": 102400 * IMAGE_SIZE, + "file_size": 1024, + "dir_num": 102400 * IMAGE_SIZE, + "file_per_dir": 1, + } + # 选择文件系统é…ç½® + FS_CONFIG = FILE_INTENSIVE + + TESTS = { + "runtime": False, + "bandwidth": False, + } + + +for path in [Config.RESULTPATH, Config.IMAGEPATH]: + if not os.path.isdir(path): + os.mkdir(path) diff --git a/test/utils.py b/test/utils.py index 917e5e7e5db8d87ffcc4a3b9d57d8f32c82ac378..444f6550d77c428f26ef9014a4a240208e132999 100644 --- a/test/utils.py +++ b/test/utils.py @@ -77,6 +77,7 @@ class ArgParser: if args.system: return "" else: - return f" --thread-number {self.thread} \ - --free-thread {self.free}" + # return f" --thread-number {self.thread} \ + # --free-thread {self.free}" + return f" --thread-number {self.thread} --no-scheduler "