/proc/sys/fs/aio-nr 永远不会高于 1024(Linux 上的 AIO)

发布于 2024-08-12 15:30:19 字数 473 浏览 4 评论 0原文

我正在尝试在 Linux 上使用异步 io。据我所知,有 3 个选项:

  • 内核调用(io_submit 和朋友)
  • libRT - 在用户空间中使用线程
  • libRTKAIO - 不使用线程的内核调用包装器

我正在使用最后一个选项,我看到,在我的单元测试在多个线程中运行大量异步 io 请求,/proc/sys/fs/aio-nr 永远不会高于 1024。我想知道这样的限制在哪里。

我已将 /proc/sys/fs/aio-max-nr 设置为 16M,所以这不是问题。

一个相关的问题(也是我的)aio_write on linux with rtkaio is 有时很长< /a>

I'm trying to use async io on linux. As far as i know there're 3 options:

  • kernel calls (io_submit and friends)
  • libRT - uses threads in user space
  • libRTKAIO - wrapper of kernel calls which does not use threads

I'm using the last option, and i see, that in my unit test that runs a lot of async io requests in multiple threads, /proc/sys/fs/aio-nr is never higher than 1024. I wonder where lays such limitation.

I've set /proc/sys/fs/aio-max-nr to 16M, so it's not an issue.

A related question (also mine) aio_write on linux with rtkaio is sometimes long

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

呆° 2024-08-19 15:30:19

有一个名为“io_setup”的系统调用。在 librtkaio 中,此调用接收 1024 作为参数。正如我所描述的,这会导致恒定的 1024,并且如果并行的 ios 数量超过 1024,则会损害性能。
请注意,1024 是硬编码的。

只有在阻塞模式下调用 lio_listio 才能提高这个 1024 栏。

There's a system call named "io_setup". In librtkaio this call is receiving 1024 as an argument. This, leads to the constant 1024 as i described and hurts performance if there're more than 1024 ios in parallel.
Note that 1024 is hardcoded.

Only calling lio_listio in blocking mode will allow you to raise this 1024 bar.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文