]>
git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/test/nvmf/fio/nvmf_fio.py
3 from subprocess
import check_call
, call
, check_output
, Popen
, PIPE
31 fio_job_template
= """
37 def interrupt_handler(signum
, frame
):
39 print "FIO terminated"
45 if (len(sys
.argv
) < 5):
47 print " " + sys
.argv
[0] + " <io_size> <queue_depth> <test_type> <runtime>"
48 print "advanced usage:"
49 print "If you want to run fio with verify, please add verify string after runtime."
50 print "Currently fio.py only support write rw randwrite randrw with verify enabled."
53 io_size
= int(sys
.argv
[1])
54 queue_depth
= int(sys
.argv
[2])
55 test_type
= sys
.argv
[3]
62 devices
= get_target_devices()
63 print "Found devices: ", devices
65 # configure_devices(devices)
66 fio_executable
= '/usr/bin/fio'
68 device_paths
= ['/dev/' + dev
for dev
in devices
]
71 signal
.signal(signal
.SIGTERM
, interrupt_handler
)
72 signal
.signal(signal
.SIGINT
, interrupt_handler
)
73 fio
= Popen([fio_executable
, '-'], stdin
=PIPE
)
74 fio
.communicate(create_fio_config(io_size
, queue_depth
, device_paths
, test_type
, runtime
, verify
))
77 print "FIO completed with code %d\n" % rc
81 def get_target_devices():
82 output
= check_output('lsblk -l -o NAME', shell
=True)
83 return re
.findall("(nvme[0-9]+n[0-9]+)\n", output
)
85 def create_fio_config(size
, q_depth
, devices
, test
, run_time
, verify
):
89 verifyfio
= verify_template
90 fiofile
= fio_template
% {"blocksize": size
, "iodepth": q_depth
,
91 "testtype": test
, "runtime": run_time
, "verify": verifyfio
}
92 for (i
, dev
) in enumerate(devices
):
93 fiofile
+= fio_job_template
% {"jobnumber": i
, "device": dev
}
96 def set_device_parameter(devices
, filename_template
, value
):
98 filename
= filename_template
% dev
99 f
= open(filename
, 'r+b')
103 def configure_devices(devices
):
104 set_device_parameter(devices
, "/sys/block/%s/queue/nomerges", "2")
105 set_device_parameter(devices
, "/sys/block/%s/queue/nr_requests", "128")
110 set_device_parameter(devices
, "/sys/block/%s/device/queue_depth", str(qd
))
115 print "Could not set block device queue depths."
117 print "Requested queue_depth {} but only {} is supported.".format(str(requested_qd
), str(qd
))
118 set_device_parameter(devices
, "/sys/block/%s/queue/scheduler", "noop")
120 if __name__
== "__main__":