1

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

我知道我可以用一个 将多个操作排入队列io_submit(),但这对我来说不是一个选择,因为当已经是提交第一个读取操作的时间时,我不知道下一个读取操作会如何。

它只对我有用,还是对每个人都有效?在第二种情况下,请问我是否正在寻找可行的东西,或者我必须回退到线程模型?

4

1 回答 1

0

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

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

众所周知,ext4 和 AIO 可能不是最好的组合

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

(摘自一个名为 AIOUserGuide 的文档)

有关其他详细答案,请参阅Ubuntu Linux 问题中的异步 IO io_submit 延迟。

于 2018-02-12T08:59:34.117 回答