3 ms·
NVMe passthrough skips abstractions. To access NVMe de- vices directly, io_uring provides the OP_URING_CMD opcode, which issues native NVMe commands via the ker
by LAC-Tech 9mo ago
NVMe passthrough skips abstractions. To access NVMe de-
vices directly, io_uring provides the OP_URING_CMD opcode, which
issues native NVMe commands via the kernel to device queues. By
bypassing the generic storage stack, passthrough reduces software-
layer overhead and per-I/O CPU cost. This yields an additional 20%
gain, increasing throughput to 300 k tx/s (Figure 5, +Passthru).
Which userspace libraries support this?. Liburing does, but Zig's Standard Library (relevant because a tigerbeetler wrote the article) does not, just silently gives out corrupt values from the completion queue.
On the rust side, rustix_uring does not support this, but widely doesn't let you set kernel flags for something it doesn't support. tokio-rs/io-uring looks like it might from the docs, but I can't figure out how (if anyone uses it there, let me know).
- to_ziegler 9mo agoGreat point. It is indeed the case that most io_uring libraries are lagging behind liburing. There are two main reasons for this: (1) io_uring development is moving very quickly (see the linked figure in another comment), and (2) liburing is maintained by Axboe himself and is therefore tightly coupled to io_uring’s ongoing development. One pragmatic "solution" is to wrap liburing with FFI bindings and maintain those yourself.
- LAC-Tech 9mo agoThat's what liburing_rs[1] is doing. I am foolishly trying to make pure rust bindings myself [2]. [1] https://docs.rs/axboe-liburing/ https://docs.rs/axboe-liburing/ [2] https://docs.rs/hringas https://docs.rs/hringas But yeah the liburing test suite is massive, way more than anyone else has.
- to_ziegler 9mo agoPretty nice library! Personally, I think having a language-native library is great. The only downside is that it becomes a long-term commitment if it needs to stay in sync with the development of io_uring. I wonder whether it would be a good idea to provide C bindings from the language-specific library, so it can be more easily integrated and tested into the liburing test suite with minimal effort.
- LAC-Tech 9mo agowoah that reverse uno of making C bindings from my rust bindings so I can piggy back on the awesome liburing tests is really clever :) thanks for that.