On Wed, Jul 17, 2024 at 1:31 PM Niall Douglas via Boost < boost@lists.boost.org> wrote:
Anyway point is having the kernel tell you the buffers filled instead of you telling it what buffers to fill is the right design. This is why LLFIO's read op allowed reads to fill in buffers read completely differently to buffers supplied, incidentally.
Ha ha, indeed. Actually, it might be nice to compare implementation notes. For Fiona, I create a buffer sequence for the user by over-allocating for each buffer and making an intrusive doubly-linked list. This means that the user gets a mutable buffer sequence without the need for any intermediate allocations. It also enables nice constant time push/pop and slicing. I was heavily inspired by Rust and Asio when coming up with the buffer abstraction: https://github.com/cmazakas/fiona/blob/main/test/buffer_test.cpp If you'd like, I'd really appreciate any implementation feedback on what's going on here. Not many seem to have the expertise in io_uring and this kind of stuff so it's rare when I get to really talk shop. Maybe I need to actually sit down and write some docs because I realize there's a lot to the codebase here and it's hard to convey everything just using email. - Christian