diff options
author | Linggang Zeng <linggang.zeng@easystack.cn> | 2020-11-30 07:41:34 +0000 |
---|---|---|
committer | Linggang Zeng <linggang.zeng@easystack.cn> | 2020-12-01 11:33:41 +0800 |
commit | 328c14de21d48b5b6ee74a376c18f9e0400ca751 (patch) | |
tree | c5106177b35ef89961512629d1fe183ffb61cb0c | |
parent | be16039bc15efc17e9dbd152b1b6ddb471ff9408 (diff) |
make bcache tests run
Signed-off-by: Linggang Zeng <linggang.zeng@easystack.cn>
Reviewed-by: Kent Overstreet <kent.overstreet@gmail.com>
26 files changed, 306 insertions, 65 deletions
diff --git a/lib/libktest.sh b/lib/libktest.sh index 7181ff8..5573f3c 100644 --- a/lib/libktest.sh +++ b/lib/libktest.sh @@ -383,7 +383,15 @@ start_vm() qemu_pmem mem-path="$file",size=$size done - set|grep -vE '^[A-Z]' > "$ktest_tmp/env" + set > "$ktest_tmp/env_tmp" + readonly_variables="$(readonly | cut -d= -f1 | cut -d' ' -f3)" + for variable in ${readonly_variables} + do + grep -v "${variable}" "$ktest_tmp/env_tmp" > "$ktest_tmp/env" + cp "$ktest_tmp/env" "$ktest_tmp/env_tmp" + done + sed -i "s/^ ;$//g" "$ktest_tmp/env" + rm -rf "$ktest_tmp/env_tmp" set +o errexit diff --git a/lib/testrunner b/lib/testrunner index 017ed1f..adff799 100755 --- a/lib/testrunner +++ b/lib/testrunner @@ -14,7 +14,9 @@ KERNEL_ARCH="" ktest_dir="/host/$ktest_dir" ktest_tmp="/host/$ktest_tmp" -ln -s $ktest_dir /ktest +if [ ! -e "/ktest" ]; then + ln -s $ktest_dir /ktest +fi . "$ktest_dir/lib/util.sh" . "$ktest_dir/lib/parse-test.sh" @@ -35,7 +37,9 @@ ulimit -c unlimited # Log file system visible to host LOGDIR=/ktest-out -ln -s "/host/$ktest_out" $LOGDIR +if [ ! -e "$LOGDIR" ]; then + ln -s "/host/$ktest_out" $LOGDIR +fi # Core dump settings echo 1 > /proc/sys/fs/suid_dumpable diff --git a/lib/util.sh b/lib/util.sh index 14af849..cfbcb25 100644 --- a/lib/util.sh +++ b/lib/util.sh @@ -1,6 +1,6 @@ ktest_no_cleanup_tmpdir="" -ktest_tmp="" +ktest_tmp=${ktest_tmp:-""} ktest_exit() { diff --git a/ltp-fsx/Makefile b/ltp-fsx/Makefile index 4641703..609215b 100644 --- a/ltp-fsx/Makefile +++ b/ltp-fsx/Makefile @@ -1,2 +1,11 @@ +PREFIX=/usr +INSTALL=install + ltp-fsx: cc -o ltp-fsx ltp-fsx.c +install: ltp-fsx + $(INSTALL) -m0755 ltp-fsx $(DESTDIR)${PREFIX}/bin/ +uninstall: + rm -rf $(DESTDIR)${PREFIX}/bin/ltp-fsx +clean: + rm -rf ltp-fsx diff --git a/tests/bcache/32bit.ktest b/tests/bcache/32bit.ktest index 164cb33..af9d185 100644 --- a/tests/bcache/32bit.ktest +++ b/tests/bcache/32bit.ktest @@ -8,7 +8,9 @@ require-lib bcache-test-libs.sh require-kernel-config 64BIT=n -main() +config-timeout 120 + +test_main() { true } diff --git a/tests/bcache/backingdev.ktest b/tests/bcache/backingdev.ktest index 85e10cb..cd8e040 100644 --- a/tests/bcache/backingdev.ktest +++ b/tests/bcache/backingdev.ktest @@ -10,7 +10,7 @@ config-writeback config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' diff --git a/tests/bcache/backingdev_detach.ktest b/tests/bcache/backingdev_detach.ktest index 2d2b2fb..47352eb 100644 --- a/tests/bcache/backingdev_detach.ktest +++ b/tests/bcache/backingdev_detach.ktest @@ -10,7 +10,7 @@ config-writeback config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' diff --git a/tests/bcache/backingdev_stripes.ktest b/tests/bcache/backingdev_stripes.ktest index f09ffbb..ef7ad23 100644 --- a/tests/bcache/backingdev_stripes.ktest +++ b/tests/bcache/backingdev_stripes.ktest @@ -5,7 +5,11 @@ require-lib bcache-test-libs.sh require-kernel-config BLK_DEV_MD,MD_RAID456 config-cache 512M -config-scratch-devs 256M,256M,256M,256M,256M +config-scratch-devs 256M +config-scratch-devs 256M +config-scratch-devs 256M +config-scratch-devs 256M +config-scratch-devs 256M config-bucket-size 64k config-block-size 4k @@ -14,7 +18,7 @@ config-writeback config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' diff --git a/tests/bcache/backingdev_unregister.ktest b/tests/bcache/backingdev_unregister.ktest index e242c46..b6faf88 100644 --- a/tests/bcache/backingdev_unregister.ktest +++ b/tests/bcache/backingdev_unregister.ktest @@ -10,7 +10,7 @@ config-writeback config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' diff --git a/tests/bcache/backingdev_verify.ktest b/tests/bcache/backingdev_verify.ktest index 077432e..260aeca 100644 --- a/tests/bcache/backingdev_verify.ktest +++ b/tests/bcache/backingdev_verify.ktest @@ -10,7 +10,7 @@ config-writeback config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' @@ -24,6 +24,6 @@ main() done run_antagonist - test_bcache_stres + run_bcache_stress stop_bcache } diff --git a/tests/bcache/backingdev_writearound.ktest b/tests/bcache/backingdev_writearound.ktest index 1a36415..1555679 100644 --- a/tests/bcache/backingdev_writearound.ktest +++ b/tests/bcache/backingdev_writearound.ktest @@ -12,12 +12,12 @@ config-writearound config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' setup_bcache run_antagonist - test_bcache_stres + run_bcache_stress stop_bcache } diff --git a/tests/bcache/backingdev_writethrough.ktest b/tests/bcache/backingdev_writethrough.ktest index 49acb5c..d11357e 100644 --- a/tests/bcache/backingdev_writethrough.ktest +++ b/tests/bcache/backingdev_writethrough.ktest @@ -9,12 +9,12 @@ config-block-size 4k config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' setup_bcache run_antagonist - test_bcache_stres + run_bcache_stress stop_bcache } diff --git a/tests/bcache/bcache-test-libs.sh b/tests/bcache/bcache-test-libs.sh index 8a657f4..38af96a 100644 --- a/tests/bcache/bcache-test-libs.sh +++ b/tests/bcache/bcache-test-libs.sh @@ -8,6 +8,9 @@ require-build-deb bcache-tools require-kernel-config MD require-kernel-config BCACHE,BCACHE_DEBUG +require-kernel-config AUTOFS_FS + +require-make ../../ltp-fsx/ if [[ $KERNEL_ARCH = x86 ]]; then require-kernel-config CRYPTO_CRC32C_INTEL @@ -25,6 +28,7 @@ WRITEAROUND=0 REPLACEMENT=lru BUCKET_SIZE="" BLOCK_SIZE="" +TEST_RUNNING="" VIRTIO_BLKDEVS=0 @@ -41,6 +45,11 @@ config-cache() add_bcache_devs CACHE $1 0 } +config-tier() +{ + add_bcache_devs TIER $1 1 +} + config-volume() { for size in $(echo $1 | tr ',' ' '); do @@ -112,7 +121,13 @@ add_bcache_devs() bcache_format() { - make-bcache $BUCKET_SIZE $BLOCK_SIZE -C $CACHE -B $BDEV + for dev in ${CACHE} ${BDEV} + do + wipefs -a ${dev} + done + + make_bcache_flags=" --wipe-bcache" + make-bcache $BUCKET_SIZE $BLOCK_SIZE -C $CACHE -B $BDEV ${make_bcache_flags} } add_device() { @@ -142,7 +157,9 @@ existing_bcache() { echo "registering via sysfs" for dev in $CACHE $BDEV; do - echo $dev > /sys/fs/bcache/register + if ! echo $dev > /sys/fs/bcache/register; then + echo "WARN" "${dev} maybe have been registered by systemd with udev" + fi done echo "registered" @@ -184,13 +201,15 @@ setup_bcache() { sleep 2 for size in $VOLUME; do - for file in /sys/fs/bcache/*/blockdev_volume_create; do + for file in /sys/fs/bcache/*/flash_vol_create; do echo "creating volume $size via $file" echo $size > $file done done - ln -s /sys/fs/bcache/*-* /root/c || true + if [ ! -L "/root/c" ]; then + ln -s /sys/fs/bcache/*-* /root/c || true + fi } stop_volumes() @@ -350,10 +369,10 @@ discard_all_devices() fi expect_sysfs cache dirty_buckets 0 - expect_sysfs cache dirty_data 0 + expect_sysfs cache dirty_data 0.0k expect_sysfs cache cached_buckets 0 expect_sysfs cache cached_data 0 - expect_sysfs bdev dirty_data 0 + expect_sysfs bdev dirty_data 0.0k if [ -f /sys/kernel/debug/bcache/* ]; then tmp="$(mktemp)" @@ -395,3 +414,184 @@ run_bcache_stress() disable_faults } + +block_device_verify_dd() +{ + dd if=$1 of=/root/cmp bs=4096 count=1 iflag=direct + cmp /root/cmp /root/orig +} + +block_device_dd() +{ + dd if=/dev/urandom of=/root/orig bs=4096 count=1 + dd if=/root/orig of=$1 bs=4096 count=1 oflag=direct + dd if=$1 of=/root/cmp bs=4096 count=1 iflag=direct + cmp /root/cmp /root/orig + + dd if=/dev/urandom of=/root/orig bs=4096 count=1 + dd if=/root/orig of=$1 bs=4096 count=1 oflag=direct +} + +wait_all() +{ + for job in $(jobs -p); do + wait $job + done +} + +run_fio() +{ + echo "=== start fio at $(date)" + loops=$(($ktest_priority / 2 + 1)) + + ( + # Our default working directory (/cdrom) is not writable, + # fio wants to write files when verify_dump is set, so + # change to a different directory. + cd $LOGDIR + + for dev in $DEVICES; do + fio --eta=always \ + --randrepeat=0 \ + --ioengine=libaio \ + --iodepth=64 \ + --iodepth_batch=16 \ + --direct=1 \ + --numjobs=1 \ + --buffer_compress_percentage=20\ + --verify=meta \ + --verify_fatal=1 \ + --verify_dump=1 \ + --filename=$dev \ + --fill_fs=1 \ + \ + --name=seqwrite \ + --stonewall \ + --rw=write \ + --bsrange=4k-128k \ + --loops=$loops \ + \ + --name=randwrite \ + --stonewall \ + --rw=randwrite \ + --bsrange=4k-128k \ + --loops=$loops \ + \ + --name=randwrite_small \ + --stonewall \ + --rw=randwrite \ + --bs=4k \ + --loops=$loops \ + \ + --name=randread \ + --stonewall \ + --rw=randread \ + --bs=4k \ + --loops=$loops & + done + + wait_all + ) + + echo "=== done fio at $(date)" +} + +# +# Mount file systems on all block devices. +# +existing_fs() { + case $1 in + ext4) + opts="-o errors=panic" + ;; + xfs) + opts="" + ;; + *) + opts="" + ;; + esac + + for dev in $DEVICES; do + mkdir -p /mnt/$dev + mount $dev /mnt/$dev -t $1 $opts + done +} + +# +# Set up file systems on all block devices and mount them. +# +setup_fs() +{ + for dev in $DEVICES; do + case $1 in + xfs) + opts="-f" + ;; + ext4) + opts="-F" + ;; + *) + opts="" + ;; + esac + + mkfs.$1 $opts $dev + done + existing_fs $1 +} + +run_dbench() +{ + echo "=== start dbench at $(date)" + duration=$((($ktest_priority + 1) * 30)) + + ( + for dev in $DEVICES; do + dbench -S -t $duration 2 -D /mnt/$dev & + done + + wait_all + ) + + echo "=== done dbench at $(date)" +} + +run_bonnie() +{ + echo "=== start bonnie at $(date)" + loops=$((($ktest_priority + 1) * 4)) + + ( + for dev in $DEVICES; do + bonnie++ -x $loops -r 128 -u root -d /mnt/$dev & + done + + wait_all + ) + + echo "=== done bonnie at $(date)" +} + +run_fsx() +{ + echo "=== start fsx at $(date)" + numops=$((($ktest_priority + 1) * 300000)) + + ( + for dev in $DEVICES; do + ltp-fsx -N $numops /mnt/$dev/foo & + done + + wait_all + ) + + echo "=== done fsx at $(date)" +} + +stop_fs() +{ + for dev in $DEVICES; do + umount /mnt/$dev + done +} diff --git a/tests/bcache/flash_dev.ktest b/tests/bcache/flash_dev.ktest index 6902100..6a0fe52 100644 --- a/tests/bcache/flash_dev.ktest +++ b/tests/bcache/flash_dev.ktest @@ -14,7 +14,7 @@ config-volume 1800M config-timeout $(stress_timeout) -main() +test_main() { echo 1 > /sys/module/bcache/parameters/debug_check_bkeys setup_tracing 'bcache:*' @@ -26,7 +26,5 @@ main() run_bcache_stress #run_fio - stop_volumes - run_bcachefs_stress stop_bcache } diff --git a/tests/bcache/flash_dev_enospc.ktest b/tests/bcache/flash_dev_enospc.ktest index 00af412..f33a632 100644 --- a/tests/bcache/flash_dev_enospc.ktest +++ b/tests/bcache/flash_dev_enospc.ktest @@ -10,7 +10,7 @@ config-volume 1400M config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' diff --git a/tests/bcache/flash_dev_small_buckets.ktest b/tests/bcache/flash_dev_small_buckets.ktest index 12582c8..d083e77 100644 --- a/tests/bcache/flash_dev_small_buckets.ktest +++ b/tests/bcache/flash_dev_small_buckets.ktest @@ -9,14 +9,12 @@ config-volume 600M config-timeout $(($(stress_timeout) * 2)) -main() +test_main() { setup_tracing 'bcache:*' setup_bcache run_antagonist run_bcache_stress - stop_volumes - run_bcachefs_stress stop_bcache } diff --git a/tests/bcache/init_errors.ktest b/tests/bcache/init_errors.ktest index a1e935c..4c26659 100644 --- a/tests/bcache/init_errors.ktest +++ b/tests/bcache/init_errors.ktest @@ -9,7 +9,7 @@ config-block-size 4k config-timeout 300 config-volume 1600M -test_faults() +run_test_faults() { control=/sys/kernel/debug/dynamic_fault/control grep $1 $control @@ -39,14 +39,14 @@ test_faults() done } -main() +test_main() { setup_tracing 'bcache:*' if [ $NR_REBOOTS = 0 ]; then setup_bcache - echo readonly > /sys/fs/bcache/*/errors + echo readonly > /sys/fs/bcache/*/errors | true setup_fs ext4 @@ -58,7 +58,7 @@ main() sleep 10 do_reboot else - test_faults "bcache:cache_set_init" - test_faults "bcache:meta:read" + run_test_faults "bcache:cache_set_init" + run_test_faults "bcache:meta:read" fi } diff --git a/tests/bcache/journal_stress.ktest b/tests/bcache/journal_stress.ktest index 0a68304..e6b5f4f 100644 --- a/tests/bcache/journal_stress.ktest +++ b/tests/bcache/journal_stress.ktest @@ -8,11 +8,11 @@ config-tier 256M,256M,256M,256M,256M,256M,256M,256M,256M,256M config-bucket-size 64k config-block-size 4k config-volume 1900M -config-bcache-sysfs btree_flush_delay 0 +#config-bcache-sysfs btree_flush_delay 0 config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' @@ -30,8 +30,6 @@ main() done ) & - test_bcache_stres - stop_volumes - run_bcachefs_stress + run_bcache_stress stop_bcache } diff --git a/tests/bcache/passthrough.ktest b/tests/bcache/passthrough.ktest index 88e4ea6..c42bee3 100644 --- a/tests/bcache/passthrough.ktest +++ b/tests/bcache/passthrough.ktest @@ -8,7 +8,7 @@ config-block-size 4k config-timeout $(stress_timeout) -main() +test_main() { setup_tracing 'bcache:*' diff --git a/tests/bcache/reboot-fio.sh b/tests/bcache/reboot-fio.sh index bffcc59..2628b61 100644 --- a/tests/bcache/reboot-fio.sh +++ b/tests/bcache/reboot-fio.sh @@ -36,7 +36,7 @@ fio_pass() ) } -main() +test_main() { setup_tracing 'bcache:*' @@ -76,9 +76,6 @@ main() # Unclean vs unclean shutdown case $(((NR_REBOOTS / 4) % 2)) in - 0) - echo > /sys/fs/bcache/*/journal_flush - ;; 1) stop_bcache ;; diff --git a/tests/bcache/reboot-fs.sh b/tests/bcache/reboot-fs.sh new file mode 100644 index 0000000..e35ce86 --- /dev/null +++ b/tests/bcache/reboot-fs.sh @@ -0,0 +1,34 @@ +config-cpus 1 + +nr_iterations=$((($ktest_priority + 1) * 5)) +config-timeout $(($nr_iterations * 45 + $(stress_timeout))) + +test_main() +{ + setup_tracing 'bcache:*' + + if [ $NR_REBOOTS = 0 ]; then + setup_bcache + setup_fs ext4 + else + existing_bcache + existing_fs ext4 + rm -rf /mnt/$dev/* + fi + + run_antagonist + + if [ $NR_REBOOTS = $nr_iterations ]; then + run_dbench + run_bonnie + stop_fs + discard_all_devices + stop_bcache + else + run_dbench & + run_bonnie & + + sleep 30 + do_reboot + fi +} diff --git a/tests/bcache/reboot_dd.ktest b/tests/bcache/reboot_dd.ktest index 61551d9..fbc6c2f 100644 --- a/tests/bcache/reboot_dd.ktest +++ b/tests/bcache/reboot_dd.ktest @@ -8,8 +8,9 @@ config-block-size 4k config-volume 1600M config-cpus 1 config-timeout 600 +config-scratch-devs 2G -main() +test_main() { setup_tracing 'bcache:*' diff --git a/tests/bcache/reboot_fio_new.ktest b/tests/bcache/reboot_fio_new.ktest index 8084c4a..5b92c83 100644 --- a/tests/bcache/reboot_fio_new.ktest +++ b/tests/bcache/reboot_fio_new.ktest @@ -46,7 +46,7 @@ fio_pass() } -main() +test_main() { setup_tracing 'bcache:*' @@ -86,9 +86,6 @@ main() # Unclean vs unclean shutdown case $(((NR_REBOOTS / 4) % 2)) in - 0) - echo > /sys/fs/bcache/*/journal_flush - ;; 1) stop_bcache ;; diff --git a/tests/bcache/reboot_tier.ktest b/tests/bcache/reboot_tier.ktest index 4721277..3e9f4e7 100644 --- a/tests/bcache/reboot_tier.ktest +++ b/tests/bcache/reboot_tier.ktest @@ -10,7 +10,7 @@ config-volume 1600M config-cpus 1 config-timeout 600 -main() +test_main() { setup_tracing 'bcache:*' diff --git a/tests/bcache/register.ktest b/tests/bcache/register.ktest index f37e319..2102d38 100644 --- a/tests/bcache/register.ktest +++ b/tests/bcache/register.ktest @@ -7,19 +7,18 @@ config-backing 2G,2G config-bucket-size 64k config-block-size 4k config-writeback -config-scratch-devs 512M,2G,2G +config-scratch-devs 512M +config-scratch-devs 2G +config-scratch-devs 2G config-timeout 120 -main() +test_main() { setup_tracing 'bcache:*' setup_bcache - echo "we should only have one extent device" - [ "$(ls /dev/bcache_extent* | wc -l)" -eq "1" ] - for file in /sys/block/*/bcache/{stop,detach}; do if [ -f $file ]; then echo > $file || true @@ -33,12 +32,6 @@ main() echo "cache set should go away" ls /sys/fs/bcache/*-*-* && false - echo "extent device should go away" - ls /dev/bcache_extent* && false - echo "we should be able to register again" setup_bcache - - echo "we should only have one extent device" - [ "$(ls /dev/bcache_extent* | wc -l)" -eq "1" ] } diff --git a/tests/bcache/suspend.ktest b/tests/bcache/suspend.ktest index 710106a..701ec51 100644 --- a/tests/bcache/suspend.ktest +++ b/tests/bcache/suspend.ktest @@ -20,10 +20,8 @@ require-kernel-config PM,SUSPEND,PM_SLEEP,PM_DEBUG require-kernel-append no_console_suspend -main() +test_main() { - umount $LOGDIR - apt update; apt install --no-install-recommends -y uswsusp #setup_tracing 'bcache:*' @@ -49,6 +47,6 @@ main() run_antagonist - run_stress + run_bcache_stress fi } |