问题标签 [io-uring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
77 浏览

c - /usr/bin/ld: 找不到 -lliburing

编译时使用

显示流动错误

0 投票
2 回答
214 浏览

linux - io_uring 中的最大注册缓冲区大小

我试图通过 io_uring_register_buffers() 注册一组缓冲区,但我无法注册足够大的缓冲区。一个大于 32768 字节的缓冲区或几个总大小大于 32768 的缓冲区都会导致 ENOMEM 错误。我读过一个缓冲区的最大缓冲区大小为 1GB。

有一个例子:

如果我将 CNT 定义为 9,则会出现 ENOMEM 错误。怎么了?

0 投票
0 回答
63 浏览

linux - 使用内核端轮询时,liburing 和内核如何避免丢失唤醒?

看完源码后,

https://github.com/torvalds/linux/blob/ff1176468d368232b684f75e82563369208bc371/fs/io_uring.c#L6907

我对使用内核端轮询时的唤醒感到困惑,

用户线程:A. update-tail,然后 B. check-need-wakeup-flag

内核线程:C. 设置唤醒标志 D. 检查尾部

如果用户线程看到顺序: ABC ,内核线程看到顺序 CDA ,会导致丢失唤醒吗?

0 投票
1 回答
61 浏览

linux-kernel - Linux内核中的函数:trace_io_uring_submit_sqe在哪里?

最近,我正在跟踪 Linux 内核中的 io_uring。我发现在io_uring.ctrace_io_uring_submit_sqe中调用了一个函数。通过在 Github 镜像仓库或elixir.bootlin上搜索符号,我找不到它的定义。有没有其他方法可以找到它,或者它根本不存在?

0 投票
1 回答
184 浏览

linux - 同时等待epoll和io_uring

我正在将我的项目迁移到 io_uring 以获得更好的性能。但是,系统的某些部分依赖于 epoll 作为事件系统并且不能移动到 io_uring (例如:数据库驱动程序,它们在内部写入套接字,我收到通知读/写事件,从未看到写入原始套接字的内容)。强迫我同时使用 epoll 和 io_uring。出于各种原因,创建两个线程,一个用于 epoll,另一个用于 io_uring 不是一种选择。

我的计划是在我的事件循环中在 epoll 之后轮询 io_uring,如下所示

事实证明这是不可行的。很可能没有正在进行的数据库活动,导致epoll_wait阻塞直到超时,因此 io_uring 上的所有操作都在等待相同的超时。也不会颠倒顺序并io_uring_wait_cqe更好地跟注。可能有数据库流量但没有提交给 io_uring。导致 epoll 等待 io_uring 超时。

到目前为止,我已经考虑减少超时。但这不是一个优雅的解决方案。它会增加 CPU 使用率并增加不必要的延迟。有没有办法同时等待epoll和io_uring?即,一旦 epoll 或 io_uring 有东西要处理,某些功能就会解除阻塞。

0 投票
0 回答
24 浏览

c - 尝试 liburing 的示例“link-cp.c”之一,但不理解部分代码

最近我试图弄清楚 liburing 是一个简单的 io-uring 接口。当我测试这个link-cp.c例子时,

  1. 我不知道函数会做什么handle_cqe
  2. if (data->index == 2)是真的,为什么它会释放那个指针。
  3. struct io_data 中的索引是什么意思。这是代码的一部分。
0 投票
0 回答
32 浏览

linux-kernel - 为什么 Linux: aio/io_uring 不使用现有的 vfs?

最近在追踪io_uring真正早期的源码,发现它基本上是取自linux: aio的思想,也就是说 v5.1-rc1 中的 io_uring 和 aio 非常相似。

读完之后,我仍然不明白为什么他们都实现了一个层(对于 io_uring,它以前缀: 开头io_),它与 VFS 所做的事情类似。我的确切意思是 io_uring 中的io_write。为什么 io_uring 不只是调用类似的东西vfs_write

为了证明 VFS 类函数可以实现卸载 I/O 操作(io_uring 所做的),我实现了一个最小项目,这意味着 I/O 请求可以通过create_io_thread + vfs 类函数卸载。

0 投票
1 回答
48 浏览

linux - io_uring_queue_init 权限被拒绝

我已经将我的 fedora linux 更新dnf update为内核版本Linux 5.16.7-200.fc35.x86_64 x86_64,现在我收到一个 EPERM/permission denied 的调用错误io_uring_queue_init,即使以 root 身份调用我的程序也是如此。

我完全不知所措,这是内核构建中的错误还是我需要添加一些初始化代码?

0 投票
0 回答
45 浏览

c - 无法使用 liburing 在 Linux 中写入文件

我最近开始使用 liburing 并尝试编写一些演示。尝试将某些内容写入磁盘时遇到了麻烦。

这是我的代码,错误检查已被删除。

cqe->res总是返回 0。我没有继续搜索的线索。

我的内核版本是linux 5.4.56,liburing 版本是liburing-2.1。我用 GCC 830 编译了我的演示。

我还尝试了其他现有示例,从源代码编译它们,它们工作得很好。

任何帮助表示赞赏,非常感谢。

0 投票
0 回答
14 浏览

linux - 为什么 io_uring 的提交队列索引与完成队列不同?

https://kernel.dk/io_uring.pdf,我注意到 io_uring 的提交队列需要另一个间接索引。对我来说,解释很模糊。

一个重要的区别是,当 CQ 环直接索引 cqes 的共享数组时,提交方在它们之间有一个间接数组。因此,提交端环形缓冲区是这个数组的索引,而数组又包含了 sqes 的索引。这最初可能看起来很奇怪和令人困惑,但它背后有一些原因。一些应用程序可能会在内部数据结构中嵌入请求单元,这使他们能够灵活地这样做,同时保留在一次操作中提交多个 sqes 的能力。

这是提交队列的代码示例