Commit 1fa3b4f7 authored by Sebastian Brzezinka's avatar Sebastian Brzezinka Committed by Ben Walker
Browse files

llvm_nvme_fuzz: enable running llvm nvmf test in parallel

parent 4f7ab506
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -53,15 +53,6 @@
    {
      "subsystem": "nvmf",
      "config": [
        {
          "method": "nvmf_set_config",
          "params": {
	    "poll_groups_mask": "0x1",
            "admin_cmd_passthru": {
              "identify_ctrlr": false
            }
          }
        },
        {
          "method": "nvmf_create_transport",
          "params": {
+32 −34
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@
#  Copyright (C) 2021 Intel Corporation
#  All rights reserved.
#

FUZZER=nvmf
if [[ $SPDK_TEST_FUZZER_SHORT -eq 0 ]]; then
	TIME=60000
else
@@ -19,54 +21,50 @@ done

function start_llvm_fuzz() {
	local fuzzer_type=$1
	local corpus_dir
	corpus_dir=/tmp/llvm_fuzz$fuzzer_type
	local timen=$2
	local core=$3
	local corpus_dir=$rootdir/../corpus/llvm_nvmf_$fuzzer_type
	local nvmf_cfg=/tmp/fuzz_json_$fuzzer_type.conf

	port="44$(printf "%02d" $fuzzer_type)"
	mkdir -p $corpus_dir
	$rootdir/test/app/fuzz/llvm_nvme_fuzz/llvm_nvme_fuzz -m 0x1 -i 0 -F "$trid" -c $testdir/fuzz_json.conf -t $TIME -D $corpus_dir -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/fuzzer_${fuzzer_type}.log
	trid="trtype:tcp adrfam:IPv4 subnqn:nqn.2016-06.io.spdk:cnode1 traddr:127.0.0.1 trsvcid:$port"
	sed -e "s/\"trsvcid\": \"4420\"/\"trsvcid\": \"$port\"/" $testdir/fuzz_json.conf > $nvmf_cfg

	$rootdir/test/app/fuzz/llvm_nvme_fuzz/llvm_nvme_fuzz \
		-m $core \
		-s $mem_size \
		-F "$trid" \
		-c $nvmf_cfg \
		-t $timen \
		-D $corpus_dir \
		-Z $fuzzer_type \
		-r /var/tmp/spdk$fuzzer_type.sock

	rm -rf $nvmf_cfg
}

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_nvme_fuzz/llvm_nvme_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 /tmp/llvm_fuzz*; exit 1' SIGINT SIGTERM EXIT

trid="trtype:tcp adrfam:IPv4 subnqn:nqn.2016-06.io.spdk:cnode1 traddr:127.0.0.1 trsvcid:4420"
trap 'cleanup /tmp/llvm_fuzz*; exit 1' SIGINT SIGTERM EXIT

mem_size=512
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 $mem_size
	start_llvm_fuzz_all $TESTN $fuzz_num $TIME
else
	start_llvm_fuzz $1
	start_llvm_fuzz $1 $TIME 0x1
fi

rm -rf /tmp/llvm_fuzz*
trap - SIGINT SIGTERM EXIT