Hello All, I am emailing here to understand how fio can be used to benchmark writes in synchronous and asynchronous mode. I have wasted some time in running some benchmarks the wrong way. I am sending this email in the hopes that someone can throw light my way. As I understand it, unless "direct = 1", synchronous write will occur in the page cache and thus will not show the storage device's write bandwidth. -------------------------------- *Synchronous writes that reflect the device bandwidth/iops can be performed in two ways: ioengine = sync, direct = 1 buffered =0 OR ioengine = libaio/io_uring direct = 1 iodepth = 1 ------------------------------------- Asynchronous writes that reflect the device bandwidth/iops can be performed in the following ways: ioengine = libaio direct = 1 iodepth = "x" io_batch = "y" [where y < x ] or ioengine = io_uring direct = 1 iodepth = "x" iodepth_batch = "y" [where y < x ] If I want to maximize the requests that get sent to the device, I can specify a huge iodepth number. The Linux kernel will then keep sending the device the maximum I/O requests that the device can accept (true queue depth of the storage device). However, I am not sure how to control the actual queue depth when that is not the case. If I want the CMR drive (my storage device) to consistently get 4 requests at a time: setting iodepth = 4 will not control it. This will only control that the device will have at a maximum 4 requests at a time, but it cannot control the minimum. Is this understanding correct? Best Regards, Surbhi