4 ms·
You ask the I/O system for a writable buffer. When you fill it up, you hand it off. Once the I/o finishes, it goes back into the available pool of memory to wri
by vlovich123 1y ago
You ask the I/O system for a writable buffer. When you fill it up, you hand it off. Once the I/o finishes, it goes back into the available pool of memory to write with. This is how high performance I/O works.
- zbentley 1y agoOkay, but . . . how would that work? A syscall gives back a pointer (I thought the point was to avoid syscalls/context switches)? An io_malloc userspace function (great, now how do I manage lifetimes of the buffers it hands out)? Something else?
- vlovich123 1y agoThe memory is allocated by the runtime that has the io_uring backend. You ask it for memory which it manages in its own memory allocator. Lifetime is managed no differently than Vec. For example, when you drop the DmaBuffer [1] it goes back into the pool. Or you hand it off as an I/O submission after filling it up. The memory frequently needs to be mlocked memory anyway, so a general purpose allocator doesn't work. [1] https://docs.rs/glommio/latest/glommio/fn.allocate_dma_buffer.html https://docs.rs/glommio/latest/glommio/fn.allocate_dma_buffe...