NDIS PacketDirect プロバイダー インターフェイスの概要
PacketDirect プロバイダー インターフェイス (PDPI) は、物理環境と仮想環境の両方で、高速化された I/O モデルを使用し、NDIS を拡張し、毎秒処理されるパケット数を従来の NDIS I/O パスと比較して桁違いに増やし、ジッターを大幅に減らします。
背景
Windows の従来の I/O モデルは、さまざまな特性を持つ複数のメディア タイプで動作させることを目的とした、多目的で汎用の I/O プラットフォームとして実装されており、その状況では、ネットワークはシステム全体の 1 つの側面にすぎませんでした。 現在、ネットワーク仮想化がデータセンターで普及しているテクノロジーである、Windows Server OS 内の従来型 NDIS I/O モデルは、ますます一般的になることが予想されているネットワーク集中型のワークロードに対応するのに十分なだけでなく、ネットワーク I/O 処理にリソースを専念する不適切なモデルでもあります。 データセンター環境では、通常はハードウェア アプライアンス用に予約されていた機能を実行できる、ネットワーク専用の単一目的のマシンを実装することは、珍しいことではありません。 これらのネットワーク アプライアンスの例としては、ソフトウェアロード バランサー、DDoS アプライアンス、転送ゲートウェイなどがあります。 さらに悪いことに、他の OS には、I/O を高速化するメカニズムがあり、これらの代替 OS は、仮想アプライアンスなどのネットワーク集約型アプリケーションを構築できる、好ましいプラットフォームとなっています。
PacketDirect (PD) は、従来の NDIS I/O モデルで見られたものよりも桁違いに高い、1 秒あたりのパケット数 (PPS) に最適化された高速ネットワーク I/O パスを使用して、現在の NDIS モデルを拡張します。 これは、次の方法で実現されます。
- 待機時間の低減
- サイクル数/パケットの削減
- 追加のシステム リソースの使用による直線的な高速化
PacketDirect は、従来のモデルと並行して存在します。 新しい PD パスは、アプリケーションがそれを好み、それに対応するのに十分なハードウェア リソースがある場合に使用できます。 PD は、従来の I/O モデルを置き換えることを意図したものではなく、PD インターフェイスに書き込むクライアントには、システム トポロジーに基づいて、基になるリソースに対し、厳密なパーティション分割要件があることを前提としています。 PD は、従来、ハードウェアで行われていた高 pps ワークロードを Windows システムが置き換えるのに役立つ、新しい高速データパスであり、データセンターの所有者は、インフラストラクチャ コストを数百万ドル節約できます。
PacketDirect の概念
PD は、PD クライアントがネットワーク アダプター (NIC) からネットワーク トラフィックを明示的に管理できるように機能します。 PD は、PD クライアントが PacketDirect クライアント インターフェイス (PDCI) を介して NIC の高パフォーマンスの送受信機能を制御できるようにします。 内部的には、PDCI 送信/受信機能は、PDPI に直接マップされます。 PD 送受信機能は、PD 対応 NIC の PD クライアントで作成された PD キューで動作します。 PD は、PD クライアントのニーズに基づいて、非常に特殊な種類のトラフィック、または非常に一般的なトラフィックに対し、カスタム フィルターを設定する機能を PD クライアントに提供します。 これにより、PD クライアントは、特定の受信パケットを PD キューに送信できます。 PD モデルでのパケット処理は、常に、PD クライアントによって所有 (または、制御/調整) される実行コンテキストで行われます。 PD 対応 NIC ドライバーは完全にパッシブであり、受信パケットや送信されたパケットの完了表示を、DPC やワーカー スレッドなどのドライバー所有の実行コンテキストで、PD クライアントにアクティブに転送しません。
PD クライアントがパケットの処理方法を理解していない場合、または、PD クライアントが ARP、LLDP、その他のプロトコル パケットなどのキューの 1 つで制御パケットを受信した場合、PD クライアントは処理のために、現在の I/O パスにパケットを再ルーティングできます。 これにより、PD は、コンテキストを持つパケットの処理を続行して、制御トラフィックのサイクルを無駄にしないようにすることができます。
重要 : ネット アダプターごとに、1 つの PD プロバイダーと 1 つの PD クライアントが存在する可能性があります。 そのため、1 つのシステム上に、複数の PD クライアントと PD プロバイダーが存在する可能性があります。
PD クライアントは、システム内の PD に割り当てられるリソースを制御します。 ネットワーク トラフィックが多い場合、OS が他のワークロードに対応できるように、PD クライアントはワークロードを最小限に抑える役割を担います。
Windows によって実装される PacketDirect プラットフォームは、クライアント インターフェイスを、プロバイダー インターフェイスにマップします。 プラットフォームは、バッファー管理と、PD 経由で受信したパケットを、現在の NDIS 受信パスに再挿入する機能を制御します。 また、PD クライアントとの対話も処理することで、PD データ パスのパフォーマンスを妨げない方法で、NIC の無効化、低電力への移行、システムのシャットダウン、突然の削除などの NDIS 制御パス要件を満たします。
PacketDirect プロバイダー インターフェイス (PDPI)
PDPI を使用すると、NIC ドライバーは、高パフォーマンスの送受信機能を、Windows OS に公開できます。 実装される関数は、完全なミニポート機能のサブセットであり、PD を実装するすべての NIC に汎用的です。 PDPI のリファレンス ドキュメントについては、「PacketDirect プロバイダー インターフェイス (PDPI) リファレンス」を参照してください。
PacketDirect クライアント インターフェイス (PDCI)
PDCI を使用すると、ファーストパーティの Windows サービス/アプリケーション (ロードバランサー、NAT、VM スイッチなど) は、PD クライアントを使用して PacketDirect I/O モデルを活用することで、データ パスを高速化できます。 このインターフェイスは、現在の NDIS 送信/受信インターフェイスと同様に、レイヤー 2 インターフェイスです。 PDCI が提供する主な機能は (PDPI アクセスに加えて)、PD パケット バッファーの割り当て/管理、通常の NDIS 受信パスにパケットを挿入し、NDIS 電源/PnP イベントの処理をするためのバック チャネルです。