How does this works ?

Merging occurs when an I/O request is issued to an identical or adjacent region of the disk. Instead of issuing new request on its own, it is merged into the identical or adjacent request. This minimizes the number of outstanding requests.

Split occurs when the IO submitted by application is greater that 512k , the I/O scheduler splits application IO in several chunks of 512k blocks.

Finally I/O scheduler selects one request at a time and dispatch it to block device driver which in turn writes to disk

Here is the proof

Let’s verify this theory using the output shown above.

FIO submits 4M seq. IO to block IO layer , since BS used by FIO > 512k , the I/O scheduler splits each IO into chunk of 8 where each chunk is 512K size and its written to disk. Since this split operation is abstracted from application, FIO does not know about it and from FIO’s perspective write happened at 4M block size so it reports 55 IOPS