我正在尝试在 Linux 上使用异步 io。据我所知,有 3 个选项:
- 内核调用(io_submit 和 friend )
- libRT - 在用户空间使用线程
- libRTKAIO - 不使用线程的内核调用包装器
我正在使用最后一个选项,我看到,在我的单元测试中,在多个线程中运行大量异步 io 请求,/proc/sys/fs/aio-nr 永远不会高于 1024。我想知道哪里有这样的限制。
我已经将/proc/sys/fs/aio-max-nr 设置为 16M,所以这不是问题。
一个相关问题(也是我的)aio_write on linux with rtkaio is sometimes long
最佳答案
有一个名为“io_setup”的系统调用。在 librtkaio 中,此调用接收 1024 作为参数。这会导致我所描述的恒定 1024,如果并行的 ios 超过 1024,则会损害性能。 请注意,1024 是硬编码的。
只有在阻塞模式下调用 lio_listio 才能提高这个 1024 bar。
关于linux -/proc/sys/fs/aio-nr 永远不会高于 1024(Linux 上的 AIO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1799537/