核心概念
アパッチアローのイミュータブルな特性を活用し、ThymesisFlowによるクラスタ共有メモリを実現することで、データコピーやシリアライゼーションを排除した高効率なデータ共有を実現する。
要約
本論文では、アパッチアローとThymesisFlowを組み合わせることで、クラスタ内のノード間でデータを共有する新しいアプローチを提案している。
まず、アパッチアローのオブジェクトはイミュータブルであるため、キャッシュ整合性の問題を回避できる。そこで、ThymesisFlowを用いてノード間の共有メモリ領域を作成し、アパッチアローのメタデータのみを転送することで、ゼロコピー・ゼロシリアライゼーションを実現している。
具体的には以下の手順で実現している:
- アロー・オブジェクトの構造とデータへの参照情報のみをシリアライズし、転送する
- 共有メモリ領域への書き込み前にCPUキャッシュをフラッシュすることで、一貫性を保つ
- 全ノードで同一のアドレスにマッピングすることで、アドレス変換の必要性を排除
- カスタムメモリ管理機構を導入し、リモートメモリ上での動的割り当てを可能にする
- チャンクド配列を用いて、単一の論理テーブルをノード間で分散保持する
これにより、大規模データセットの共有が高速化され、ネットワーク上のデータ転送コストを大幅に削減できる。実験結果では、メタデータのみの転送で十分であり、データ転送時間を大幅に短縮できることを示している。一方で、キャッシュフラッシュなどの追加オーバーヘッドも存在するが、その影響は小さいことが確認された。
統計
1GiBのデータ(uint64要素)をリモートメモリに初期化するのに平均300.44ms要する
そのうち、118msがオーバーヘッド(メタデータ通信、キャッシュフラッシュ、シリアライゼーション等)
ストライド読み取りアクセスでは、リモートメモリアクセスのスループットが局所メモリに比べて低下するが、ストライドサイズが大きくなるほどその差は小さくなる
引用
"Arrow allows for various applications to access the same data, without copying and without serializing any data"
"The key aspect we utilize is that most Arrow objects, once instantiated, are immutable and thus the missing cache coherency is not a problem with read-only access."
"By combining ThymesisFlow with Apache Arrow, this paper minimizes data copy bottlenecks which currently hinder efficient communication between server nodes."