![pageSearch](/themes/hestia/images/page-search.webp)
NVMe/TCP を高速化
![May 22, 2023](/themes/hestia/images/news-details-icon1.webp)
プレゼンテーションをダウンロードします。NVMe/TCP を高速化
私はサギ・グリムバーグです。 私は Lightbits Labs の CTO 兼共同創設者であり、NVMe over TCP 標準仕様の共同作成者でもあります。
それでは、短いイントロから始めます。 NVMe over TCP とは何ですか? NVMe over TCP は、標準の TCP/IP ネットワーク上で NVMe を実行する標準のトランスポート バインディングです。 これは、TCP/IP ソケット上で実行されるキュー インターフェイスとマルチキュー インターフェイスを定義する標準 NVMe 仕様に従います。 これには標準の NVMe コマンド セットがあり、TCP のストリームをマッピングする NVMe/TCP PDU と呼ばれるものにたまたまカプセル化されているだけです。 したがって、ここの図には、基本的に NVMe アーキテクチャ、管理、I/O、およびその他のコマンド セットを定義するコア アーキテクチャがあります。
01:14 シンガポール:その下には、カプセル、プロパティ、ディスカバリーを定義する NVMe over Fabrics があります。 また、NVMe over TCP は基本的に追加の機能とメッセージングを定義し、基盤となるファブリック自体 (この場合は TCP/IP) へのトランスポート マッピングも定義します。
では、キューは NVMe over TCP によってどのように処理されるのでしょうか、あるいは NVMe over TCP でキューはどのように定義されるのでしょうか? 基本的に、各キューは双方向 TCP 接続にマップされ、コマンドによるデータ転送は通常、ソフトウェアまたはハードウェアのいずれかで専用のコンテキストによって処理されます。 したがって、この図の左側には、NVMe トランスポート自体へのキューイング インターフェイスと、送信キューと完了キューを持つホストがあります。 すべての送信と完了は、NVMe-TCP I/O スレッドと呼ばれるもの、または I/O を発行しているホストまたはネットワークからトリガーされる I/O コンテキストで処理され、通常は I/O を完了するか受信します。データ。
02:24 シンガポール:同じ状況が右側のコントローラーでも発生します。基本的に、これはホストとコントローラー間のデータ転送を担当するコンテキストです。 したがって、これらの各キューは実際には専用の CPU に通常マッピングされますが、必ずしもそうではありません。実際にはそれより多くなる可能性もあれば、少なくなる可能性もありますが、重要なのは、コントローラー全体のシリアル化がないため、すべてのキューが共有 CPU に依存しないということです。テープを他のキューと共有するため、非常に並列になります。 ここの図は、キューのセットについて以前に示した標準的な図です。ホストとコントローラーの間には管理キューもあり、次に一連の I/O キュー、送信キューと完了キューであるキュー ペアもあります。 。 NVMe/TCP では、基本的にこれらの各キューは双方向 TCP 接続にマップされます。 したがって、レイテンシーの寄与を調べてみると、忍び寄る可能性のあるものがいくつかあります。 まず第一に、シリアル化ですが、NVMe/TCP ではかなり軽量であり、キューごとに基づいているため、拡張可能です。かなりよく。
この記事はの一部です
03:43 シンガポール:コンテキストの切り替え。 したがって、ドライバー自体によって提供されるメモリ コピー (通常は骨董品) が少なくとも 2 つあり、カーネル レベルのドライバーとしてゼロ コピーを行うことができます。 ただし、RX ではメモリ コピーを実行します。これは大きな要因ではありませんが、非常に高い負荷では、追加のレイテンシーに寄与する可能性があります。 割り込み (NIC 割り込み) は明らかに影響を及ぼし、CPU を消費し、単一のキューが達成できる量のスケーラビリティに影響を与えます。 LRO と GRO があるため、または適応割り込みモデレーションを使用すると、この問題を少し軽減できますが、レイテンシの一貫性が低下する可能性があります。 次に、ソケットのオーバーヘッドがあります。これは存在しますが、実際には大きくありません。マルチキュー インターフェイスでソケットがほとんど競合しないことを考えると、かなり高速ですが、小規模な I/O では影響を与える可能性があります。 割り込み、アプリケーション、および I/O スレッド間のアフィニティ化は、正しく構成されていない場合に影響を与える可能性があります。これについては後ほど詳しく説明します。 明らかに、メモリ コピーに起因するキャッシュ汚染は多少ありますが、十分な大きさのキャッシュを備えた最新の CPU コアでは、それほど過剰なものではありません。
05:15 シンガポール: