7 LUSTRE=${LUSTRE:-$(dirname $0)/..}
8 . $LUSTRE/tests/test-framework.sh
12 ALWAYS_EXCEPT="$SCRUB_PERFORMANCE_EXCEPT"
16 skip "skip scrub performance test under non-SLOW mode" && exit 0
18 [ "$mds1_FSTYPE" != ldiskfs ] &&
19 skip "ldiskfs only test"
20 [[ "$MDS1_VERSION" -lt $(version_code 2.2.90) ]] &&
21 skip "Need MDS version at least 2.2.90"
22 require_dsh_mds || exit 0
24 NTHREADS=${NTHREADS:-0}
27 MINCOUNT=${MINCOUNT:-8192}
28 MAXCOUNT=${MAXCOUNT:-32768}
31 RCMD="do_facet ${SINGLEMDS}"
32 RLCTL="${RCMD} ${LCTL}"
33 MDT_DEV="${FSNAME}-MDT0000"
34 MDT_DEVNAME=$(mdsdevname ${SINGLEMDS//mds/})
35 SHOW_SCRUB="${RLCTL} get_param -n osd-ldiskfs.${MDT_DEV}.oi_scrub"
36 remote_mds && ECHOCMD=${RCMD} || ECHOCMD="eval"
38 if [ ${NTHREADS} -eq 0 ]; then
39 CPUCORE=$(${RCMD} cat /proc/cpuinfo | grep "processor.*:" | wc -l)
40 NTHREADS=$((CPUCORE * 2))
45 if ! combined_mgs_mds ; then
46 do_rpc_nodes $(facet_active_host mgs) load_modules_local
47 add mgs $(mkfs_opts mgs $(mgsdevname)) --backfstype ldiskfs \
48 --reformat $(mgsdevname) $(mgsvdevname) ${quiet:+>/dev/null} ||
51 start mgs $(mgsdevname) $MGS_MOUNT_OPTS || error "Fail to start MGS!"
54 do_rpc_nodes $(facet_active_host $SINGLEMDS) load_modules_local
55 reformat_external_journal ${SINGLEMDS}
56 add ${SINGLEMDS} $(mkfs_opts ${SINGLEMDS} ${MDT_DEVNAME}) --backfstype ldiskfs \
57 --reformat ${MDT_DEVNAME} $(mdsvdevname 1) ${quiet:+>/dev/null} ||
61 ${ECHOCMD} "${LCTL} <<-EOF
62 attach echo_client scrub-MDT0000 scrub-MDT0000_UUID
68 ${ECHOCMD} "${LCTL} <<-EOF
69 --device scrub-MDT0000 cleanup
70 --device scrub-MDT0000 detach
75 local echodev=$(${RLCTL} dl | grep echo_client|awk '{print $1}')
78 ${ECHOCMD} "${LCTL} --device ${echodev} test_mkdir ${tdir}"
80 for ((j = 1; j < ${threads}; j++)); do
81 ${ECHOCMD} "${LCTL} --device ${echodev} test_mkdir ${tdir}${j}"
84 ${ECHOCMD} "${LCTL} --device ${echodev} \
85 --threads ${threads} 0 ${echodev} \
86 test_create -d${tdir} -D${threads} -b${lbase} -c0 -n${usize}"
91 do_rpc_nodes $(facet_active_host $SINGLEMDS) unload_modules
92 if ! combined_mgs_mds ; then
93 do_rpc_nodes $(facet_active_host mgs) unload_modules
95 REFORMAT="yes" cleanup_and_setup_lustre
98 scrub_create_nfiles() {
102 local ldir="/test-${lbase}"
107 [ ${count} -eq 0 -o ${count} -gt ${total} ] && count=${total}
108 local usize=$((count / NTHREADS))
109 [ ${usize} -eq 0 ] && break
110 local tdir=${ldir}-${cycle}-
112 echo "[cycle: ${cycle}] [threads: ${threads}]"\
113 "[files: ${count}] [basedir: ${tdir}]"
114 start ${SINGLEMDS} $MDT_DEVNAME $MDS_MOUNT_OPTS ||
115 error "Fail to start MDS!"
119 stop ${SINGLEMDS} || error "Fail to stop MDS!"
121 total=$((total - usize * NTHREADS))
122 [ ${total} -eq 0 ] && break
123 lbase=$((lbase + usize))
132 for ((i=$MINCOUNT; i<=$MAXCOUNT; i=$((i * FACTOR)))); do
133 local nfiles=$((i - BASECOUNT))
134 local stime=$(date +%s)
136 echo "+++ start to create for ${i} files set at: $(date) +++"
137 scrub_create_nfiles ${nfiles} ${BASECOUNT} ${NTHREADS} ||
138 error "Fail to create files!"
139 echo "+++ end to create for ${i} files set at: $(date) +++"
140 local etime=$(date +%s)
141 local delta=$((etime - stime))
142 [ $delta -gt 0 ] || delta=1
143 echo "create ${nfiles} files used ${delta} seconds"
144 echo "create speed is $((nfiles / delta))/sec"
147 if [ ${BACKUP} -ne 0 ]; then
149 echo "backup/restore ${i} files start at: $(date)"
150 mds_backup_restore $SINGLEMDS ||
151 error "Fail to backup/restore!"
152 echo "backup/restore ${i} files end at: $(date)"
154 delta=$((etime - stime))
155 [ $delta -gt 0 ] || delta=1
156 echo "backup/restore ${i} files used ${delta} seconds"
157 echo "backup/restore speed is $((i / delta))/sec"
159 mds_remove_ois $SINGLEMDS ||
160 error "Fail to remove/recreate!"
163 echo "--- start to rebuild OI for $i files set at: $(date) ---"
164 start ${SINGLEMDS} $MDT_DEVNAME $MDS_MOUNT_OPTS > /dev/null ||
165 error "Fail to start MDS!"
168 local STATUS=$($SHOW_SCRUB |
169 awk '/^status/ { print $2 }')
170 [ "$STATUS" == "completed" ] && break
171 sleep 3 # check status every 3 seconds
174 echo "--- end to rebuild OI for ${i} files set at: $(date) ---"
175 local RTIME=$($SHOW_SCRUB | awk '/^run_time/ { print $2 }')
176 echo "rebuild OI for ${i} files used ${RTIME} seconds"
177 local SPEED=$($SHOW_SCRUB | awk '/^average_speed/ { print $2 }')
178 echo "rebuild speed is ${SPEED}/sec"
179 stop ${SINGLEMDS} > /dev/null || error "Fail to stop MDS!"
182 run_test 0 "OI scrub performance test"
184 # cleanup the system at last
186 complete_test $SECONDS
187 check_and_cleanup_lustre