io_uring_setup 需要多少锁定内存?

How much locked memory does io_uring_setup need?

使用 io_uring_queue_init 时调用 io_uring_setup。当进程可用的锁定内存量不足时,会返回 ENOMEM

strace 类似于:

[pid 37480] io_uring_setup(2048, {flags=0, sq_thread_cpu=0, sq_thread_idle=0}) = -1 ENOMEM (Cannot allocate memory)

每个条目(第一个参数)需要多少锁定内存的公式是什么?如果可能,基于 params 结构中的 sq_entries/cq_entries? Kernel code 对于特别热衷的人。请不要从公式中扩展内核页面大小,因为我确实希望这是一个依赖于体系结构的答案(如果是的话)。

我不想狡猾,只是将 ulimit -l 设置为无限制作为答案。这个 outstanding feature request 功能请求在实施时会有所帮助。

感谢 Jens Axboe liburing library calls 添加的以下内容 (>=liburing-2.1) 以字节为单位返回大小,如果不需要则为 0,如果有错误则为 -errno。

ssize_t io_uring_mlock_size(unsigned entries, unsigned flags);
ssize_t io_uring_mlock_size_params(unsigned entries, struct io_uring_params *p);