From 81dcdfe812c038e48e3ee63370d5220938bd7870 Mon Sep 17 00:00:00 2001 From: Sebastian Brzezinka Date: Wed, 9 Nov 2022 22:41:02 +0100 Subject: [PATCH] llvm_vfio_fuzz: start fuzzer tests in parallel With corpus files persistent between fuzzer weekend run it may be better to start all test for fraction of time instead of different test every week. Remove `poll_groups_mask` from config, this patch run every test on single core and since then there is no need to specify another mask. Signed-off-by: Sebastian Brzezinka Change-Id: I4448724801bdf1a3c496f829fd168b840c2efa67 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15384 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: Michal Berger --- test/fuzz/llvm/vfio/fuzz_vfio_json.conf | 9 --- test/fuzz/llvm/vfio/run.sh | 76 +++++++++++-------------- 2 files changed, 33 insertions(+), 52 deletions(-) diff --git a/test/fuzz/llvm/vfio/fuzz_vfio_json.conf b/test/fuzz/llvm/vfio/fuzz_vfio_json.conf index c899bcf12..743334fb5 100644 --- a/test/fuzz/llvm/vfio/fuzz_vfio_json.conf +++ b/test/fuzz/llvm/vfio/fuzz_vfio_json.conf @@ -29,15 +29,6 @@ { "subsystem": "nvmf", "config": [ - { - "method": "nvmf_set_config", - "params": { - "poll_groups_mask": "0x1", - "admin_cmd_passthru": { - "identify_ctrlr": false - } - } - }, { "method": "nvmf_create_transport", "params": { diff --git a/test/fuzz/llvm/vfio/run.sh b/test/fuzz/llvm/vfio/run.sh index f6cfcb5c4..27e87c4c8 100755 --- a/test/fuzz/llvm/vfio/run.sh +++ b/test/fuzz/llvm/vfio/run.sh @@ -3,6 +3,7 @@ # Copyright (C) 2022 Intel Corporation # All rights reserved. # +FUZZER=vfio if [[ $SPDK_TEST_FUZZER_SHORT -eq 0 ]]; then TIME=60000 else @@ -17,68 +18,57 @@ for i in "$@"; do esac done -VFIOUSER_DIR=/tmp/vfio-user/domain/1 -VFIOUSER_IO_DIR=/tmp/vfio-user/domain/2 -mkdir -p $VFIOUSER_DIR -mkdir -p $VFIOUSER_IO_DIR - function start_llvm_fuzz() { local fuzzer_type=$1 - local corpus_dir + local timen=$2 + local core=$3 + local corpus_dir=$rootdir/../corpus/llvm_vfio_$fuzzer_type + local fuzzer_dir=/tmp/vfio-user-$fuzzer_type + local vfiouser_dir=$fuzzer_dir/domain/1 + local vfiouser_io_dir=$fuzzer_dir/domain/2 + local vfiouser_cfg=$fuzzer_dir/fuzz_vfio_json.conf - corpus_dir=$rootdir/../corpus/llvm_vfio_$fuzzer_type - mkdir -p $corpus_dir + mkdir -p $fuzzer_dir $vfiouser_dir $vfiouser_io_dir $corpus_dir - $rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz -m 0x1 \ - -i 0 \ - -F $VFIOUSER_DIR \ - -c $testdir/fuzz_vfio_json.conf \ - -t $TIME \ + # Adjust paths to allow multiply instance of fuzzer + sed -e "s%/tmp/vfio-user/domain/1%$vfiouser_dir%; + s%/tmp/vfio-user/domain/2%$vfiouser_io_dir%" $testdir/fuzz_vfio_json.conf > $vfiouser_cfg + + $rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz \ + -m $core \ + -s $mem_size \ + -F $vfiouser_dir \ + -c $vfiouser_cfg \ + -t $timen \ -D $corpus_dir \ - -Y $VFIOUSER_IO_DIR \ + -Y $vfiouser_io_dir \ + -r $fuzzer_dir/spdk$fuzzer_type.sock \ -Z $fuzzer_type -} -function run_fuzz() { - local startday - local today - local interval=0 - local weekloop - # Get the date number, format is like '22078' - # The purpose is when Jenkins schedule one fuzz in Saturday - # We can decide which one fuzz will be run , there are lots of fuzz, but only run one of them in Saturday each time - # and make sure all fuzz will be tested, so use this function. Such run fuzz 0 in 03/26, and run fuzz 1 in 04/02, run fuzz 2 in 04/09 .... - startday=$(date -d '2022-03-19' '+%y%j') - today=$(date '+%y%j') - interval=$(((today - startday) / 7)) - weekloop=$((interval / fuzz_num)) - if [[ $weekloop -lt 1 ]]; then # The first loop of fuzz - fuzzer_type=$interval - else - fuzzer_type=$((interval % fuzz_num)) - fi - start_llvm_fuzz $fuzzer_type &> $output_dir/llvm/llvm_vfio_$fuzzer_type.txt + rm -rf $fuzzer_dir } testdir=$(readlink -f $(dirname $0)) rootdir=$(readlink -f $testdir/../../../../) source $rootdir/test/common/autotest_common.sh +source $rootdir/test/setup/common.sh +source $testdir/../common.sh fuzzfile=$rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz.c -fuzz_num=$(($(grep -c "fn =" $fuzzfile) - 1)) -[[ $fuzz_num -ne 0 ]] +fuzz_num=$(($(grep -c "\.fn =" $fuzzfile) - 1)) +((fuzz_num != 0)) -trap 'process_shm --id 0; rm -rf $VFIOUSER_DIR $VFIOUSER_IO_DIR; exit 1' SIGINT SIGTERM EXIT +trap 'cleanup /tmp/vfio-user-*; exit 1' SIGINT SIGTERM EXIT +# vfiouser transport is unable to connect if memory is restricted +mem_size=0 if [[ $SPDK_TEST_FUZZER_SHORT -eq 1 ]]; then - for ((i = 0; i < fuzz_num; i++)); do - start_llvm_fuzz $i - done + start_llvm_fuzz_short $fuzz_num $TIME elif [[ $SPDK_TEST_FUZZER -eq 1 ]]; then - run_fuzz + get_testn $fuzz_num 1024 + start_llvm_fuzz_all $TESTN $fuzz_num $TIME else - start_llvm_fuzz $1 + start_llvm_fuzz $1 $TIME 0x1 fi -rm -rf $VFIOUSER_DIR $VFIOUSER_IO_DIR trap - SIGINT SIGTERM EXIT