尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

网卡与IO Die微架构:Scale-up/Scale-out场景调优实战

网卡与IO Die微架构:Scale-up/Scale-out场景调优实战 做数据中心硬件这行十几年最常被问倒的问题从来不是交换机选哪家而是同一台机器换一块网卡之后为什么带宽和延迟表现能差出一大截同一个集群里为什么有人用 Scale-up 方案跑得飞快有人用 Scale-out 却延迟爆炸。原因往往不在交换机、不在协议栈而在“端点”——每台服务器上的网卡和 IO Die。交换机只把包从一个口搬到另一个口行为固定、方案成熟真正的复杂性全堆在网络末端网卡要收包、DMA、中断 CPU、维护一致性、支撑虚拟化还得在微秒级完成这一整套动作。这篇文章就想把 Scale-up / Scale-out 场景下网卡与 IO Die 微架构里那些“最难的一半”拆开讲清楚。标题里的观点我特别认同端点才是最难的那一半。接下来我会先梳理两种扩展方式对端点的不同要求再拆解 IO Die 内部那些关键微架构组件然后分别讲 Scale-up 和 Scale-out 场景下网卡与 IO Die 应该如何设计和调优最后落到数据中心里真实踩过的坑和排查方法。做过服务器选型、网络调优或者虚拟化平台维护的人应该都能从中找到对应的经验。1. 先把 Scale-up 和 Scale-out 说透再说端点为什么难1.1 两种扩展方式的本质差异Scale-up 通常翻译成纵向扩展手段是在单台机器里堆更多 CPU、内存和 IO 设备。早期大家觉得这事简单加内存条、换更高主频的 CPU 就行但走到今天单机内部的瓶颈已经不再是 CPU 频率而是数据搬移路径。CPU 核心之间要通信内存要共享网卡的数据要进内存GPU 的数据要进 CPU这条路径上有总线、有内存控制器、有 IO Die任何一个环节拉胯整机性能都上不去。Scale-out 则是横向扩展思路是让一堆普通机器通过网络连成一个整体靠分布式软件把负载分摊开。互联网公司大规模集群基本都是这么做的好处是扩展时不用换昂贵的大机器加几台廉价服务器就行。但坏处也明显网络会成为新的瓶颈机器越多节点间通信越频繁对网卡和网络协议的要求就越高。用大白话讲Scale-up 像是一个大力士在搬箱子力气不够就得升级肌肉和骨骼这个“肌肉和骨骼”就是总线、内存控制器和 IO DieScale-out 像是一群普通人搬箱子每个人只需要搬好自己的那部分但麻烦在于仓库门口的路只有一条谁来谁走的顺序、堵车怎么处理靠的就是网卡和网络协议。这两个方向的共同点在于最终压力都会落在端点设备上只是表现方式不一样。1.2 真正复杂的部分为什么全在网络末端很多人一提到数据中心性能第一时间想到交换机、光模块、链路带宽这些当然重要但它们是“公共设施”只要部署一次所有机器共享同一套规则行为相当固定。端点的难处在于每台机器上的网卡和 IO Die 都要独立面对一整条数据通路上的所有问题。以接收方向为例网卡从物理线上收到一个数据包之后要做的事情包括解析包头、校验、找到对应的接收队列、把数据通过 DMA 写入内存、通知 CPU 有数据到达。光这一步就涉及硬件队列管理、DMA 引擎、中断控制器、内存子系统任何一个环节处理不好都会丢包或增加延迟。发送方向同样不轻松CPU 先把数据写到内存通知网卡去读网卡还要做分段、封装、调度发送。这些动作全都发生在端点上。交换机的任务是“转发”端点的任务是“交付”。转发是相对机械的交付却要贴着 CPU 和内存工作涉及缓存一致性、NUMA 拓扑、虚拟化隔离等一系列问题。所以我们在数据中心里遇到的网络问题往往不是交换机丢包而是某台机器的网卡驱动有 bug、中断绑到了错误的 CPU、或者 IO Die 上的队列被某个租户挤爆了。这些问题的根子全在端点微架构上。2. 端点的核心IO Die 与网卡的微架构2.1 一个数据包从网线到 CPU 的完整旅程为了说清楚 IO Die 的作用我们先走一遍数据包的完整旅程。假设有一台双路服务器物理网卡插在 PCIe 槽位上当网络包从网线进来时第一站是网卡上的 MAC 和 PHY它们负责把模拟信号变成数字帧。接着网卡内部的 DMA 引擎会把帧数据搬到主机内存里但搬到哪个内存地址可不是随便定的驱动在初始化时已经把一块内存区域通常叫 DMA ring buffer分配给这个队列并把这个地址告诉网卡。数据写入内存之后网卡会发一个中断通知 CPU。这里有个关键点如果每次来一个包就中断一次 CPU高吞吐场景下 CPU 会被彻底淹没。所以现代网卡有中断合并机制攒一批包再通知一次代价是延迟变大。这个“延迟 vs CPU 开销”的权衡就是网卡微架构设计的经典问题。中断到达 CPU 之后CPU 上的网卡驱动会把 sk_buff 或者 mbuf 交给协议栈或者用户态应用。在这一整条路径里IO Die 扮演的角色是“中转站”它管理 PCIe 链路负责 DMA 映射处理一致性协议连接内存控制器。你购买的服务器宣传页上说的“支持 100GbE”只是网卡的端口速率真正决定你能不能跑满这个速率的是 IO Die、内存控制器和 PCIe 拓扑合在一起的能力。2.2 IO Die 的关键组件和设计权衡现代多 Die 架构的 CPU外部 IO 功能集中在一个或者多个 IO Die 上CPU 计算核心在另外的 CCD 或 tile 上。IO Die 内部有几个关键组件值得关注。第一个是 PCIe Root Complex它负责管理所有 PCIe 设备。每个 Root Complex 下有多个 Root Port每个 Root Port 可以接一个设备或一个 PCIe Switch。PCIe 的 lane 数量直接决定设备带宽上限比如 PCIe 4.0 x16 的理论带宽是 64GB/sPCIe 5.0 x16 翻倍到 128GB/s。可很多服务器实际布线时网卡插在不同的 Root Port 下链路带宽可能只有 x8 甚至 x4这个坑后面实操部分会细讲。第二个是 IOMMU也就是输入输出内存管理单元。它负责把设备的 DMA 请求做地址翻译和隔离。虚拟化场景下 IOMMU 尤其重要因为直通给虚拟机的网卡不能乱写宿主机内存。但 IOMMU 翻译是有开销的高吞吐场景下如果没开硬件加速DMA 性能可能掉得很难看。第三个是缓存一致性协议相关的代理。它的任务是保证网卡写入内存的数据和 CPU 看到的缓存数据是一致的。Scale-up 场景里这个问题会被放大因为可能有多颗 CPU 共同访问同一块内存甚至多台机器通过 CXL 共享内存IO Die 上的一致性代理必须高效处理各种监听、转发操作。设计权衡方面常见的矛盾是队列深度、缓存大小和芯片面积。要支持更多的 DMA 队列就得占用更多片上缓存和逻辑门要降低一致性访问的延迟就得增加 snoop filter 的容量。这些都会推高成本和功耗所以厂商必须在不同性能档位之间做取舍。这就是为什么同样是 100GbE 网卡服务器配套的 IO Die 设计不同实测性能天差地别。2.3 性能瓶颈的真相不是带宽是异步路径员工做网络性能测试时经常只盯着带宽这个数字。但实际在数据中心的业务里大量小包和高并发连接才是常态这时候瓶颈往往不在“带宽”而在异步路径处理能力上。带宽是物理层能力跟链路速率和 DMA 宽度相关异步路径能力是“单位时间内能处理多少个独立的小粒度事件”包括描述符处理、中断、页表遍历、一致性消息等。拿收包来说即使链路是 100GbE如果网卡每个包都要 CPU 参与一次中断和软中断处理那么 CPU 每秒最多只能处理几十万个包离线速相差几个数量级。要解决这个问题就必须靠网卡和 IO Die 的硬件卸载能力比如多队列、RSS、checksum offload、LRO/GRO 等。我在实际调优中经常遇到这样的情况业务方反馈网络延迟高可一看链路速率是满的交换机也不丢包问题查到最后发现是端点上网卡队列太少、中断集中在一个 CPU 核上。把队列和中断分散开后延迟立刻降下来。这就是端点微架构的真实影响它不属于任何一份交换机配置手册但往往是整个网络链路里最脆弱的环节。3. Scale-up 场景下的端点设计一致性互联成为主角3.1 从 PCIe 到 CXL端点变成了“内存语义”设备传统 Scale-up 场景里CPU 之间、CPU 与网卡之间靠 PCIe 总线连接。PCIe 本质上是“消息语义”的传输机制CPU 发起读或写请求设备响应。读请求要走完整个请求-响应往返延迟相对高。而在大规模 Scale-up 系统里我们希望网卡或者加速器能像访问本地内存一样访问远端资源这就需要从“消息语义”走向“内存语义”。CXL 的出现把这件事提上了台面。CXL 基于 PCIe 物理层但往上跑的是缓存一致性协议设备可以主动访问主机内存主机也能访问设备内存并且保证一致。对于端点来说这意味着网卡或者加速器不再只是一个“数据搬运工”它可以被映射进系统的统一内存地址空间里像一个特殊的内存设备那样工作。这个变化对 IO Die 微架构的影响非常大。原来 IO Die 只管把数据 DMA 到内存就行现在它要维护跨 device 的缓存一致性要处理 snoop、要维护设备端的缓存状态。任何一个环节出错轻则性能抖动重则数据不一致导致系统崩溃。从硬件设计的角度看CXL 端点的复杂度和传统网卡完全不是一个量级这正是“端点才是最难的一半”在 Scale-up 场景下的具体体现。3.2 网卡在 Scale-up 架构里的角色变化在 Scale-up 总线型互联环境下网卡的角色正在从“传输设备”变成“存储语义设备”。典型场景是分布式数据库或机器学习训练集群节点需要访问远端内存里的数据。如果走传统的 TCP/IP 协议栈数据要经过网卡收包、协议栈解析、拷贝到用户态延迟几百微秒起步。而使用 RDMA 或 CXL 内存语义的端点可以直接让远端 CPU 或者加速器读取本机内存数据延迟降到微秒级。这种变化带来的挑战是网卡硬件本身要完成更多“智能”处理要理解内存地址、参与一致性协议、处理原子操作。例如 RDMA 写操作可以携带原子比较交换指令直接修改远端内存这就要求网卡具备执行这些指令的硬件逻辑。IO Die 上的队列调度和一致性代理也要随之调整不能再用传统的一包一中断模型。如果你在规划一台 Scale-up 服务器我的建议是先搞清楚方向你需要的到底是“把数据快速搬到 CPU”还是“让远端设备直接读写我的内存”。前者用高性能网卡加 RDMA 就够了后者则需要考虑 CXL 支持的计算型存储或内存扩展设备。两者的端点微架构设计逻辑完全不同选型错误会把整机性能都带偏。3.3 实战第一步确认服务器 IO 拓扑放对网卡位置Scale-up 的服务器性能好不好网卡插的位置往往比网卡本身还重要。我见过太多例子一块好好的 100GbE 网卡因为插在了共享带宽的 PCIe Switch 下面实际只能跑 50GbE。要彻底搞清楚拓扑推荐用 lstopo 和 lspci 这两个工具。先看整体拓扑包括 NUMA 节点、PCIe Root Complex 和设备挂载关系lstopo --no-io # 只看 CPU、内存、NUMA lstopo # 完整拓扑包含 PCIe 设备只看网络设备的话可以用 lspci 过滤lspci -tv | grep -i ethernet重点关注网卡挂在哪个 NUMA 节点、哪个 Root Port 下面链路宽度是 x16 还是 x8。如果是双路服务器一定要让网卡的中断和 DPDK 的 CPU 核心都落在同一个 NUMA 节点上否则跨 NUMA 访问带来的延迟提升非常明显。实际验证方法也简单用ethtool -i eth0看 bus-info再用lstopo对照。我踩过一次很典型的坑一台新到的服务器四张 25GbE 网卡都插好且链路正常但一跑 perf 测试就发现两张网卡能打满另外两张只有 60% 的吞吐。查了半天发现后两张卡挂在了同一个 PCIe Switch 下面而该 Switch 的上行链路只有 x8。解决方式很简单把网卡分散到不同的 Root Complex 端口上性能立刻恢复正常。这种问题在规划阶段就能用 lstopo 发现根本不用等到上架后去排查。4. Scale-out 场景下的端点设计卸载与拥塞控制4.1 RDMA/RoCEv2 把复杂度从协议栈搬到了网卡Scale-out 集群的通信量非常大如果每个消息都走完整的 TCP/IP 协议栈CPU 消耗根本扛不住。所以高密度 HPC 和 AI 集群普遍用 RDMA而目前最常见的落地方式就是 RoCEv2。RoCEv2 本质上是把 IB 的传输层语义搬到了以太网上让网卡硬件直接完成数据的发送、接收和确认CPU 只负责最终的数据处理和状态同步。听起来很美好但代价是网卡硬件复杂度大幅上升。RoCEv2 在无损或半无损以太网上才能发挥性能依赖 PFC优先级流控和 ECN显式拥塞通知来保证拥塞时不丢包。为了维持端到端无损交换机要配置 PFC 和足够大的 buffer网卡也要做流控、乱序重排、拥塞窗口调整。这些逻辑放在过去的网卡里是不可想象的现在全部塞进了端点微架构里。实际做 RoCE 调优时我强烈建议先跑一遍 ib_write_bw 或 perftest 工具确认设备到设备的原始性能再叠加业务流量看真实表现。步骤大致是# 服务端 ib_write_bw -d mlx5_0 -x 3 -q 8 # 客户端 ib_write_bw -d mlx5_0 -x 3 -q 8 -F 服务器IP其中-x 3是启用 RoCEv2。看到的结果如果和网卡规格差太多大概率不是网卡不行而是 PFC 或 ECN 配置有问题。把交换机的 PFC 优先级和网卡的 DSCP 映射对齐再调 buffer 大小通常能解决一半以上的性能问题。4.2 多队列、中断与 DPDK端点微架构的三种演进路线Scale-out 场景下端点微架构的演进其实可以分成三条路线多队列、卸载和用户态驱动。第一条路线是多队列加 RSS。网卡硬件把不同流的数据哈希到不同的队列每个队列可以绑定到独立的 CPU 核这样能大幅提升并行处理能力。几乎所有现代网卡都支持关键是驱动和配置要跟上。默认状态下的队列数量往往不足比如 100GbE 网卡可能只开了 4 个队列跑满带宽需要 CPU 压力很大把队列数调到和 CPU 核数匹配是第一步调优。第二条路线是硬件卸载。checksum offload、TSO/GRO、LRO、IPsec offload 这些功能把原本 CPU 要做的工作转交给网卡。虚拟化场景里还有 VXLAN 卸载、Open vSwitch 硬件卸载对吞吐影响极大。但卸载功能也意味着网卡芯片内要集成更多逻辑功耗和成本都上去了这就是微架构权衡的直观体现。第三条路线是用户态驱动代表是 DPDK。DPDK 绕过内核协议栈直接从用户态轮询网卡队列延迟可以压到很低。对延迟敏感的场景比如金融行情、边缘计算、5G UPFDPDK 几乎是标配。但轮询会占满 CPU 核不适合通用服务器上混布业务这是取舍问题不是技术优劣问题。三条路线不是互斥的实际部署时可以先开多队列和卸载功能如果延迟还不满足再针对特定队列做 DPDK 优化。我在实践中一般先用 ethtool 开启多队列并检查卸载状态然后根据业务特征决定是否需要引入 DPDK。对大多数应用来说多队列加中断绑定已经能把性能优化得很不错DPDK 属于进一步压榨的手段。4.3 实测调优RoCEv2 端到端的几个关键参数做 RoCEv2 端到端调优时我一般按下面的顺序检查和配置。先查网卡当前属性ibstat # 看 IB 设备状态 ibv_devinfo # 查看设备能力再确认 MTU 和 QoS 映射。建议把 MTU 设置为 4200并把网卡 DSCP 到优先级队列的映射与交换机侧保持一致echo 4200 /sys/class/infiniband/mlx5_0/ports/1/phys_state # 这只是示意具体用 mlxconfig 或 iproute2 设置实际修改 QoS 一般用如下方式ip link set dev eth0 mtu 4200然后配置 PFC 和 ECN。交换机侧把某些优先级队列设为无损队列网卡侧通过cma_roce_tos或相关模块参数把流量映射到对应优先级。这一步如果不对齐测试时会出现大量重传和丢包但表现并不是协议栈报错而是吞吐上不去。最后检查 DCQCN 参数。RoCEv2 的拥塞控制算法通常由网卡固件管理但也暴露了部分可调参数。不同厂商参数名不一样比如 Mellanox 的qos配置推荐先把enable_ecn和enable_pfc打开再看吞吐和延迟曲线。最后跑一轮 perftest 验证。如果延迟正常、带宽正常基本说明端到端的无损网络配置没问题。如果忽高忽低就要去看交换机侧的缓存分配和 PFC 死锁问题这部分已经超出网卡范畴属于整网协作。5. 数据中心网卡与 IO 子系统的调优实战5.1 驱动、固件、队列别让默认配置拖垮性能很多机器出厂后网卡驱动和固件是默认状态性能远没被压榨出来。第一步要做的是检查固件和驱动版本有些严重 bug 只在新固件里修复尤其是一些国产品牌网卡和旧款 Mellanox 网卡固件不更新会莫名其妙丢包或断链。查驱动和固件ethtool -i eth0输出里的driver和firmware-version字段要仔细看。如果驱动版本太老建议直接从官网下载最新驱动编译安装。尤其要注意网卡芯片型号和板卡品牌不是一回事比如市面上很多 2.5G 网卡用的是瑞昱或特定国产芯片品牌不同但芯片相同驱动可以通用。千万别拿错驱动。接下来是队列配置。默认情况下收队列数量可能只有几个发送队列可能是一条。对多核服务器来说合理的做法是让队列数和 NUMA 节点上的 CPU 数匹配ethtool -l eth0 # 查看当前队列 ethtool -L eth0 combined 16 # 设置 16 个多队列设置队列数量后还要看 RSS hash 是否正确分布。如果流量集中在少数几个队列需要重设 RSS 哈希字段ethtool -X eth0 equal 16 # 均匀哈希到 16 个队列 ethtool -N eth0 rx-flow-hash tcp4 sdfn # 对 TCP IPv4 按四元组哈希这些配置在业务高峰期改风险较高建议在变更窗口操作并且每次改完都观察一下调整前后的吞吐和延迟曲线。生产环境里“网卡满速但业务卡顿”的情况十有八九就是队列和中断分配没跟上。5.2 虚拟化场景SR-IOV、vSwitch 与网卡直通虚拟化环境下端点微架构的复杂度又上了一个台阶。物理网卡被 hypervisor 虚拟出多个虚拟网卡每个虚拟机看到一张“自己的网卡”但实际共享同一条物理链路这就是虚拟交换机的职责。VMware ESXi 里vSwitch 和物理网卡的关系是上行链路uplink绑定。创建标准交换机时必须把物理网卡设为上行链路虚拟机网络才能出外网。如果物理网卡队列或网卡驱动有 bug所有虚拟机的网络都会受影响。常见问题如“虚拟机网卡感叹号”通常是 vmxnet3 驱动没装好或版本不匹配换用 e1000e 兼容模式可以救急但性能会差一些。SR-IOV 是绕开虚拟交换机瓶颈的常用手段。它把物理网卡虚拟出多个 VFVirtual Function每个 VF 可以直通给指定的 VM让虚拟机绕过 hypervisor 直接访问物理网卡。这样延迟和吞吐都有显著提升尤其适合数据库和 NFV 场景。启用 SR-IOV 之前必须在 BIOS 打开 VT-d 或 IOMMU然后检查物理网卡支持的 VF 数量cat /sys/class/net/eth0/device/sriov_totalvfs echo 16 /sys/class/net/eth0/device/sriov_numvfsVF 数量不是越多越好支持的 VF 越多每个 VF 分配到的资源和性能越差。建议根据业务需求按 1:1 或 1:2 的复用比例创建 VF。实际排障时我经常看到管理员把 VF 数量拉满结果虚拟机的网络延迟反而不如走 vSwitch 时候高这就是微架构资源分配不合理造成的。5.3 从裸金属到 VMLinux 网卡开机自启与 Bond 配置Linux 服务器上最常踩的坑之一就是网卡重启后不上线。CentOS / RHEL 系列里网卡配置文件和 NetworkManager 的管理逻辑经常互相打架。我记得很清楚一个同事配好 bond0 之后重启服务器结果所有网卡接口都变成了未托管状态业务直接断掉。解决办法分两种。一种是把 NetworkManager 彻底禁用用传统的 network 服务管理systemctl stop NetworkManager systemctl disable NetworkManager systemctl enable network另一种是用 NetworkManager 管理但要注意配置文件的活跃状态。比如用 nmcli 设置开机自启和 bondnmcli con add type bond con-name bond0 ifname bond0 mode active-backup nmcli con add type ethernet con-name eth0 ifname eth0 master bond0 nmcli con up bond0 nmcli con mod bond0 connection.autoconnect yes光配 bond 还不够要确认每个网卡都开启了自启否则开机后某个物理网卡没激活bond 就会降级。排查时可以用nmcli connection show看每个连接的autoconnect字段也可以直接看/etc/sysconfig/network-scripts/ifcfg-*里的ONBOOTyes。在 Ubuntu 等使用 netplan 的系统上配置思路类似但写法不同。核心目标只有一个物理接口和 bond 接口都要保证开机自动激活并且主备切换逻辑清晰。很多人直接把交换机侧的链路聚合也配成主备模式结果两条链路都在跑但 bond 不知道流量路径混乱性能反而下降。这里要强调链路聚合模式必须交换机侧和服务器侧对齐mode4 对应 LACP 动态聚合mode1 是主备不建议在生产环境混用。6. 常见问题与排查技巧实录6.1 端点问题快查表排障久了会发现端点网络问题的表象千奇百怪但根因大多是下面这几类。我整理了一个常用快查表方便快速定位。现象可能原因推荐排查动作虚拟机网卡感叹号无法上网VM 内虚拟网卡驱动未安装或版本不匹配重装 vmxnet3 驱动或临时改用 e1000evSphere 报物理网卡错误率较高光模块或线缆问题或交换机端口协商异常esxcli network nic stats get查 CRC 错误换线换模块Linux 网卡开机后状态 DOWN未设置 ONBOOTyes或 NetworkManager 未接管改配置文件并确认nmcli con mod自启Mellanox 网卡 DPDK 测试丢包严重未绑对驱动hugepage 不够队列映射错误dpdk-devbind.py -s确认绑定检查内存页千兆网卡跑不满带宽网卡协商成半双工或 ring buffer 过小ethtool eth0查速率双工ethtool -G eth0 rx 4096RoCE 吞吐上不去PFC/ECN 未对齐MTU 不一致统一 MTU对齐 DSCP 映射检查交换机 buffer这些问题的共同特征是链路是通的、交换机不丢包但端到端性能就是不达标。排查时不要只盯应用层先看网卡层状态往往能快速定位。6.2 接口形态、无线网卡与驱动踩坑记录“网卡 mini PCIe 接口和 M2 接口有什么区别”这类问题其实是典型的接口形态坑。Mini PCIe 通常是 PCIe x1 插槽54pin在老笔记本里很常见M.2 则有多种 Key 类型无线网卡一般用 E-Key走 PCIe x1 或 USB而 M-Key 的 M.2 插槽是给 NVMe SSD 用的。如果强行把 E-Key 的无线网卡插到 M-Key 槽位物理上是放不进去的。接口形态不对再好的网卡也白搭。无线网卡的信道宽度是另一个容易混淆的点。有人拿 ethtool 去查“信道宽度”搜半天没结果因为 ethtool 显示的是有线网卡的速率和双工模式。信道宽度是无线网卡在 2.4G/5G 频段上的概念比如 20MHz、40MHz、80MHz需要用iw dev wlan0 info或路由器后台查看。把这两个概念混在一起调优方向就会完全跑偏。驱动安装方面我尤其提醒国产 2.5G 网卡芯片的用户这类卡厂商官网更新慢系统内核版本一变可能就找不到驱动。解决办法是提前下载离线驱动包准备好万能网卡版驱动有离线安装包才能避免“网卡没驱动→上不了网→下不了驱动”的死循环。另外装完驱动后一定要用ethtool -i eth0确认驱动被正确加载别只看设备出现在ip link里就以为完事驱动加载失败和设备没识别是两回事。监听模式抓包也是一个高频需求。开启混杂模式前记得关闭 GRO/GSO 和 checksum offload否则抓到的包是硬件聚合后的巨帧或者校验和字段被卸载引擎改过抓包分析结果会误导人。具体操作ethtool -K eth0 gro off gso off tso off抓完包再恢复。我在实际维护中发现很多“玄学”网络问题最后都指向端点的微架构配置不当队列没散开、中断绑错核、硬件卸载功能和业务不匹配。把端点这半边搞清楚手里的服务器才算真正能发挥出设计性能。最后再分享一个小经验每次改完网卡参数都建议先做一轮基线测试再和改之前对比别凭感觉判断。性能调优这东西数据比直觉靠谱得多。我的习惯是把每次变更前后的测试结果存成文件总结出适合自己的调优基线后续遇到新设备直接用同一套流程省时省力。
返回列表