恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
一台 x86 服务器压出 100Gbps 带宽:dperf 网络性能测试实战笔记
首页
资讯中心
/
一台 x86 服务器压出 100Gbps 带宽:dperf 网络性能测试实战笔记
一台 x86 服务器压出 100Gbps 带宽:dperf 网络性能测试实战笔记
发布时间:2026/9/15 17:01:10
一台 x86 服务器压出 100Gbps 带宽dperf 网络性能测试实战笔记【免费下载链接】404StarLink404StarLink - 推荐优质、有意义、有趣、坚持维护的安全开源项目项目地址: https://gitcode.com/GitHub_Trending/40/404StarLink凌晨三点监控甩来一条告警出口带宽打满。你第一反应是拉流量复现可公司那台压测机只能勉强撑到 2Gbps 就 CPU 跑冒烟——带宽压测卡在工具上比定位瓶颈还难。dperf 就是为这一刻准备的它基于 DPDK让一台普通 x86 服务器就能压出千万级 CPS 和数百 Gbps 带宽。下面从原理、数据到最小压测流程一次讲透。dperf 是什么把 DPDK 变成一台机器一个压测集群dperf 是百度开源的 100Gbps 网络性能测试与压力测试工具纯 C 实现技术底座是 DPDK它绕过内核协议栈、直接驱动网卡收发队列所以单台普通 x86 服务器就能压出千万级 HTTP 每秒新建连接、数百 Gbps 带宽、亿级并发连接。想深入原理可以看 dperf 官方文档本文不展开直接说它强在哪。 单核就能拉起两百万级 CPS加核基本线性单核配置下 dperf 的 HTTP 新建连接数是 2,101,044 CPS核心数翻倍它基本跟着翻倍6 核对 6 核时做到 10,027,172 CPS接近一千万。这个斜率对做四层压测很友好——你不用为了拉高 CPS 去买一台堆满网卡的压测集群一台机器加核就行。 亿级并发连接不是靠堆服务器堆出来的1 核 client 配 1 核 server 就能维持 1 亿条 HTTP 并发连接此时双端 CPU 都在 40% 上下4 核对 4 核直接干到 4 亿。亿级长连接是四层网关长稳测试的核心诉求dperf 用单机就能把这条路铺满长稳机器的选型压力小很多。 8 核 37M PPSCPU 只烧了 22%UDP 发包是检验网卡和 CPU 报文处理能力的硬指标。8 核时 dperf 的 UDP TX PPS 达到 37.12 MPPS而 CPU 占用只有 22%——换句话说硬件离极限还远瓶颈大概率不在软件。做网卡选型时这类数字比跑分更有参考意义。 能识别每一个丢包统计细到 TCP Flag 粒度dperf 每秒打印一套完整统计TPS、CPS、各维度 PPS、TCP/Socket/HTTP 三级错误数、丢包数以及按 TCP Flag 分类的报文重传数。更关键的是它能识别每一个丢包定位谁丢的、丢在哪一层做性能分析时不用再去抓包猜。关键数据25G 单卡下的 CPS 天花板以下数据来自 dperf 官方测试客户端/服务器均为 Mellanox MT27710 25Gbps 网卡单张 CX4内核 4.19.90内存 512GB大页 100GB。Client CoresServer CoresHTTP CPS112,101,044224,000,423447,010,7436610,027,172横向看25G 物理卡上 CPS 已经能顶到千万级说明 25G 环境下瓶颈不在链路而在核数配置。最小可行压测路径从大页到跑通 CPS 压测配 1G 大页内存——DPDK 靠大页内存减少收发路径上的内存分配开销改 grub 启动参数后重启生效linux16 /vmlinuz-... nopku transparent_hugepagenever default_hugepagesz1G hugepagesz1G hugepages8编译 DPDK 并打开对应 PMD——不同网卡要开不同驱动开关Mellanox CX4/CX5 开CONFIG_RTE_LIBRTE_MLX5_PMDyHNS3 开CONFIG_RTE_LIBRTE_HNS3_PMDy改完config/common_base后TARGETx86_64-native-linuxapp-gcc make install T$TARGET -j16编译 dperf 本体——指向刚装好的 DPDK SDK 一起编cd dperf make -j8 RTE_SDK/root/dpdk/dpdk-stable-19.11.10 RTE_TARGET$TARGET绑定网卡Mellanox 直接跳过这步——dperf 要独占网口其他厂商网卡需绑进 UIOmodprobe uio modprobe uio_pci_generic dpdk-devbind.py -b uio_pci_generic 0000:1b:00.0server 端与 client 端各启一个 dperf——client 的 IP 必须预先写在 server 配置文件的client白名单里./build/dperf -c test/http/server-cps.conf ./build/dperf -c test/http/client-cps.conf 一次真实压测的输出长什么样怎么读跑起来后每秒会刷这样一段统计截取核心行pktRx 3,001,058 pktTx 3,001,025 bitsRx 2,272,799,040 synRx 1,000,345 synTx 1,000,330 rstRx 0 tcpDrop 0 skOpen 1,000,330 skClose 1,000,363 skCon 230 skErr 0 httpGet 1,000,345 http2XX 1,000,350 httpErr 0怎么把数字读成结论synRx 与 httpGet 量级基本一致说明握手和请求都完成了闭环连接没有半开卡死。rstRx / tcpDrop / skErr / httpErr 全为 0连接干净没有异常 RST 或丢包。skCon 维持在几百量级说明这是高频短连接场景而不是并发压测和 CPS 配置吻合。cpuUsage 52表示本轮单核占用 52%离极限还有余量可以继续加核或加并发。边界与坑这些场景别硬上HTTP 压测要求整个请求/响应能装进一个数据包所以七层负载均衡分段传输不适合用 dperf别硬试。它要独占网卡别和其他业务抢网口。dperf 本身没有路由功能多机组网建议配合三层交换机省得你手动折腾 ARP。构建依赖 DPDK参考实现基于 19.11网卡 PMD 没开对就直接起不来编译前先确认驱动开关。谁在用它知名开源四层负载均衡 DPVS 用 dperf 做性能测试并对外发布过压测报告国内多个安全厂商也用 dperf 压测自家防火墙。四层压测圈子里它基本是事实标准。回扣那个凌晨再遇到凌晨三点带宽打满的告警你至少可以先用 dperf 在压测环境复现真实连接压力再逐层排查是新建连接、重传还是丢包导致的瓶颈。把这篇收藏起来下次要压测直接翻出来照着做就行。【免费下载链接】404StarLink404StarLink - 推荐优质、有意义、有趣、坚持维护的安全开源项目项目地址: https://gitcode.com/GitHub_Trending/40/404StarLink创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考