[LSF/MM/BFP ATTEND][LSF/MM/BFP TOPIC] Storage: REQ_OP_VERIFY support for block layer and device drivers

Chaitanya Kulkarni chaitanyak at nvidia.com
Wed Feb 1 17:46:33 PST 2023


Hi,

Right now there is no generic interface that can be used by the
in-kernel components such as file-system or userspace application
(except passthru commands or some combination of write/read/compare) to
issue verify command with the central block layer API for device LBA 
verification. This can lead to each userspace applications having
protocol specific IOCTL and that defeats the purpose of having the OS
provide to H/W abstraction.

I've worked on a patch series to introduce a new block layer payloadless
request operation REQ_OP_VERIFY that allows in-kernel components &
userspace applications to verify the range of the LBAs by offloading
checksum scrubbing/verification to the controller that is directly
attached to the host. For direct attached devices this leads to decrease
in the host DMA traffic and CPU usage and for the fabrics attached
devices over the network that leads to a decrease in the network traffic
and CPU usage for both host & target.

The main advantage is to free up the CPU and reduce the host link
traffic since for some devices, their internal bandwidth is higher than
the host link and offloading this operation can improve the performance
of the proactive error detection applications such as file system level
scrubbing.

The prominent example of this is xfs_scrub that issues SCSI Verify
command at the time of scrubbing that guarantees the LBA verification
is been done on the device level at the time of file system scrubbing.

Here are the results :-

When verifying 500GB of data on NVMeOF with nvme-loop and null_blk
as a target back-end block device results show almost a 80%
performance increase :-

With Verify resulting in REQ_OP_VERIFY to null_blk :-

real	2m3.773s
user	0m0.000s
sys	0m59.553s

With Emulation resulting in REQ_OP_READ null_blk :-

real	12m18.964s
user	0m0.002s
sys	1m15.666s

There is an objection from on this work to be merged :-

1. Current Storage protocols may lie.
2. We cannot trust any SSD vendors that they will implement Verify
    command authentically.
3. Hence we should never rely on this support and kernel should
    not have this functionality.
4. Instead a new command HASH is proposed.

I'd like to discuss the this topic in great detail and understand
what API we can create or protocol changes needed so we can upstream
this support.

-ck



More information about the Linux-nvme mailing list