如何评估机器网络吞吐能力

linux内核会给每一个设备分配中断号.
linux内核初始化的过程中会加载设备驱动.
加载设备驱动说白了,是在内核中为设备的中断号注册回调函数.
回调函数的作用就是响应设备中断的.

上面信息用到网卡上,就是说,linux内核给网卡分配了中断号,在内核初始化的时候,会注册回调函数来响应此中断.到底如何响应,可以查看linux内核中断机制.

当内核初始化之后,系统进入工作状态.如果这个时候,网线上有数据,网卡会接收网线上的所有数据.将目标地址是本机的请求包接收,其他包丢弃(不包含广播包).然后发生硬件中断,通知内核有数据来了.(发生一个硬件中断)一般情况,cpu会立即响应此中断,处理这个请求.

说了半天,貌似与一开始的话题不沾边.虽然不沾边,但是多少有一点关系.从上面描述中我们可以得出以下几点:
1:网卡收取网线上的数据不消耗cpu.
2:只有当网卡通知内核之后(中断),cpu才会处理这个数据包.
3:cpu一般都会马上响应中断.
4:网卡响应数据包的能力与cpu无关!
看到第四点,大家可能都会很吃惊.
我们平时总是说,负载过高,导致丢包,或者响应慢.其实这些与网卡响应数据包没有任何关系.网卡对网线上的每一帧都作了响应与处理,只是cpu没有处理这些数据而已.

这样,我们自然就会想到,那么网卡处理数据有没有上限呢?其实上网搜以下网卡工作原理我们就能明白了.网卡由一些列模块组成.但是关键模块是晶振 它就好比是人的心脏.人没心活不成,网卡没晶振就是废铁一块.晶振提供了网卡的时钟.也就是晶振的精度,决定了网卡的速度.

现在主流网卡基本是100Mbps,1000Mbps.神马意思?就是每秒中能够处理100M的bit和1000M的bit.
那明白了这两个参数的含义,我们就可以从理论上很容易512计算出百兆,千兆网卡每秒的处理能力.
百兆网卡的能力:100000000/512= 195312
千兆网卡的能力:1000000000/512= 1953125
为什么要除以512?
因为协议规定,在网线上传输的最小帧必须是64字节,即512bit.
大家都知道网络上有最大帧的限制,可能并不了解有最小帧的限制.
网络上最大帧是1518.请分清1500.1500是最大的mtu.说白了是最大数据.数据要在网络上传播,还需要封装一些数据,比如mac地址,版本等.加上这些总共18字节,因此最大的一帧是1518.
但是为啥要有最小帧呢?
原因有俩.
1:当一个发送方检测到碰撞的时候,他就会中断当前发送的数据帧.这样就导致了一些垃圾数据出现在网线上.我们前面说过了,网卡会响应网线上的任何数据的,这些垃圾数据同样会响应.为了能够区分有效帧与垃圾数据,因此我们这里要求有效帧至少64字节.对于少于64字节的帧,网卡直接忽略.
2:为了防止出现这样的情况:一个短帧还没有到达接收方的时候,发送方已经结束了发送.
如下图演示.

a:A在0时刻发了一帧.我们假设这从A到B传输需要的时间未t.

b:在t-e,B也发出了一帧.

c:在t时刻,B检测到了冲突,于是B发出一个警告信号,警告所有收发器,有冲突发生.

d:在2t时刻,A收到B的警告信号,然后中断传输.等待一个随机时间再重试.


现在问题就是,如果A发了一个非常短的帧,在A收到B发出的警告信号之前,就已经将此帧发送完毕,那么A将无法判断此帧是否正确发送.

那为啥是64字节呢?

早期10Mbps的局域网内,最大传入距离是2500m,那么在最坏的情况下需要近50微秒时间做冲突检测.

10Mbps的网卡,处理1bit需要100ns的时间,于是500bit才能满足50微秒的要求.为了保险,协议采用了512bit.

这就是为啥需要最小64字节了.

回到我们的话题:

千兆网卡的能力:1000000000/512=1953125

考虑到我们的数据,假设我们数据1k,那么千兆网卡处理能力是:

1000000000/1000=100w

这个量也远远大于我们的实际测试数据.

这个原因就是与我们网络状况有关系了.当网络上连结的服务器越多的时候,发生冲突的可能性就越高,就会响应降低网卡能力.(冲突发生后,所有网卡都会收到通知.正在发送数据的网卡会中断数据发送,随机等待一段时间,在尝试发送.)因此实际的测试数据要比我们计算的理论数据低很多.


通过以上分析,我们验证了,在我们目前的网络,机器配置下,实现每秒30-40w的包量还是没问题的.

不过这里不知道测试时候的网络状况.实际应用中能够支持20w就很好了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值