io_submit()会阻塞,直到完成上一个操作

时间:2015-07-02 03:51:51

标签: c linux aio

我正在使用 Linux内核AIO 通过 libaio ,我必须在上一次完成之前提交下一次阅读操作。问题是io_submit()会阻塞一段时间,并且正如我可以从间隔中推断出的那样,它会等待上一个操作完成。

我知道我可以使用单个io_submit()将几个操作排入队列,但它不适合我,因为我不知道下一个读取操作到底是什么时候才能完成提交第一个。

它只为我或每个人工作吗?在第二种情况下,我可以问我是否正在寻找可行的东西,或者我必须回退到线程模型?

1 个答案:

答案 0 :(得分:0)

令人沮丧的是io_submit可能阻止的原因很多,包括:

  • 你正在做缓冲的I / O
  • 您正在对文件系统进行I / O操作,并且您的提交将在同步操作后排队。

众所周知ext4 and AIO may not be the best mix

  

在ext4上的io_submit期间,在缓冲操作,网络访问,管道等上阻塞 [...]部分支持对文件系统(如ext4)上的文件的AIO访问:如果元数据读取需要查找数据块(即,如果元数据不在内存中),则io_submit调用将阻止元数据读取。某些类型的文件放大写入完全不受支持,并且在整个操作期间都会阻塞。

(摘录来自名为AIOUserGuide的文档)

有关其他详细答案,请参阅asynchronous IO io_submit latency in Ubuntu Linux问题。