snu-csl / nvmevirt

NVMeVirt: A Versatile Software-defined Virtual NVMe Device
Other
182 stars 54 forks source link

Excuting many jobs in NVMeVirt #39

Closed mtm776 closed 5 months ago

mtm776 commented 5 months ago

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?