linux上使用rtkaio的aio_write有时很长

时间:2009-11-19 14:36:22

标签: c++ c linux asynchronous io

我在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)

2 个答案:

答案 0 :(得分:1)

我并不是要沮丧,但我怀疑你会得到一个非常有用的答案,因为这里有太多变量(集群文件系统,异步I / O,{{1}等等,除非有人特别熟悉你的设置,否则任何人都可以做的最好的建议是给你一个模糊的建议。

我想你应该首先尝试确定它是否是实际的写入速度慢,或者是否是异步回调处理程序的调用需要很长时间。您可以尝试使用常规同步写入调用替换对O_DIRECT的调用。另外,你提到的写入尺寸看起来很小,那你为什么要使用aio_write?如果有很多小写,我认为O_DIRECT会降低性能。

答案 1 :(得分:0)

您是否使用open()打开文件?

确保您使用O_NONBLOCK打开文件,然后使用O_WRONLY打开文件。