NDIS PacketDirect 提供者介面簡介
對於實體和虛擬環境,PacketDirect 提供者介面 (PDPI) 擴充 NDIS 與加速 I/O 模型,可增加每秒處理的封包數目,並相較于傳統的 NDIS I/O 路徑,大幅減少抖動。
背景
Windows 中的傳統 I/O 模型實作為多用途的一般 I/O 平臺,其用途是使用具有許多不同特性的多個媒體類型,且網路功能只是整體系統的一個層面。 現今,由於網路虛擬化在資料中心已成為普遍的技術,因此 Windows Server OS 中的傳統 NDIS I/O 模型不僅不足以跟上我們預期更常見且更常見的網路密集工作負載,也不適合將資源專用於網路 I/O 處理。 在資料中心環境中,實作專用於網路功能的單一用途機器,通常保留給硬體設備的功能並不常見。 這些網路設備的範例包括軟體負載平衡器、DDoS 設備及轉送閘道。 為了更糟,其他作業系統上有一些機制可加速 I/O,讓這些替代 OS 成為建置大量網路應用裝置等大量網路應用平臺的慣用平臺。
PacketDirect (PD) 會使用針對每秒封包優化的加速網路 I/O 路徑來擴充目前的 NDIS 模型, (pps) 計算大於傳統 NDIS I/O 模型所見的大小順序。 這是透過下列方式完成:
- 降低延遲
- 減少迴圈/封包
- 使用其他系統資源時,線性加速
PacketDirect 與傳統模型並存。 當應用程式偏好新的 PD 路徑,而且有足夠的硬體資源容納它時,可以使用新的 PD 路徑。 PD 並非取代傳統的 I/O 模型,並假設寫入 PD 介面的用戶端會根據系統拓撲,對基礎資源有嚴格的資料分割需求。 PD 是新的高速資料路徑,可協助 Windows 系統取代傳統在硬體中完成的高 pps 工作負載,節省資料中心擁有者數百萬的基礎結構成本。
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 驅動程式是完全被動的,這表示它不會主動轉送傳入封包,也不會主動將封包傳送至驅動程式擁有的執行內容中的 PD 用戶端,例如 DPC 或背景工作執行緒。
如果 PD 用戶端不知道如何處理封包,或在其其中一個佇列中接收控制封包,例如 ARP、LLDP 或其他通訊協定封包,PD 用戶端可以將封包重新路由回目前的 I/O 路徑進行處理。 這可讓 PD 繼續處理其具有內容且不會浪費迴圈來控制流量的封包。
重要 每個網路介面卡可以有一個 PD 提供者和一個 PD 用戶端。 因此,單一系統上可以有多個 PD 用戶端和 PD 提供者。
PD 用戶端可控制配置給系統中 PD 的資源。 在高網路流量的情況下,PD 用戶端會負責將工作負載降至最低,讓 OS 可以回應其他工作負載。
Windows 所實作的 PacketDirect 平臺會將用戶端介面對應至提供者介面。 平臺會控制緩衝區管理和重新插入透過 PD 接收的封包至目前的 NDIS 接收路徑的能力。 它也會處理與 PD 用戶端的互動,以滿足 NDIS 控制路徑需求,例如 NIC 停用、進入低電源、系統關機,以及意外移除,以不符合 PD 資料路徑效能的方式移除。
PDPI (PacketDirect 提供者介面)
PDPI 可讓 NIC 驅動程式向 Windows OS 公開其高效能傳送和接收功能。 實作的函式是完整 MiniPort 功能的子集,而且是實作 PD 的所有 NIC 的泛型。 如需 PDPI 的參考檔,請參閱 PacketDirect 提供者介面 (PDPI) 參考。
PACKETDirect 用戶端介面 (PDCI)
PDCI 允許第一方 Windows 服務/應用程式 (例如負載平衡器、NAT、VM-switch 等) ,透過使用 PD 用戶端利用 PacketDirect I/O 模型來加速其資料路徑。 此介面是第 2 層介面,就像目前的 NDIS 傳送/接收介面一樣。 除了 PDPI 存取) ,PDCI 還提供 (的主要功能是 PD 封包緩衝區配置/管理、將封包插入回一般 NDIS 接收路徑、處理 NDIS 電源/PnP 事件。