On 1/11/19 11:34 AM, Jens Axboe wrote: > On 1/11/19 11:19 AM, Martin K. Petersen wrote: >> >> Jens, >> >>> +struct io_uring_sqe { >>> + __u8 opcode; >>> + __u8 flags; >>> + __u16 ioprio; >>> + __s32 fd; >>> + __u64 off; >>> + union { >>> + void *addr; >>> + __u64 __pad; >>> + }; >>> + __u32 len; >>> + union { >>> + __kernel_rwf_t rw_flags; >>> + __u32 __resv; >>> + }; >>> +}; >> >> A bit tongue in cheek and yet somewhat serious: While I'm super excited >> about the 4 x 64 bitness of the sqe, where does the integrity buffer go? >> Or the 128-bit KV store key. How do we extend this interface beyond the >> flags? > > For integrity buffers, how about we stash them on the side? The newer > series has an extra system call, io_uring_register(), which is currently > used for registering files and buffers for IO on the side. You could > trivially tie an integrity buffer to an sqe through that. > > For KV, I thint that's an actually interesting use case (sorry, > integrity), and we might just want to bite the bullet and extend the sqe > to full 64 bytes. We're currently at 48 bytes, which leaves us with 16 > bytes of space for KV, and other use cases. I bit the bullet and bumped the size. 64 bytes is a nicer size in terms of cachelines anyway, and I really doubt that 48 vs 64 bytes makes a size consumption problem for anyone. The buf_index is only used for the fixed buffers, which means that we have 16 bytes / 128 bits that we can grab for things like KV. -- Jens Axboe