137、调试手记:为什么我的PCIE网卡死活跑不满万兆?上周在实验室调试一块新的万兆网卡,硬件配置看起来一切正常:服务器是双路Xeon,PCIE 3.0 x8插槽,驱动也显示链路训练成功。但iperf3一跑,吞吐量卡在4Gbps就上不去了。用lspci -vv一看,ASPM状态显示为L1,链路速度明明协商在8GT/s,为什么实际带宽对不上?PCIE在网卡中的核心角色现代网卡早就不再是简单的PHY+MAC组合。从10G到100G,甚至400G网卡,PCIE接口已经成为性能的关键瓶颈。网卡上的数据流大致是这样的:以太网帧通过PHY进入,经过MAC层校验,DMA引擎通过PCIE总线将数据包直接写入主机内存,整个过程CPU几乎不参与数据搬运。这里有个关键点:PCIE的标称带宽和实际可用带宽是两码事。一块PCIE 3.0 x8的网卡,理论带宽接近8GB/s,但实际能用到7GB/s就已经很不错了。开销在哪里?TLP包头、数据链路层重传、流控信用机制都在吃带宽。网卡DMA的“暗箱操作”网卡最核心的PCIE功能就是DMA。驱动初始化时会在内存中分配一组描述符环(Descriptor Ring),每个描述符指向一个数据缓冲区地址。网卡硬件直接读取这些描述符,通过PCIE发起MemWr TLP包把数据写入主机内存。// 典型的描述符结构(示意)