~からio_uringに関する論文、コミットリングには、コミットイベント自体が格納されるコミット配列のインデックスが含まれています。このマニュアルでは、これらの間接レベルを次のように説明しています。
重要な違いは、CQ リングが cqes の共有配列を直接索引付けするのに対し、コミット側はそれらの間に間接配列を持つことです。したがって、コミット側リングバッファはこの配列のインデックスであり、この配列にはsqesのインデックスが含まれます。一見すると奇妙で混乱しているように見えるかもしれませんが、その背後にはいくつかの理由があります。一部のアプリケーションは、内部データ構造に要求単位を含めることができます。これは、単一の操作で複数のSQLSを送信する機能を維持しながら、これを実行するための柔軟性を提供します。これにより、アプリケーションをio_uringインターフェースに簡単に変換できます。
しかし、「アプリケーションが内部データ構造に要求単位を挿入できる」ということは何を意味するのかわかりません。
この間接層の利点が何であるかを別の言葉で説明できる人はいますか?
答え1
私は論文の著者に連絡し、いくつかの説明を聞いた。
間接層が存在する理由は、一部のアプリケーションがそのアプリケーション固有のデータ構造にコミットイベントデータを格納しようとする可能性があるためです。アレイにイベントを保持させることで、アプリケーションはアレイ内のスロットの長期所有権を効果的に取得し、それをアプリケーション自体が参照します。時間が経つと満たしてください。 IOをコミットする準備ができたら、イベントインデックスをリングに入れることができます。
ただし、配列はありませんがリングにイベントが保持されている場合は、IOコミット中にイベントをアプリケーション構造からリングにコピーする必要があります。リングはイベント挿入時間によってソートされるため、アプリケーションはイベントを「予約」できないためです。事前に挿入して使用してください。これは、配列で回避できる一連の追加コピーです。