我是通过libaio使用Linux 内核 AIO的,在上一个读取操作完成之前,我必须提交下一个读取操作。问题是阻塞了一段时间,正如我可以从间隔中推断的那样,它等待前一个操作完成。io_submit()
我知道我可以用一个 将多个操作排入队列io_submit()
,但这对我来说不是一个选择,因为当已经是提交第一个读取操作的时间时,我不知道下一个读取操作会如何。
它只对我有用,还是对每个人都有效?在第二种情况下,请问我是否正在寻找可行的东西,或者我必须回退到线程模型?
令人沮丧的是,可能会阻止的原因有很多,io_submit
包括:
众所周知,ext4 和 AIO 可能不是最好的组合:
在 ext4 上的 io_submit 期间,在缓冲操作、网络访问、管道等上阻塞。 [...] 部分支持对文件系统(如 ext4)上文件的 AIO 访问:如果需要读取元数据来查找数据块(即如果元数据尚未在内存中),则 io_submit 调用将阻塞读取的元数据。某些类型的文件放大写入完全不受支持,并在整个操作期间阻塞。
(摘自一个名为 AIOUserGuide 的文档)
有关其他详细答案,请参阅Ubuntu Linux 问题中的异步 IO io_submit 延迟。