When configuring Fio workload through job file, We want to measure the performance of latency and bandwidth of each thread according to the number of jobs while keeping the total number of inflight requests and io size fixed.
Below is an example of a fio job file.
----------- 1 thread ---------------------
[global]
filename=/dev/ng0n1
ioengine=io_uring_cmd
cmd_type=nvme
bs=4k
io_size=120g
numjobs=1
iodepth=64
In real SSD(Samsung 970 evo), as the number of threads increases, latency remains constant, and in the case of bandwidth, the bandwidth of one thread is divided evenly.
But in nvmevirt, as the number of threads increases, latency varies for each thread, and in the case of bandwidth, the total number of threads is not the same as the bandwidth when only one thread is running.
When using NVMevirt, what results are expected when an io request is made by multi-threads?
As a result, does nvmevirt guarantee dispatching using the round robin method, which is the basic arbitration, according to the nvme protocol?
When configuring Fio workload through job file, We want to measure the performance of latency and bandwidth of each thread according to the number of jobs while keeping the total number of inflight requests and io size fixed.
Below is an example of a fio job file. ----------- 1 thread --------------------- [global] filename=/dev/ng0n1 ioengine=io_uring_cmd cmd_type=nvme bs=4k io_size=120g numjobs=1 iodepth=64
[1] rw=write offset=0% size=80%
----------- 2 thread --------------------- [global] filename=/dev/ng0n1 ioengine=io_uring_cmd cmd_type=nvme bs=4k io_size=60g numjobs=1 iodepth=32
[1] rw=write offset=0% size=40%
[2] rw=write offset=40% size=40%
In real SSD(Samsung 970 evo), as the number of threads increases, latency remains constant, and in the case of bandwidth, the bandwidth of one thread is divided evenly.
But in nvmevirt, as the number of threads increases, latency varies for each thread, and in the case of bandwidth, the total number of threads is not the same as the bandwidth when only one thread is running.
When using NVMevirt, what results are expected when an io request is made by multi-threads?
As a result, does nvmevirt guarantee dispatching using the round robin method, which is the basic arbitration, according to the nvme protocol?