网络性能评估

本文深入探讨了Linux网络性能评估,重点关注带宽、吞吐量、PPS包转发率以及网络中断处理。通过分析64B小包在千兆和万兆网卡的表现,揭示了CPU处理中断的能力限制。文章介绍了网卡收包流程,包括多队列技术、中断绑定和软中断处理,以及DPDK等优化方案,以提升网络性能。测试结果显示,万兆网卡的瓶颈在于CPU而非网卡带宽,指出未来优化方向是解决CPU中断处理能力。
摘要由CSDN通过智能技术生成

在Linux中常见的网络性能指标如下

l  带宽

表示链路的最大传输速率,单位是b/s 比特/秒,在位服务器选网卡时,带宽就是最核心的参考指标,常用的带宽有1000M,10G,40G,100G等

网络带宽测试,测试的不是带宽,而是网络吞吐量,Linux服务器的网络吞吐量一般会比带宽小,而对交换机等专门的网络设备来说,吞吐量一般会接近带宽

l  吞吐量

表示没有丢包时最大的数据传输速率,单位通常是b/s比特/秒,或B/s字节/秒,吞吐量受带宽的限制,吞吐量/带宽也是该网络链路的使用率

l  延迟

表示从网络请求发出后,一直到收到远端响应所需要的时间延迟,这个指标在不同场景中有不同含义,它可以表示建立连接需要的时间(TCP握手延时),或者一个数据包往返所需时间RTT

l  PPS

Packet Per Second,表示已网络包为单位的传输速率,PPS通常用来评估网络的转发能力,基于Linux服务器的转发,很容易受到网络包大小的影响(交换机通常不会受太大影响,交换机可以线性转发)

PPS,通常用在需要大量转发的场景中,而对TCP或者Web服务器来说,更多会用并发连接数和每秒请求数(QPS Query per Second)等指标,他们更能反映实际应用程序的性能

网络测试基准

Linux网络基于TCP/IP协议栈,不同协议层的行为不同,在测试之前,根据应用程序基于的协议层进行针对性网络性能评估,比如:

基于HTTP或HTTPS的Web应用程序,属于应用层,需要我们测试HTTP/HTTPS的性能

大多数游戏服务器,为了支持更大的同时在线人数,通常会基于TCP或UDP,与客户端交互,这时就需要测试TCP/UDP的性能

针对把Linux作为一个软交换机或路由器来用的场景,需要关注网络包的处理能力PPS,重点关注网络层的转发性能

低层协议是其上的各层网络协议的基础,低层协议的性能,也就决定了高层网络性能

转发性能

网络接口层和网络层,主要负责网络包的封装,寻址,路由,转发和接收,在这两个网络协议层中,每秒可以处理的网络包数PPS,就是最终的性能指标,特别是64B小包的处理能力,值得我们特别关注?????

PPS包转发率

传输过程中,帧之间有间距(12个字节),每个帧前面还有前导(7个字节)、帧首界定符(1个字节)。

帧理论转发率= BitRate/8 / (帧前导+帧间距+帧首界定符+报文长度)

 

最大吞吐量(最大帧大小:1538B,最大以太帧大小:1518B)

最大的以太网吞吐量是通过单个传输节点实现的,当以太网帧处于最大大小时,该传输节点不会发生任何冲突。

以太网的帧开销是18字节,目的MAC(6)+源MAC(6)+Type(2)+CRC(4)。局域网规定IP最大传输单元1500字节,实际上加上以太网帧的18字节,再加上8B就是1518字节

最大帧率(最小帧大小:84B,最小以太帧:64B,最小以太网帧有效载荷:46B)

以太网是无连接的,不可靠的服务,采用尽力传输的机制。IEEE标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time.(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域直径。512个位时,也就是64字节的传输时间,如果以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。这就是为什么以太网要最小64个字节,同样,在正常的情况下,碰撞信号应该出现在64个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在64个字节之后,叫 late collision。这是不正常的。

以太网链路的最大帧速率和吞吐量计算

框架部分

最小镜框尺寸

最大画面尺寸

帧间间隙(9.6毫秒)

12字节

12字节

MAC前置码(+ SFD)

8字节

8字节

MAC目标地址

6个字节

6个字节

MAC源地址

6个字节

6个字节

MAC类型(或长度)

2字节

2字节

有效载荷(网络PDU)

46个字节

1,500字节

校验序列(CRC)

4字节

4字节

总框物理尺寸

84字节

1,538字节

理论上限

百兆端口线速包转发率=100Mbps/672=0.1488095Mpps,约等于0.14881Mpps,14万pps

千兆端口线速包转发率=1000Mbps/672=1.488095Mpps,约等于1.4881Mpps,148万pps

万兆端口线速包转发率=10000Mbps/672=14.88095Mpps,约等于14.881Mpps,1488万pps

 

arrival为每个数据包之间的时间间隔。

rte:runtime environment 即运行环境。

eal: environment abstraction layer 即抽象环境层。

测试方法

pktgen是linux内核自带的发包工具,省却了用户态socket的参与,纯粹在内核构造skb送netdev的txqueue上,可以达到极高pps。pktgen只有UDP协议,适合做吞吐量测试。

基线测试

在性能测试中首先要做的是建立基线(Baseline),这样后续的调整才会有一个参考标准。值得注意的是,在测试基线的时候,一定要保证系统工作在正常的状态下。

测试结果

 

 

测试结论

64B小包,千兆网卡可以达到带宽,万兆网卡远远达不到带宽,前者受限于带宽,后者受限于cpu包中断处理

单个cpu ksoftirqd占用100%

结论分析

万兆网卡包收发瓶颈:是cpu而不是网卡带宽

1) 网络数据包来了之后通过中断模式进行通知,而cpu处理中断的能力是一定的,如果网络中有大量的小数据包,造成了网络的拥堵,cpu处理不及时。

2) 操作系统的协议栈是单核处理,没办法利用现在操作系统的多核。
网络数据包从网卡到内核空间,再到用户空间,进行了多次数据拷贝,性能比较差。

Linux + x86网络IO瓶颈

  1. 数据必须从内核态用户态之间切换拷贝带来大量CPU消耗,全局锁竞争。
  2. 收发包都有系统调用的开销。
  3. 内核工作在多核上,为可全局一致,即使采用Lock Free,也避免不了锁总线、内存屏障带来的性能损
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值