Linux 性能优化实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
87257 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
结束语 (1讲)
Linux 性能优化实战
15
15
1.0x
00:00/00:00
登录|注册

36 | 套路篇:怎么评估系统的网络性能?

LoadRunner
Jmeter
wrk
ab
iperf
pktgen
应用负载性能
HTTP 性能
TCP/UDP 性能
转发性能
各协议层的性能测试
PPS
延时
吞吐量
带宽
网络基准测试
性能指标回顾
基于 DPDK
基于 XDP 方式
基于 epoll
Linux 2.6 中引入的 epoll
解决 C10K 问题的最佳良方
单机支持处理 100 万个请求的问题
单机处理 1 万个请求的问题
网络性能评估
高性能网络方案
I/O 模型的优化
C10K 和 C1000K 问题
怎么评估系统的网络性能?

该思维导图由 AI 生成,仅供参考

你好,我是倪朋飞。
上一节,我们回顾了经典的 C10K 和 C1000K 问题。简单回顾一下,C10K 是指如何单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 则是单机支持处理 100 万个请求(并发连接 100 万)的问题。
I/O 模型的优化,是解决 C10K 问题的最佳良方。Linux 2.6 中引入的 epoll,完美解决了 C10K 的问题,并一直沿用至今。今天的很多高性能网络方案,仍都基于 epoll。
自然,随着互联网技术的普及,催生出更高的性能需求。从 C10K 到 C100K,我们只需要增加系统的物理资源,就可以满足要求;但从 C100K 到 C1000K ,光增加物理资源就不够了。
这时,就要对系统的软硬件进行统一优化,从硬件的中断处理,到网络协议栈的文件描述符数量、连接状态跟踪、缓存队列,再到应用程序的工作模型等的整个网络链路,都需要深入优化。
再进一步,要实现 C10M,就不是增加物理资源、调优内核和应用程序可以解决的问题了。这时内核中冗长的网络协议栈就成了最大的负担。
需要用 XDP 方式,在内核协议栈之前,先处理网络包。
或基于 DPDK ,直接跳过网络协议栈,在用户空间通过轮询的方式处理。
其中,DPDK 是目前最主流的高性能网络方案,不过,这需要能支持 DPDK 的网卡配合使用。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了系统网络性能评估的关键问题,从C10K和C1000K问题出发,讨论了I/O模型的优化和epoll的应用。随着互联网技术的发展,对系统的软硬件进行统一优化成为解决C1000K问题的关键。文章回顾了网络性能的指标,包括带宽、吞吐量、延时和PPS,并介绍了网络基准测试的方法。针对不同协议层的网络性能测试,文章提到了使用pktgen工具来测试网络包的处理能力。通过配置pktgen选项,可以进行发包测试,评估网络性能。文章强调了不同协议层的性能测试方法,以及测试前需要明确应用程序基于协议栈的哪一层。此外,还介绍了TCP和UDP性能测试方法,以及HTTP性能测试工具的使用。最后,文章提到了应用负载性能测试工具,强调了对于应用程序实际性能的重要性。整体而言,本文内容涵盖了网络性能评估的基本概念和测试方法,对于需要了解系统网络性能评估的读者具有一定的参考价值。文章通过具体案例和工具介绍,为读者提供了深入了解网络性能评估的途径和方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(49)

  • 最新
  • 精选
  • 。。。。
    有个问题: 买到的 【服务器带宽】理论上 >=吞吐量。 我现在 手上的腾讯云服务器 :网络带宽是 1M 但是经,wrk测试,网络吞吐量达到了4M,这是怎么一回事儿呢? [root@VM_0_2_centos wrk]# wrk -c 1000 -t 2 http://localhost/ Running 10s test @ http://localhost/ 2 threads and 1000 connections Thread Stats Avg Stdev Max +/- Stdev Latency 108.23ms 80.21ms 1.95s 97.68% Req/Sec 2.54k 1.77k 5.87k 66.15% 49587 requests in 10.06s, 40.20MB read Socket errors: connect 0, read 0, write 0, timeout 78 Requests/sec: 4929.91 Transfer/sec: 4.00MB

    作者回复: 不要使用localhost测试网络,测试带宽要跨主机测试

    2019-08-14
    2
    29
  • 我来也
    [D36打卡] 想不到网络篇这么快就开始"套路"了😁 由于现在客户端的网络环境复杂,经常会出现部分用户反馈卡顿的情况. 我这边能做的也有限. 只能在第一个网路出入口,记录每次收发消息的内容和具体的时间戳(精确到ms). 遇到玩家反馈时,再根据玩家的唯一编号,及发生的大致时间,在日志中查找玩家的响应时间,来推测是服务器响应慢了,还是客户端到服务器中间的路线慢了. 有时甚至会让客户端主动汇报,上次发送请求和收到请求的时间间隔. 来验证是不是客户本身的网络环境导致的. 其实服务器端都有处理消息的耗时记录,平常几乎都没什么太耗时的状况发生. 遇到客户网络原因导致的延迟,只能说是新加入口,让客户端选择一个最优入口了.

    作者回复: 嗯,网络抖动是很常见的现象。可以考虑更多的接入点、专线、CDN 等等都可以优化公网的链路延迟问题

    2019-02-13
    2
    20
  • Maxwell
    目前在公司做性能测试,我会首先使用iperf测试网络吞吐量,在局域网下,我会先开启少数线程(2个)进行压测,在测试结果报告中,查看消耗的带宽,再使用iperf的测试结果吞吐量对比,如果网络吞吐量没有瓶颈,那应用程序的性能就与网络无关了,这样理解对么?

    作者回复: 不是的,这只是说明了系统的网络吞吐没问题,但不代表应用的吞吐就没问题了。应用程序的吞吐也还是要测试的

    2019-03-22
    7
  • ninuxer
    打卡day38 之前对应用做压测的场景多点,通过学习,又get了底层的压测的方法👍

    作者回复: 嗯 越往上层场景越多

    2019-02-19
    5
  • Xiaobai
    4核8G 5M带宽服务器 服务跑一些商城 ,微信小程序 ,如何评估能承受多大的并发量

    作者回复: 最简单的就是做压力测试

    2019-03-23
    2
  • Griffin
    请问用iperf3测试tcp/udp时这个-b的目标带宽是指啥? 是预估该网络有1G的带宽么? iperf3 -c 192.168.0.30 -b 1G -t 15 -P 2 -p 10000

    作者回复: 设置测试数据的吞吐量,也就是 iperf3 自己发出的测试包该用多大的带宽。在文档里还有更详细的介绍,你可以man看看

    2019-03-13
    2
    2
  • Griffin
    老师, 请问在测试PPS的案例中, 我写错了IP和mac地址,但是pkts-sofar还是1000000 呢? 这个是只测试发送不看返回值么?

    作者回复: 对的

    2019-03-13
    2
  • 梦回汉唐
    我想查看目标服务器的收包的情况,这个怎么在目标服务器上操作呢

    作者回复: 请参考第43、44期

    2019-04-04
    1
  • 挺直腰板
    倪老师,你上面的脚本运行后,提示“cat: /proc/net/pktgen/eth0: 没有那个文件或目录”系统是cetnos7.0,请问如何处理。

    作者回复: 查一下网卡名,看看是不是eth0?换成正确的应该就可以了

    2019-03-31
    1
  • MJ
    # 定义一个工具函数,方便后面配置各种测试选项 function pgset() { local result echo $1 > $PGDEV result=`cat $PGDEV | fgrep "Result: OK:"` if [ "$result" = "" ]; then cat $PGDEV | fgrep Result: fi } # 为 0 号线程绑定 eth0 网卡 PGDEV=/proc/net/pktgen/kpktgend_0 pgset "rem_device_all" # 清空网卡绑定 pgset "add_device eth0" # 添加 eth0 网卡 # 配置 eth0 网卡的测试选项 PGDEV=/proc/net/pktgen/eth0 pgset "count 1000000" # 总发包数量 pgset "delay 5000" # 不同包之间的发送延迟 (单位纳秒) pgset "clone_skb 0" # SKB 包复制 pgset "pkt_size 64" # 网络包大小 pgset "dst 192.168.0.30" # 目的 IP pgset "dst_mac 11:11:11:11:11:11" # 目的 MAC # 启动测试 PGDEV=/proc/net/pktgen/pgctrl pgset "start" 老师,这段是vi一个文件保存成脚步吗?

    作者回复: 可以直接粘贴到SHELL运行,保存到脚本里也可以的

    2019-03-13
    1
收起评论
显示
设置
留言
49
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部