我在linux上使用async io和rtkaio库。在我的测试中,一切都很完美,但是,在我的实际应用程序中,我看到aio_write应该返回非常快,非常慢。将128KB写入O_DIRECT填充文件可能需要100多毫安。 我的测试和应用程序使用相同的I / O大小,我检查相同的文件系统(GFS)。
我添加了计数,我发现大约有50%的async io操作很短(短于2 mil),50%是长(超过2 mil)。
我还检查过测试和应用程序都使用相同的rtkaio库。
我很丢失,任何想法我应该在哪里看?
我的另一个相关问题:/proc/sys/fs/aio-nr is never higher than 1024 (AIO on linux)
答案 0 :(得分:1)
我并不是要沮丧,但我怀疑你会得到一个非常有用的答案,因为这里有太多变量(集群文件系统,异步I / O,{{1}等等,除非有人特别熟悉你的设置,否则任何人都可以做的最好的建议是给你一个模糊的建议。
我想你应该首先尝试确定它是否是实际的写入速度慢,或者是否是异步回调处理程序的调用需要很长时间。您可以尝试使用常规同步写入调用替换对O_DIRECT
的调用。另外,你提到的写入尺寸看起来很小,那你为什么要使用aio_write
?如果有很多小写,我认为O_DIRECT
会降低性能。
答案 1 :(得分:0)
您是否使用open()
打开文件?
确保您使用O_NONBLOCK
打开文件,然后使用O_WRONLY
打开文件。