不支持 RSS 的端口驱动程序会按照本主题所述的方式处理接收过程。
下图演示了非 RSS 接收处理。
在图中,虚线路径表示发送和接收处理的备用路径。 由于系统负责调度分配,处理并不总是在提供最佳性能的 CPU 上进行。 只有当在连续中断中偶然情况下,连接才会在同一 CPU 上处理。
以下过程会针对每个非RSS中断周期重复执行:
NIC 使用 DMA 填充接收的数据缓冲区并中断系统。
微型端口驱动程序在初始化期间在共享内存中分配了接收缓冲区。
NIC 可以随时在此中断周期中继续填充其他接收缓冲区。 但是,在微型端口驱动程序启用中断之前,NIC 不会再次中断。
系统在一个中断周期中处理的接收缓冲区可以与许多不同的网络连接相关联。
NDIS 在系统确定的 CPU 上调用微型端口驱动程序的 MiniportInterrupt 函数 (ISR)。
理想情况下,ISR 应转到最不忙的 CPU。 但是,在某些系统中,系统将 ISR 分配给可用的 CPU 或与 NIC 关联的 CPU。
ISR 暂时禁用中断,并请求 NDIS 排队处理收到数据的延迟过程调用(DPC)。
NDIS 在当前 CPU 上调用 MiniportInterruptDPC 函数(DPC )。
DPC 版本接收所有接收到的缓冲区的描述符,并将数据上传至驱动程序堆栈。 有关详细信息,请参阅 接收网络数据。
许多不同连接的缓冲区可能有很多,并且可能需要完成大量处理。 可以在其他 CPU 上处理与后续中断周期关联的已接收数据。 给定网络连接的发送处理也可以在不同的 CPU 上运行。
DPC 启用中断。 此中断周期已完成,进程将再次启动。