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

你好,我是倪朋飞。
上一节,我们回顾了经典的 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
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》,新⼈⾸单¥68
《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测试网络,测试带宽要跨主机测试
228 - 我来也[D36打卡] 想不到网络篇这么快就开始"套路"了😁 由于现在客户端的网络环境复杂,经常会出现部分用户反馈卡顿的情况. 我这边能做的也有限. 只能在第一个网路出入口,记录每次收发消息的内容和具体的时间戳(精确到ms). 遇到玩家反馈时,再根据玩家的唯一编号,及发生的大致时间,在日志中查找玩家的响应时间,来推测是服务器响应慢了,还是客户端到服务器中间的路线慢了. 有时甚至会让客户端主动汇报,上次发送请求和收到请求的时间间隔. 来验证是不是客户本身的网络环境导致的. 其实服务器端都有处理消息的耗时记录,平常几乎都没什么太耗时的状况发生. 遇到客户网络原因导致的延迟,只能说是新加入口,让客户端选择一个最优入口了.
作者回复: 嗯,网络抖动是很常见的现象。可以考虑更多的接入点、专线、CDN 等等都可以优化公网的链路延迟问题
217 - Maxwell目前在公司做性能测试,我会首先使用iperf测试网络吞吐量,在局域网下,我会先开启少数线程(2个)进行压测,在测试结果报告中,查看消耗的带宽,再使用iperf的测试结果吞吐量对比,如果网络吞吐量没有瓶颈,那应用程序的性能就与网络无关了,这样理解对么?
作者回复: 不是的,这只是说明了系统的网络吞吐没问题,但不代表应用的吞吐就没问题了。应用程序的吞吐也还是要测试的
7 - ninuxer打卡day38 之前对应用做压测的场景多点,通过学习,又get了底层的压测的方法👍
作者回复: 嗯 越往上层场景越多
5 - Xiaobai4核8G 5M带宽服务器 服务跑一些商城 ,微信小程序 ,如何评估能承受多大的并发量
作者回复: 最简单的就是做压力测试
2 - 梦回汉唐我想查看目标服务器的收包的情况,这个怎么在目标服务器上操作呢
作者回复: 请参考第43、44期
1 - 挺直腰板倪老师,你上面的脚本运行后,提示“cat: /proc/net/pktgen/eth0: 没有那个文件或目录”系统是cetnos7.0,请问如何处理。
作者回复: 查一下网卡名,看看是不是eth0?换成正确的应该就可以了
1 - Griffin请问用iperf3测试tcp/udp时这个-b的目标带宽是指啥? 是预估该网络有1G的带宽么? iperf3 -c 192.168.0.30 -b 1G -t 15 -P 2 -p 10000
作者回复: 设置测试数据的吞吐量,也就是 iperf3 自己发出的测试包该用多大的带宽。在文档里还有更详细的介绍,你可以man看看
1 - Griffin老师, 请问在测试PPS的案例中, 我写错了IP和mac地址,但是pkts-sofar还是1000000 呢? 这个是只测试发送不看返回值么?
作者回复: 对的
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运行,保存到脚本里也可以的
1
收起评论