我正在使用 Linux内核AIO 通过 libaio ,我必须在上一次完成之前提交下一次阅读操作。问题是io_submit()
会阻塞一段时间,并且正如我可以从间隔中推断出的那样,它会等待上一个操作完成。
我知道我可以使用单个io_submit()
将几个操作排入队列,但它不适合我,因为我不知道下一个读取操作到底是什么时候才能完成提交第一个。
它只为我或每个人工作吗?在第二种情况下,我可以问我是否正在寻找可行的东西,或者我必须回退到线程模型?
答案 0 :(得分:0)
令人沮丧的是io_submit
可能阻止的原因很多,包括:
众所周知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问题。