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

标签 linux performance asynchronous filesystems storage

我正在尝试在 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/

相关文章:

python - 从 python 脚本运行进程,进程永远不会停止

performance - 在给定的平衡二叉搜索树中查找最小(或最大)k 个元素

javascript - 如何在 Golang 请求中执行 javascript 异步代码

javascript - 如何从异步调用返回响应?

linux - 如何将 find 和 grep 的结果输出为 filename => found

c++ - 尝试构建xerces c++解析器。 Netbeans和命令行构建错误未定义对“xercesc_3_2…”的引用

Linux Mint 上的 Django 和 PgSQL 连接问题

mysql - 有时mysql会断开连接,由于访问者负载增加

c++ - 由于Hackerrank中的超时而终止(在cpp中使用malloc)

c# - 在 C# Web 服务中调用异步调用