Ubuntu Linux 14.04 で動作するアプリケーションで効率的かつ高性能な非同期 IO を動作させる方法についてのアドバイスを探しています。
私のアプリはトランザクションを処理し、ディスク/フラッシュにファイルを作成します。アプリがトランザクションを進行するにつれて、追加のブロックが作成され、ディスク/フラッシュ上のファイルに追加する必要があります。アプリは、新しいトランザクションを処理しているため、このファイルのブロックを頻繁に読み取る必要もあります。各トランザクションは、このファイルに追加する必要がある新しいブロックを作成するだけでなく、このファイルから別のブロックを読み取る必要がある場合があります。トランザクションの着信キューがあり、アプリはキューからトランザクションを処理し続けて、ディスクまたはフラッシュでの読み取りアクセスまたは書き込み完了のレイテンシを隠すのに十分な深さの IO ops パイプラインを作成できます。ディスク/フラッシュにまだ書き込まれていないブロック (前のトランザクションによって書き込みキューに入れられたブロック) の読み取りの場合、アプリは対応する書き込みが完了するまで停止します。
私には重要なパフォーマンス目標があります。アプリが IO 操作を発行するために発生する遅延を可能な限り最小限に抑える必要があります。私のアプリは、各トランザクションを処理し、ディスク/フラッシュ上のファイルへの書き込みまたはファイルからの読み取りを発行する準備が整うまでに約 10 マイクロ秒かかります。ファイルの書き込みのみが必要な場合に、アプリが各トランザクションの処理をトランザクションあたり 10 マイクロ秒にできるだけ近い速度で完了することができるように、非同期の読み取りまたは書き込みを発行するための追加の待機時間はできるだけ小さくする必要があります。
io_submit を使用して書き込みおよび読み取り要求を発行する実装を実験しています。私たちの要件に対する最善のアプローチについて、提案やフィードバックをいただければ幸いです。io_submit は、目的を達成するための最高のパフォーマンスを提供してくれるでしょうか? 各書き込み io_submit のレイテンシーと各読み取り io_submit のレイテンシーはどの程度になると予想されますか?
実験的なコード (2.3 GHz Haswell Macbook Pro、Ubuntu Linux 14.04 で実行) を使用して、出力ファイルを拡張するときの書き込み io_submit で約 50 usecs を測定しています。これは長すぎて、パフォーマンス要件に近づいていません。最小限のレイテンシーで書き込みリクエストを開始するのに役立つガイダンスがあれば、大歓迎です。