
The Linux kernel has seen incredible innovations and optimizations in the I / O area of late, from IO_uring to numerous performance improvements. One of the recent performance improvements in activity viewing and promising results is the no-copying BVEC behavior.
As explained by developer Pavel Begunkov, who has led the no-copy bvec support, “Currently, when iomap and block direct IO get a bvec-based iterator, the bvec will be copied, with all other accounting taking up a lot of CPU time and causing additional allocation for larger bvecs. The patch set ensures that the pass can be reused in iter bvec.”
This work to prevent bvecs copying during direct I / O can provide measurable performance improvements while decreasing memory usage. Pavel noted that in tests with a block size of 4K, a test system with these patches went from 1208k to 1222k IOPS. For a block size of 64K, it went from 699k IOPS to 982k IOPS.
With the latest patches there are more songs for those interested. The work is currently in its second revision after the original “request for comment” patches. It’s very possible that we’ll see this no-copy bvec support hit a new kernel cycle in the near term as yet another Linux I / O performance boost.