我正在寻找有关如何为我在 Ubuntu Linux 14.04 上运行的应用程序获得高效和高性能异步 IO 的建议。
我的应用程序处理事务并在磁盘/闪存上创建文件。随着应用程序通过交易进行,会创建额外的块,这些块必须附加到磁盘/闪存上的文件中。该应用程序还需要在处理新事务时经常读取此文件的块。除了创建一个必须附加到该文件的新块之外,每个事务可能还需要从此文件中读取不同的块。有一个传入的事务队列,应用程序可以继续处理队列中的事务,以创建足够深的 IO 操作管道,以隐藏磁盘或闪存上读取访问或写入完成的延迟。对于尚未写入磁盘/闪存的块(由先前的事务放入写入队列)的读取,应用程序将停止,直到相应的写入完成。
我有一个重要的性能目标——应用程序应该产生尽可能低的延迟来发出 IO 操作。我的应用程序需要大约 10 微秒来处理每个事务,并准备好对磁盘/闪存上的文件进行写入或读取。发出异步读取或写入的额外延迟应尽可能小,以便应用程序可以在只需要文件写入时以每个事务尽可能接近 10 微秒的速率完成处理每个事务。
我们正在试验一种使用 io_submit 发出写入和读取请求的实现。对于满足我们要求的最佳方法的任何建议或反馈,我将不胜感激。io_submit 是否会给我们最好的性能来实现我们的目标?我应该对每次写入 io_submit 的延迟和每次读取 io_submit 的延迟有什么期望?
使用我们的实验代码(在 2.3 GHz Haswell Macbook Pro、Ubuntu Linux 14.04 上运行),我们测量了在扩展输出文件时写入 io_submit 大约 50 微秒。这太长了,我们甚至没有接近我们的性能要求。任何帮助我以最短延迟启动写入请求的指导将不胜感激。