linux上使用rtkaio的aio_write有时很长

我在linux上使用async io和rtkaio库。 在我的测试中,一切都很完美,但是,在我的实际应用程序中,我看到aio_write应该返回非常快,非常慢。 将128KB写入O_DIRECT填充文件可能需要100多毫安。 我的测试和应用程序使用相同的I / O大小,我检查相同的文件系统(GFS)。

我添加了计数,我发现有大约50%的异步io操作是短的(短于2毫米)和50%的长(超过2毫米)。

我还检查了测试和应用程序都使用相同的rtkaio库。

我很丢失,任何想法我应该在哪里看?

另一个我的相关问题: / proc / sys / fs / aio-nr永远不会高于1024(Linux上的AIO)

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

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

你用open()文件吗?

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