/proc/sys/fs/aio-nr 永远不会高于 1024(Linux 上的 AIO)
我正在尝试在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有一个名为“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.