尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

windows网络适配器驱动开发-网络数据缓冲区管理

windows网络适配器驱动开发-网络数据缓冲区管理
📅 发布时间:2026/7/6 14:59:05

缓冲区管理是一项功能,它使网络接口卡 (NIC) 客户端驱动程序和操作系统在从系统内存为发送 (Tx) 和接收 (Rx) 数据路径分配数据包缓冲区时能够协同工作。 这可以提高 NIC 的性能,简化 NIC 客户端驱动程序的内存生命周期管理,同时增强系统对内存的控制。

NetAdapterCx 中缓冲区管理的优点

选择从系统内存中为数据包有效负载分配数据缓冲区的位置,对数据路径的性能至关重要。 在 NetAdapterCx 中,缓冲区管理模型针对支持 DMA 的 NIC 硬件进行了优化,客户端驱动程序利用该模型的最佳方式是让系统代表它们为 Tx 和 Rx 路径分配数据缓冲区。 但是,客户端驱动程序仍可影响系统分配数据缓冲区的位置和方式,以便客户端硬件能轻松使用这些缓冲区。

以具有 DMA 功能的典型网卡为例。 这种方法有几个好处:

  • 数据缓冲区由系统分配和释放。 因此,客户端驱动程序可以摆脱内存生命周期管理的负担。
  • 系统会根据客户端驱动程序声明的功能,确保分配的数据缓冲区已为 NIC 硬件准备好 DMA。 然后,客户端驱动程序只需将数据缓冲区按原样编程到硬件中,而无需执行任何额外的 DMA 映射操作。
  • 在分配数据缓冲区时,系统可以考虑上层应用程序的需求,从而决定优化全局端到端性能,而不是只优化本地端到端性能。

对于不支持 DMA 的 NIC(如基于 USB 的网络硬件保护装置)或其他高级/软件 NIC,缓冲区管理模式还提供了一个选项,即完全由客户端驱动程序来管理数据缓冲区。

如何利用缓冲区管理

如果硬件支持 DMA,则需要在设置 Rx 和 Tx 功能之前创建一个 WDFDMAENABLER 对象。 使用 WDF_DMA_ENABLER_CONFIG 结构来配置 WDFDMAENABLER 对象时,请确保将 WdmDmaVersionOverride 成员设置为 3,以指定 DMA 版本 3。

要选择缓冲区管理,请按照以下步骤操作:

  • 启动网络适配器时,要在调用 NetAdapterStart 之前使用 NET_ADAPTER_RX_CAPABILITIES 和 NET_ADAPTER_TX_CAPABILITIES 数据结构分别告诉系统有关 Rx 和 Tx 路径的硬件数据缓冲区功能和限制。
  • 调用其中一个初始化函数,以便初始化两个功能结构。 例如,支持 DMA 的 NIC 客户端驱动程序将使用 NET_ADAPTER_TX_CAPABILITIES_INIT_FOR_DMA 和 NET_ADAPTER_RX_CAPABILITIES_INIT_SYSTEM_MANAGED_DMA 来声明其硬件 DMA 能力,并指示系统完全代为管理数据缓冲区。
  • 将初始化的 Tx 和 Rx 功能结构传递给 NetAdapterSetDatapathCapabilities 方法。
示例

以下示例说明了如何在 NIC 客户端驱动程序中使用缓冲区管理器的基本步骤。 该示例的 Tx 和 Rx 均使用 DMA,因此之前创建了一个 WDFDMAENABLER 对象,并将其存储在设备上下文空间中。

请注意,在初始化 Tx 和 Rx 功能结构后,该示例还设置了一些有关片段缓冲区的提示。 NetAdapterCx 和协议驱动程序可以使用这些提示来提高性能。

为清晰起见,此处省略了错误处理。

VOID MyAdapterSetDatapathCapabilities( _In_ NETADAPTER Adapter ) { // Get the device context PMY_DEVICE_CONTEXT deviceContext = GetMyContextFromDevice(Adapter); // Set various capabilities such as link layer MTU size, link layer capabilities, and power capabilities ... // Initialize the Tx DMA capabilities structure NET_ADAPTER_DMA_CAPABILITIES txDmaCapabilities; NET_ADAPTER_DMA_CAPABILITIES_INIT(&txDmaCapabilities, deviceContext->dmaEnabler); // Set Tx capabilities NET_ADAPTER_TX_CAPABILITIES txCapabilities; NET_ADAPTER_TX_CAPABILITIES_INIT_FOR_DMA(&txCapabilities, &txDmaCapabilities, 1); txCapabilities.FragmentRingNumberOfElementsHint = deviceContext->NumTransmitControlBlocks * MAX_PHYS_BUF_COUNT; txCapabilities.MaximumNumberOfFragments = MAX_PHYS_BUF_COUNT; // Initialize the Rx DMA capabilities structure NET_ADAPTER_DMA_CAPABILITIES rxDmaCapabilities; NET_ADAPTER_DMA_CAPABILITIES_INIT(&rxDmaCapabilities, deviceContext->dmaEnabler); // Set Rx capabilities NET_ADAPTER_RX_CAPABILITIES rxCapabilities; NET_ADAPTER_RX_CAPABILITIES_INIT_SYSTEM_MANAGED_DMA(&rxCapabilities, &rxDmaCapabilities, MAX_PACKET_SIZE + FRAME_CRC_SIZE + RSVD_BUF_SIZE, 1); rxCapabilities.FragmentBufferAlignment = 64; rxCapabilities.FragmentRingNumberOfElementsHint = deviceContext->NumReceiveBuffers; // Set the adapter's datapath capabilities NetAdapterSetDatapathCapabilities(Adapter, &txCapabilities, &rxCapabilities); }

相关新闻

  • 编排模式:中央协调 + 子任务分配
  • deepseek 导出遇格式难题?AI 导出鸭轻松实现高效无损文档导出
  • 抖音内容批量下载全攻略:开源工具助你高效获取无水印素材

最新新闻

  • 如何用PySide2快速构建现代化Python桌面应用界面?
  • 10个必备的KQL威胁狩猎查询:轻松掌握威胁狩猎技巧
  • 3DS游戏文件处理神器:轻松解密与下载CIA文件
  • npm_lazy:如何打造你的本地NPM缓存服务器,让依赖安装速度提升10倍?
  • 如何在Linux系统上运行Adobe Creative Cloud:终极指南
  • 如何使用Contentport打造高效技术内容:从安装到发布的快速教程

日新闻

  • AI智能体安全防护框架AgentGuard:从原理到实战部署指南
  • KMX63与PIC18F26K40硬件组合及低功耗设计实践
  • 基于YOLO13改进的门体检测模型:C3k2模块与PoolingFormer技术解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号