diff --git a/scripts/fio.py b/scripts/fio.py index 0868633ee..252305e5c 100755 --- a/scripts/fio.py +++ b/scripts/fio.py @@ -44,25 +44,27 @@ def interrupt_handler(signum, frame): def main(): global fio - if (len(sys.argv) < 5): + if (len(sys.argv) < 6): print("usage:") - print(" " + sys.argv[0] + " ") + print(" " + sys.argv[0] + " ") print("advanced usage:") print("If you want to run fio with verify, please add verify string after runtime.") print("Currently fio.py only support write rw randwrite randrw with verify enabled.") sys.exit(1) - io_size = int(sys.argv[1]) - queue_depth = int(sys.argv[2]) - test_type = sys.argv[3] - runtime = sys.argv[4] - if len(sys.argv) > 5: + app = str(sys.argv[1]) + io_size = int(sys.argv[2]) + queue_depth = int(sys.argv[3]) + test_type = sys.argv[4] + runtime = sys.argv[5] + verify = False + if len(sys.argv) > 6: verify = True - else: - verify = False - devices = get_target_devices() - print(("Found devices: ", devices)) + if app == "nvmf": + devices = get_nvmf_target_devices() + elif app == "iscsi": + devices = get_iscsi_target_devices() configure_devices(devices) try: @@ -73,6 +75,8 @@ def main(): sys.exit(1) device_paths = ['/dev/' + dev for dev in devices] + print("Device paths:") + print(device_paths) sys.stdout.flush() signal.signal(signal.SIGTERM, interrupt_handler) signal.signal(signal.SIGINT, interrupt_handler) @@ -85,11 +89,16 @@ def main(): sys.exit(rc) -def get_target_devices(): +def get_iscsi_target_devices(): output = check_output('iscsiadm -m session -P 3', shell=True) return re.findall("Attached scsi disk (sd[a-z]+)", output.decode("ascii")) +def get_nvmf_target_devices(): + output = str(check_output('lsblk -l -o NAME', shell=True).decode()) + return re.findall("(nvme[0-9]+n[0-9]+)\n", output) + + def create_fio_config(size, q_depth, devices, test, run_time, verify): norandommap = 0 if not verify: diff --git a/test/iscsi_tgt/digests/digests.sh b/test/iscsi_tgt/digests/digests.sh index 675cf1c1e..4ca5ac715 100755 --- a/test/iscsi_tgt/digests/digests.sh +++ b/test/iscsi_tgt/digests/digests.sh @@ -11,8 +11,8 @@ function node_login_fio_logout() { done iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT sleep 1 - $fio_py 512 1 write 2 - $fio_py 512 1 read 2 + $fio_py iscsi 512 1 write 2 + $fio_py iscsi 512 1 read 2 iscsiadm -m node --logout -p $TARGET_IP:$ISCSI_PORT sleep 1 } diff --git a/test/iscsi_tgt/fio/fio.sh b/test/iscsi_tgt/fio/fio.sh index a3e7f1a66..93cbfcf77 100755 --- a/test/iscsi_tgt/fio/fio.sh +++ b/test/iscsi_tgt/fio/fio.sh @@ -36,7 +36,7 @@ function running_config() { timing_exit start_iscsi_tgt2 sleep 1 - $fio_py 4096 1 randrw 5 + $fio_py iscsi 4096 1 randrw 5 } if [ -z "$TARGET_IP" ]; then @@ -92,12 +92,12 @@ iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT trap "iscsicleanup; killprocess $pid; delete_tmp_files; exit 1" SIGINT SIGTERM EXIT sleep 1 -$fio_py 4096 1 randrw 1 verify -$fio_py 131072 32 randrw 1 verify -$fio_py 524288 128 randrw 1 verify +$fio_py iscsi 4096 1 randrw 1 verify +$fio_py iscsi 131072 32 randrw 1 verify +$fio_py iscsi 524288 128 randrw 1 verify if [ $RUN_NIGHTLY -eq 1 ]; then - $fio_py 4096 1 write 300 verify + $fio_py iscsi 4096 1 write 300 verify # Run the running_config test which will generate a config file from the # running iSCSI target, then kill and restart the iSCSI target using the @@ -107,7 +107,7 @@ if [ $RUN_NIGHTLY -eq 1 ]; then fi # Start hotplug test case. -$fio_py 1048576 128 rw 10 & +$fio_py iscsi 1048576 128 rw 10 & fio_pid=$! sleep 3 diff --git a/test/iscsi_tgt/ip_migration/ip_migration.sh b/test/iscsi_tgt/ip_migration/ip_migration.sh index d509d5bab..31842ea98 100755 --- a/test/iscsi_tgt/ip_migration/ip_migration.sh +++ b/test/iscsi_tgt/ip_migration/ip_migration.sh @@ -71,7 +71,7 @@ iscsiadm -m node --login -p $MIGRATION_ADDRESS:$ISCSI_PORT # fio tests for multi-process sleep 1 -$fio_py 4096 32 randrw 10 & +$fio_py iscsi 4096 32 randrw 10 & fiopid=$! sleep 5 diff --git a/test/iscsi_tgt/lvol/iscsi_lvol.sh b/test/iscsi_tgt/lvol/iscsi_lvol.sh index c3df3af72..d3ffc0e5b 100755 --- a/test/iscsi_tgt/lvol/iscsi_lvol.sh +++ b/test/iscsi_tgt/lvol/iscsi_lvol.sh @@ -70,7 +70,7 @@ iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT timing_exit discovery timing_enter fio -$fio_py 131072 8 randwrite 10 verify +$fio_py iscsi 131072 8 randwrite 10 verify timing_exit fio rm -f ./local-job0-0-verify.state diff --git a/test/iscsi_tgt/multiconnection/multiconnection.sh b/test/iscsi_tgt/multiconnection/multiconnection.sh index ef54cb84d..2623656ec 100755 --- a/test/iscsi_tgt/multiconnection/multiconnection.sh +++ b/test/iscsi_tgt/multiconnection/multiconnection.sh @@ -70,8 +70,8 @@ iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT sleep 1 echo "Running FIO" -$fio_py 131072 64 randrw 5 -$fio_py 262144 16 randwrite 10 +$fio_py iscsi 131072 64 randrw 5 +$fio_py iscsi 262144 16 randwrite 10 sync trap - SIGINT SIGTERM EXIT diff --git a/test/iscsi_tgt/nvme_remote/fio_remote_nvme.sh b/test/iscsi_tgt/nvme_remote/fio_remote_nvme.sh index 494a7b068..4f2cf4f01 100755 --- a/test/iscsi_tgt/nvme_remote/fio_remote_nvme.sh +++ b/test/iscsi_tgt/nvme_remote/fio_remote_nvme.sh @@ -88,7 +88,7 @@ trap "iscsicleanup; killprocess $iscsipid; killprocess $nvmfpid; \ sleep 1 echo "Running FIO" -$fio_py 4096 1 randrw 1 verify +$fio_py iscsi 4096 1 randrw 1 verify rm -f ./local-job0-0-verify.state iscsicleanup @@ -97,7 +97,7 @@ killprocess $iscsipid run_nvme_remote "remote" echo "Running FIO" -$fio_py 4096 1 randrw 1 verify +$fio_py iscsi 4096 1 randrw 1 verify rm -f ./local-job0-0-verify.state trap - SIGINT SIGTERM EXIT diff --git a/test/iscsi_tgt/pmem/iscsi_pmem.sh b/test/iscsi_tgt/pmem/iscsi_pmem.sh index 063bb6954..217d0ff2a 100755 --- a/test/iscsi_tgt/pmem/iscsi_pmem.sh +++ b/test/iscsi_tgt/pmem/iscsi_pmem.sh @@ -54,7 +54,7 @@ iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT timing_exit discovery timing_enter fio_test -$fio_py $BLOCKSIZE 64 randwrite $RUNTIME verify +$fio_py iscsi $BLOCKSIZE 64 randwrite $RUNTIME verify timing_exit fio_test iscsicleanup diff --git a/test/iscsi_tgt/qos/qos.sh b/test/iscsi_tgt/qos/qos.sh index 1b3f15b95..2bac30156 100755 --- a/test/iscsi_tgt/qos/qos.sh +++ b/test/iscsi_tgt/qos/qos.sh @@ -21,7 +21,7 @@ function check_qos_works_well() { start_io_count=$($rpc_py get_bdevs_iostat -b $3 | jq -r '.[1].bytes_read') fi - $fio_py 1024 128 randread 5 + $fio_py iscsi 1024 128 randread 5 if [ $LIMIT_TYPE = IOPS ]; then end_io_count=$($rpc_py get_bdevs_iostat -b $3 | jq -r '.[1].num_read_ops') diff --git a/test/iscsi_tgt/rbd/rbd.sh b/test/iscsi_tgt/rbd/rbd.sh index 27d861599..15b851393 100755 --- a/test/iscsi_tgt/rbd/rbd.sh +++ b/test/iscsi_tgt/rbd/rbd.sh @@ -51,8 +51,8 @@ iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT trap "iscsicleanup; killprocess $pid; rbd_cleanup; exit 1" SIGINT SIGTERM EXIT sleep 1 -$fio_py 4096 1 randrw 1 verify -$fio_py 131072 32 randrw 1 verify +$fio_py iscsi 4096 1 randrw 1 verify +$fio_py iscsi 131072 32 randrw 1 verify rm -f ./local-job0-0-verify.state diff --git a/test/iscsi_tgt/reset/reset.sh b/test/iscsi_tgt/reset/reset.sh index 0e986ac5f..821eb3a8f 100755 --- a/test/iscsi_tgt/reset/reset.sh +++ b/test/iscsi_tgt/reset/reset.sh @@ -50,7 +50,7 @@ sleep 1 dev=$(iscsiadm -m session -P 3 | grep "Attached scsi disk" | awk '{print $4}') sleep 1 -$fio_py 512 1 read 60 & +$fio_py iscsi 512 1 read 60 & fiopid=$! echo "FIO pid: $fiopid" diff --git a/test/iscsi_tgt/trace_record/trace_record.sh b/test/iscsi_tgt/trace_record/trace_record.sh index 5547e4e07..620cc7048 100755 --- a/test/iscsi_tgt/trace_record/trace_record.sh +++ b/test/iscsi_tgt/trace_record/trace_record.sh @@ -71,7 +71,7 @@ echo "Trace record pid: $record_pid" trap "iscsicleanup; killprocess $iscsi_pid; killprocess $record_pid; delete_tmp_files; exit 1" SIGINT SIGTERM EXIT echo "Running FIO" -$fio_py 131072 32 randrw 1 +$fio_py iscsi 131072 32 randrw 1 iscsicleanup # Delete Malloc blockdevs and targets diff --git a/test/nvmf/fio/fio.sh b/test/nvmf/fio/fio.sh index ba3b12b31..9b76b1a73 100755 --- a/test/nvmf/fio/fio.sh +++ b/test/nvmf/fio/fio.sh @@ -60,15 +60,15 @@ waitforblk "nvme0n1" waitforblk "nvme0n2" waitforblk "nvme0n3" -$testdir/nvmf_fio.py 4096 1 write 1 verify -$testdir/nvmf_fio.py 4096 1 randwrite 1 verify -$testdir/nvmf_fio.py 4096 128 write 1 verify -$testdir/nvmf_fio.py 4096 128 randwrite 1 verify +$rootdir/scripts/fio.py nvmf 4096 1 write 1 verify +$rootdir/scripts/fio.py nvmf 4096 1 randwrite 1 verify +$rootdir/scripts/fio.py nvmf 4096 128 write 1 verify +$rootdir/scripts/fio.py nvmf 4096 128 randwrite 1 verify sync #start hotplug test case -$testdir/nvmf_fio.py 4096 1 read 10 & +$rootdir/scripts/fio.py nvmf 4096 1 read 10 & fio_pid=$! sleep 3 diff --git a/test/nvmf/fio/nvmf_fio.py b/test/nvmf/fio/nvmf_fio.py deleted file mode 100755 index 6096dd728..000000000 --- a/test/nvmf/fio/nvmf_fio.py +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env python3 - -from subprocess import check_call, call, check_output, Popen, PIPE, CalledProcessError -import re -import sys -import signal - -fio_template = """ -[global] -thread=1 -invalidate=1 -rw=%(testtype)s -time_based=1 -runtime=%(runtime)s -ioengine=libaio -direct=1 -bs=%(blocksize)d -iodepth=%(iodepth)d -%(verify)s -verify_dump=1 - -""" - -verify_template = """ -do_verify=1 -verify=meta -verify_pattern="meta" -""" - - -fio_job_template = """ -[job%(jobnumber)d] -filename=%(device)s - -""" - - -def interrupt_handler(signum, frame): - fio.terminate() - print("FIO terminated") - sys.exit(0) - - -def main(): - - global fio - if (len(sys.argv) < 5): - print("usage:") - print(" " + sys.argv[0] + " ") - print("advanced usage:") - print("If you want to run fio with verify, please add verify string after runtime.") - print("Currently fio.py only support write rw randwrite randrw with verify enabled.") - sys.exit(1) - - io_size = int(sys.argv[1]) - queue_depth = int(sys.argv[2]) - test_type = sys.argv[3] - runtime = sys.argv[4] - if len(sys.argv) > 5: - verify = True - else: - verify = False - - devices = get_target_devices() - print("Found devices: ", devices) - - # configure_devices(devices) - try: - fio_executable = check_output("which fio", shell=True).split()[0] - except CalledProcessError as e: - sys.stderr.write(str(e)) - sys.stderr.write("\nCan't find the fio binary, please install it.\n") - sys.exit(1) - - device_paths = ['/dev/' + dev for dev in devices] - print(device_paths) - sys.stdout.flush() - signal.signal(signal.SIGTERM, interrupt_handler) - signal.signal(signal.SIGINT, interrupt_handler) - fio = Popen([fio_executable, '-'], stdin=PIPE) - fio.communicate(create_fio_config(io_size, queue_depth, device_paths, test_type, runtime, verify)) - fio.stdin.close() - rc = fio.wait() - print("FIO completed with code %d\n" % rc) - sys.stdout.flush() - sys.exit(rc) - - -def get_target_devices(): - output = str(check_output('lsblk -l -o NAME', shell=True).decode()) - return re.findall("(nvme[0-9]+n[0-9]+)\n", output) - - -def create_fio_config(size, q_depth, devices, test, run_time, verify): - if not verify: - verifyfio = "" - else: - verifyfio = verify_template - fiofile = fio_template % {"blocksize": size, "iodepth": q_depth, - "testtype": test, "runtime": run_time, "verify": verifyfio} - for (i, dev) in enumerate(devices): - fiofile += fio_job_template % {"jobnumber": i, "device": dev} - return fiofile.encode() - - -def set_device_parameter(devices, filename_template, value): - for dev in devices: - filename = filename_template % dev - f = open(filename, 'r+b') - f.write(value) - f.close() - - -def configure_devices(devices): - set_device_parameter(devices, "/sys/block/%s/queue/nomerges", "2") - set_device_parameter(devices, "/sys/block/%s/queue/nr_requests", "128") - requested_qd = 128 - qd = requested_qd - while qd > 0: - try: - set_device_parameter(devices, "/sys/block/%s/device/queue_depth", str(qd)) - break - except IOError: - qd = qd - 1 - if qd == 0: - print("Could not set block device queue depths.") - else: - print("Requested queue_depth {} but only {} is supported.".format(str(requested_qd), str(qd))) - set_device_parameter(devices, "/sys/block/%s/queue/scheduler", "noop") - - -if __name__ == "__main__": - main() diff --git a/test/nvmf/lvol/nvmf_lvol.sh b/test/nvmf/lvol/nvmf_lvol.sh index a2501f1ae..e5f4e1e72 100755 --- a/test/nvmf/lvol/nvmf_lvol.sh +++ b/test/nvmf/lvol/nvmf_lvol.sh @@ -99,7 +99,7 @@ for i in `seq 1 $SUBSYS_NR`; do done done -$testdir/../fio/nvmf_fio.py 262144 64 randwrite 10 verify +$rootdir/scripts/fio.py nvmf 262144 64 randwrite 10 verify sync disconnect_nvmf diff --git a/test/nvmf/multiconnection/multiconnection.sh b/test/nvmf/multiconnection/multiconnection.sh index 97155e781..7606bc1d5 100755 --- a/test/nvmf/multiconnection/multiconnection.sh +++ b/test/nvmf/multiconnection/multiconnection.sh @@ -63,8 +63,8 @@ for i in `seq 1 $NVMF_SUBSYS`; do waitforblk "nvme${k}n1" done -$testdir/../fio/nvmf_fio.py 262144 64 read 10 -$testdir/../fio/nvmf_fio.py 262144 64 randwrite 10 +$rootdir/scripts/fio.py nvmf 262144 64 read 10 +$rootdir/scripts/fio.py nvmf 262144 64 randwrite 10 sync for i in `seq 1 $NVMF_SUBSYS`; do diff --git a/test/nvmf/nmic/nmic.sh b/test/nvmf/nmic/nmic.sh index 7b66a9774..9f0e1125b 100755 --- a/test/nvmf/nmic/nmic.sh +++ b/test/nvmf/nmic/nmic.sh @@ -73,7 +73,7 @@ if [ ! -z $NVMF_SECOND_TARGET_IP ]; then waitforblk "nvme0n1" - $testdir/../fio/nvmf_fio.py 4096 1 write 1 verify + $rootdir/scripts/fio.py nvmf 4096 1 write 1 verify fi nvme disconnect -n "nqn.2016-06.io.spdk:cnode1" || true