NDIS PacketDirect 提供程序接口简介

PacketDirect 提供程序接口 (PDPI) 使用加速 I/O 模型扩展 NDIS,适用于物理和虚拟环境,与传统 NDIS I/O 路径相比,每秒处理的数据包数可以增加一个数量级,并显著降低抖动。

背景

Windows 中的传统 I/O 模型实现为多用途通用 I/O 平台,旨在处理具有许多不同特征的多种媒体类型,其中网络只是整个系统的一个方面。 如今,随着网络虚拟化已成为数据中心中普遍存在的技术,Windows Server OS 中的传统 NDIS I/O 模型不仅不足以跟上预期越来越常见的网络密集型工作负载,而且是将资源专用于网络 I/O 处理的不适当的模型。 在数据中心环境中,实现专用于网络的单一用途计算机执行通常为硬件设备保留的功能并不少见。 这些网络设备的示例包括软件负载均衡器、DDoS 设备和转发网关。 更糟的是,其他 OS 上存在加速 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 通过 PacketDirect 客户端接口 (PDCI) ,使 PD 客户端能够控制 NIC 的高性能发送和接收功能。 在内部,PDCI 发送/接收函数直接映射到 PDPI。 PD 发送/接收函数对 PD 客户端在支持 PD 的 NIC 上创建的 PD 队列进行操作。 PD 使 PD 客户端能够根据 PD 客户端的需求为非常特定的流量类型或非常通用的流量设置自定义筛选器。 这允许 PD 客户端将某些传入数据包定向到其 PD 队列。 PD 模型中的数据包处理始终发生在 PD 客户端拥有 (或控制/协调) 的执行上下文中。 支持 PD 的 NIC 驱动程序是完全被动的,这意味着它不会主动将传入的数据包或完成指示转发到驱动程序拥有的执行上下文(如 DPC 或工作线程)中的 PD 客户端。

如果 PD 客户端不了解如何处理数据包或接收其中一个队列(例如 ARP、LLDP 或其他协议数据包)中的控制数据包,则 PD 客户端可以将数据包重新路由回当前 I/O 路径进行处理。 这样,PD 就可以继续处理其具有上下文的数据包,而不是在控制流量上浪费周期。

重要 每个 NET 适配器可以有一个 PD 提供程序和一个 PD 客户端。 因此,单个系统上可以有多个 PD 客户端和 PD 提供程序。

PD 客户端可以控制系统中分配给 PD 的资源。 在网络流量较高的情况下,PD 客户端负责尽量减少其工作负荷,以便 OS 能够响应其他工作负载。

Windows 实现的 PacketDirect 平台将客户端接口映射到提供程序接口。 平台控制缓冲区管理和将通过 PD 接收的数据包重新注入当前 NDIS 接收路径的能力。 它还处理与 PD 客户端的交互,以满足 NDIS 控制路径要求,例如 NIC 禁用、进入低功耗、系统关闭和意外删除,这不会妨碍 PD 数据路径的性能。

PacketDirect 提供程序接口 (PDPI)

PDPI 允许 NIC 驱动程序向 Windows OS 公开其高性能发送和接收功能。 实现的函数是完整 MiniPort 功能的子集,是实现 PD 的所有 NIC 的通用函数。 有关 PDPI 的参考文档,请参阅 PacketDirect 提供程序接口 (PDPI) 参考

PacketDirect 客户端接口 (PDCI)

PDCI 允许第一方 Windows 服务/应用程序 (例如负载均衡器、NAT、VM 交换机等) 通过使用 PD 客户端来利用 PacketDirect I/O 模型来加速其数据路径。 此接口是第 2 层接口,就像当前 NDIS 发送/接收接口一样。 除了 PDPI 访问) PDPI 访问之外,PDCI main功能还提供 (,PD 数据包缓冲区分配/管理是用于将数据包注入回常规 NDIS 接收路径、处理 NDIS 电源/PnP 事件的后通道。

PacketDirect 提供程序接口 (PDPI) 参考