1

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

一个 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?对于内核代码特别热衷。请不要从公式中扩展内核页面大小,因为我确实希望这是一个依赖于架构的答案(如果是的话)。

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

4

1 回答 1

1

感谢 Jens Axboe,以下是添加的库调用(>=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);
于 2021-05-07T05:59:47.197 回答