问题原因分析
io_uring
在初始化时需要分配内存以维护提交队列(SQ)和完成队列(CQ)。若队列深度(entries)设置过大,可能会超出系统的可用内存限制。
解决方案
根据实际需求合理设置 io_uring 的队列深度。
例如,避免设置过大的entries值。liburing中创建io_uring实例的接口有io_uring_queue_init
和io_uring_queue_init_params
,调整参数entries
使其不超过允许内存值。
int io_uring_queue_init(unsigned entries,
struct io_uring *ring,
unsigned flags)
int io_uring_queue_init_params(unsigned entries,
struct io_uring *ring,
struct io_uring_params *params);
说明 更多该函数接口的说明,请在安装liburing
后使用man
命令进行查询和阅读。
sudo yum install liburing -y
man io_uring_queue_init