導入
-
現在、ほとんどのアプリケーションの IO モデルでは、メタデータとアライメントされていないデータの断片化の割合が増加しますが、同時に、従来のストレージ ソフトウェアによって導入されたアライメント制約と大量の遅延により、この種の IO アプリケーションのパフォーマンスはますます低下します。大容量永続メモリ (SCM) と高速ハードウェア構造の組み合わせは、ストレージ仕様を再定義し、今日の IO 集中型アプリケーションを効率的にサポートする最良の機会を提供します。
-
SCM に基づいて、ストレージ スタック全体の設計を再検討する必要があり、これらの新しいハードウェアのパフォーマンスを解放するために、新しいソフトウェア スタックはバイト粒度のシェアード ナッシング インターフェイスを採用し、大規模な分散ストレージをサポートできます。 。これは、オブジェクトのアドレス空間へのグローバル アクセスを通じてパフォーマンスを確保することを前提とした分散ストレージ サービスをベースにしたまったく
DAOS
新しいIO アーキテクチャでありSCM
、分散ストレージ サービスを提供します。NVMe
fabric
一致性、可用性、弹性
従来の並列ファイル システムの制限事項
-
従来の並列ファイル システムはブロック デバイス上に構築されており、IO の送信はカーネルのブロック インターフェイスを通じて行われ、IO スケジューラを通じてディスクの動作を最適化し、特性に適応するために書き込みのマージやその他の最適化手段を実行します。帯域幅を高めるために、大量のデータ ストリームを
seek
ディスクworkload
ドライブに送信します。3D-XPoint
しかし、従来のストレージよりも数桁低い低遅延を実現する新しいハードウェアが登場すると、メカニカル ディスク用に設計されたソフトウェア スタックは、これらの新しいストレージにとって大きなオーバーヘッドになるでしょう。 -
RDMA
ほとんどの並列ファイル システムは、クライアントからサーバーにpage cache
データを直接転送しbuffer cache
、サーバー上でブロック ストレージを永続化するなどの機能を提供します。ブロック デバイス IO およびネットワーク イベント用の統合ポーリング処理モデルが欠如しているため、IO 処理は中断
マルチRPC
スレッドの同時処理に大きく依存しているため、IO 処理中のコンテキスト切り替えではネットワークの低遅延を利用できません。従来の並列ファイル システムのソフトウェア スタックは引き続きストレージ デバイス上で使用cache/distribute lock
でき、より高いパフォーマンスを実現できます。3D NAND/3D-XPoint
Daos ソフトウェア アーキテクチャ
-
Daos(Distribute Asynchronous Object Storage)
これは、不揮発性メモリ (NVM) に基づくオープン ソースのカスタム オブジェクト ストレージであり、ストレージ インターフェイスと、、などの機能daos
を提供します。key-value
non-bloking I/O
数据的多版本
快照
-
Daos
NVM
ストレージ システムは、 や などのSCM(Storage Class Memory)
次世代テクノロジーを最大限に活用しNVMe(NVM express)
、kernel bypass
エンドツーエンドでユーザー モードで実行され、IO 操作中にシステム コールを必要としません。
-
上の図に示すように、
Daos
コアは 、 、 の 3 つの部分に分かれていますSCM和PMDK
。NVMe和SPDK
最初の部分は、すべてのメタデータ、アプリケーションインデックス、および遅延に敏感な小さな をlibfabric
格納するために使用されます。起動時にシステム コールを呼び出して永続メモリを初期化します。たとえば、ファイル システム機能を有効にした後、永続メモリ ファイルを仮想メモリ アドレス空間にマッピングします。システムが起動して実行されると、ユーザー モードのメモリ命令を通じて永続メモリ デバイスにアクセスできます。永続メモリ デバイスは非常に高速ですが、容量が少なくコストが高いため、メタデータの保存に非常に適しています。分散ストレージ内のデータの場合、デバイスはテクノロジを通じて目標を達成するために使用され、IO 送信は非同期で送信されます。ユーザーモードキュー完了後、これらのデータのインデックスが永続メモリに作成されます。はい、最後の部分です。ネットワーク アーキテクチャのサポートなど、主に高性能ネットワークを担当します。ユーザーモードで定義されたライブラリであると同時に、それを使用するアプリケーションに通信サービスをエクスポートし、データ送信やネットワークポーリングなどのメッセージベースの非同期機能を提供します。SCM和PMDK
daos
SCM
key
IO
daos
DAX
daos
daos
NVMe
SPDK
kernel bypass
SPDK
SPDK IO
libfabric
daos
Omni-Path/IB
libfabric
fabric
API
-
daos
新しいハードウェアとネットワーク テクノロジ、ユーザー モードで実行されるkernel bypass
分散ストレージに基づいて、現在メカニカル ディスクをサポートしている場合SCM
とNVMe
サポートしていない場合があります。 -
daos
C/S
に基づくモデルであり、アプリケーションに統合でき、アプリケーションと同じアドレス空間で実行されますdaos client
。これはマルチフォールトトレラントなプロセスであり、すべてのメタデータと小規模な IO に直接アクセスして保存し、大きな IO はそのプロセスに保存されます。同時 IO リクエストの処理に依存せず、ユーザーレベルのスレッドを使用してそれらを処理します。linrary
daos server
daemon
SCM
NVMe
SCM
NVMe
daos server
pthread
User Level Thead(ULT)
Daos データストレージ戦略
-
daos
保存されたエクスポート オブジェクトの形式key0-value
、またはkey-array
ユーザー アクセス用の API の形式で提供されます。スケーラビリティの問題とメタデータ (オブジェクト データの場所を記述するために使用されるオブジェクトのレイアウトなど) を維持するオーバーヘッドを回避するために、オブジェクトの一意性を識別するために のdaos
オブジェクトが使用され、コードも使用されます。データの配布とデータ、保護ポリシー (コピーか EC か) およびその他の情報を説明します。ストレージプールの構成に応じて乱数生成オブジェクトのレイアウトが生成される点はcephのアルゴリズムと同様の利点があります。128bit
128bit
daos
crush
-
daos server
メタデータ ストレージ用のメモリ バスへの直接接続SCM
とデータ ストレージ用のメモリ バスNVMe
への直接接続PCIe
メモリload/store
命令を使用してメモリ マップにアクセスしSCM
、次にSPDK API
ユーザー モード アクセスを使用しますNVMe
。SCM
ハードウェア障害が発生するとNVMe
、データまたはメタデータが失われますが、データ損失を確実にするために、データを保護し、データを復元するための方法がdaos
提供されています。データ保護機能が有効になっている場合、データは複数のデータ シャードおよびデータ検証シャードに複製またはチャンク化され、別のストレージ ノードに保存されます。ハードウェア障害またはノード障害が発生しても、縮退モードでアクセスできます。リカバリとは、他のコピーや検証データからリカバリすることです。replication
erasure coding
daos object
daos object
-
replication
比較的高いデータ冗長性を提供し、書き込み操作用のプロトコルdaos
を採用し、書き込みリクエストの受け入れを担当し、分散トランザクションを処理するためにリクエストを転送します。従来のレプリカモデルとは異なります。rpc を に転送するだけです。すべてのレプリカ ノード要求は、メソッドを通じてピア クライアントから直接取得されます。2 フェーズ コミット プロトコルのバリアントが使用され、1 つのレプリカが変更を適用できない場合は、すべてのレプリカに更新するように通知されます。サーバーがコピー書き込みの処理に失敗した場合、このノードをトランザクションから除外し、アルゴリズムを通じて別の通常のノードを代替ノードとして選択し、以前のトランザクションのステータスをこの通常のノードに割り当てます。この時点で障害が発生したノードが正常に戻った場合、ローカル トランザクション ステータスを無視して、データ回復プロトコルに従ってトランザクション ステータスをキャプチャします。ヘルスチェック中にノードが失敗すると、マルチノードベースのプロトコルサービスに報告され、サーバーの raft サービスはオブジェクト ID をスキャンし、各オブジェクトのレイアウトを計算し、影響を受けるすべてのオブジェクトを見つけます。アルゴリズムのオブジェクト ID がアルゴリズムの緊急サーバーに送信され、緊急ノードは他のレプリカをプルして影響を受けたデータを再構築します。primary-slave
primary replica
primary replica
slave replica
primary-slave
primary replica
slave server
RDMA
buffer
daos
daos
daos
daos-server
raft
-
Erasure Coding
より多くのスペースを節約し、スペースの使用率を向上させるデータ保護戦略を提供します。daos client
これはプロセスに統合された軽量ライブラリであるため、データの EC エンコードはクライアント上で実行され、クライアント プロセスが配置されているノードはより多くの CPU リソースを消費します。daos client
データのチェック コードを計算し、データ フラグメントとデータ チェック ブロックを作成しRDMA Destriptor
、RPC
チェック グループのリーダー サーバーにリクエストを送信して書き込み操作を調整します。この書き込み操作はコピー書き込み操作と似ています。 ec 書き込み操作はクライアントから直接実行されます。クライアントbuffer
でデータを取得するために、daos ec
2 フェーズ コミット プロトコルも採用され、さまざまなノードでのデータのアトミック書き込みが保証されます。書き込まれたデータが stripe_size と等しくない場合、ほとんどのストレージ システムは、read/encode/write
処理を通じてデータの断片化とデータ検証の一貫性を確保します。このオペレーション コードは非常に大きく (増幅の問題が原因で)、読み取りと書き込みを保証するには分散ロックが必要です。一貫性。しかしdaos
、このオーバーヘッドを回避するために、書き込まれたデータの一部をパリティサーバにコピーする方式を採用しておりMulti-version data module
、パリティサーバはコピーデータからパリティデータを簡単に計算することができます。読み取りプロセス中にノードに障害が発生した場合、daos
縮退読み取りが行われ、daos client
まずすべてのデータのストライプ情報を取得して失われたデータを再構築し、2 フェーズ コミット プロトコルを採用して通常のサーバー ノードにトランザクションを渡します。その後、失われたデータを処理し、データを再構築します。 -
daos
障害には 3 つの種類があり、1 つはdaos
ゴシップのようなプロトコル SWIM によって処理されるサービス クラッシュ、2 つ目はポーリング装置の状態によって判断される障害、3 つ目は検出され、記録媒体の障害となりNVMe
ます。保存し、チェックサムを確認して確認します。サーバーは書き込みリクエストを受信すると、チェックサムを検証するか、チェックサムとデータを保存します。検証機能は、パフォーマンス要件に応じてサーバー側で有効または無効にすることができます。アプリケーションが再びデータの読み取りに戻ったとき、読み取られたデータが以前に書き込まれたデータと一致している場合、サーバーはデータとチェック コードを直接返します。そうでない場合、daos サーバーは読み取り操作に含まれるデータ ブロックのチェック コードを検証します。を実行し、読み取ったデータチェックコードの値を計算し、データとチェックコードをクライアントに返します。daos クライアントが読み取りプロセス中に検証コード エラーを検出した場合、劣化読み取りが有効になるか、クライアント上のデータの読み取りまたは再構築のために他のレプリカに切り替えられます (ec モード)。クライアントはまた、検証コードのエラーをサーバーに報告します。サーバーは、検出と検証を通じてすべての検証コード エラーを収集し、合計を実行してクライアントに報告します。daos
SPDK
daos
vefify
scrubbing
Daos データモデル
-
daos
データ モデルには 2 つの異なるオブジェクト形式が含まれており、1 つはarray objects
アプリケーションが多次元配列形式を提示できるようにするもので、もう 1 つはkey/value
オブジェクト データを保存するもので、このメソッドは kv インターフェイスとmulti-level
kv インターフェイスを提供します。どちらの形式でも、データ オブジェクトはバージョン管理されているため、アプリケーションはデータの以前のバージョンに簡単にロールバックできます。各オブジェクトはドメイン (daos container
) に属し、各コンテナにはプライベート オブジェクト アドレス空間があり、トランザクション処理もポーリング内の他のコンテナから独立しています。
-
daos
posix セマンティクスへのアクセスをサポートします。Posix はdaos
ストレージ モデルの機能ではなく、daos
バックエンド API 上に構築されたライブラリです。posix ファイル システムの名前空間が含まれています。posixdaos container
API は、fuse
daos エンジン API (libdaos) を使用して駆動されます) および daos ファイル システム API (libdfs) を使用してデータにアクセスします。