If you use the bdev layer you get essentially a user space block stack. So in addition to
fast nvme you get the ability to add virtual bdevs like logical volumes, crypto, raid,
etc., without changing your app because you are writing to the bdev API and not the nvme
driver API. Directly to the nvme driver will be a little faster, Ben or someone can jump
in and correct me if I'm wrong but I think it's a little under 10%.
Here's a bit more on vbdevs in general: https://www.youtube.com/watch?v=s7UE0k2QUtg
From: SPDK [mailto:firstname.lastname@example.org] On Behalf Of Khoussi, Siham (IntlAssoc) via
Sent: Wednesday, June 12, 2019 3:16 PM
Cc: Khoussi, Siham (IntlAssoc) <siham.khoussi(a)nist.gov>
Subject: [SPDK] nvme vs bdev layer
I want to write an application for fast data read and write using function call rather
than RPC call on local NVMe devices. However based on my understanding I could either use
the block device layer which wraps NVMe devices and exposes customizable block devices or
I can use the NVMe driver directly. My question is: when is it better to use either of
them? And which is faster to read/write a large stream of data from memory?
SPDK mailing list