怎样理解1.488Mpps?

Tags: network 

我们可能会使用各种各种的语言,写出各种各样的应用,我们可能会熟悉各种各样的框架,使用各种各样的测试工具。然而,我们还是会对很多事情完全不了解。无论是从业两年的小屁孩,还是从业二十年的老油条,我们唯一需要做到的,就是能够在“起疑”之后,去把我们不了解的事情弄明白。

过去的几天闲云野鹤般地闲逛着,在两个环境中,使用redis-benchmark测试了一下redis的性能,试图验证下这两个环境下的是否有显著差异。结果出现了一些诡异的事情,这些诡异的事情是什么并不重要,为什么有差异,暂时也不关心,令人特别好奇地是纯粹理论上的最高性能应该是多少呢?

既然要计算纯粹的理论值,那么就完全忽略掉计算上的开销,只关注于数据的传输,问题就演变为,报文传输的理论最高值是多少呢?毕竟所有的请求最终都要落实到报文上,最高性能无论如何也不会超过报文的传输速率。

内心有一种直觉,应该可以利用带宽值(千兆、万兆)计算出来的。从网上可以查找到,最小的报文是64字节,千兆网络最高每秒钟可以传送1.488M个这样的小包,也就是每秒可以完成148万个小包的传送。

有了这样一个数值,那么可以结束了吗?NO。因为用1000M/(64x8)计算一下,得到的结果是1.95M,明显超过1.488M。继续“起疑”,经过查找,发现了新的内容。原来最小的报文是64字节,但是在以太网(注意,链路层可不是只有以太网!)中传输时,还需要再加上8字节的帧头,和12字节的帧间隙。所以真正的计算方法应该是:1000M/[64+8+12)x8] = 1.488M。

数值的计算方法明确了,问题就可以结束了吗?NO。依然有一个疑问,一次请求是“一去一回”交互过程的,假设“去一个报文,回一个报文”就一次请求的完成,那么请求的理论上限应当是(1.488M/2)吗?直觉上感觉好像应该是这样的,但是还是感觉哪里不对劲。突然发现,根本就没有弄明白经常挂在口头的千兆、万兆这些指标的含义,他们是双向如此,还是单向如此?

继续探查,我们又知道了新的内容,原来网卡有全双工、半双工等模式。全双工模式下,网卡可以在发包的时候,同时收包。所以全双工的时候,请求的理论上限应当每秒1.488M次。

可以到此为止了吗?NO! 为什么可以在发包的时候同时收包?丫,跟我这么讲,我就会信吗?所以还要继续追究。既然可以在发包的时候同时收包,也就是说应该是存在两个通道的。怎样确认这两个通道存在?直接看网卡估计够呛,品牌多型号杂,那么就从“线缆”上想办法。一根铜丝上肯定不会同时既是高电平又是低电平,一定不会有薛定谔牌铜丝(会不会真的有。。。。)。把双绞线的内容扒拉出来研究了一下,问题终于得到解答了,发送与接收,真的是分开的两组线。甭管双绞线是用那种标准制作的,1和2的位置永远是发送的,3和6的位置永远是接收的(见封面图)。这时候我们就可以大概推测出网卡内部是如何工作的了。

可以结束了吗?好像是,但是似乎还有一些可补充的地方。为什么带宽的单位都是bit,而不是大家更熟悉的byte? 经过前面的一番追究,隐隐约约有了一些答案。byte真的是更让人熟悉的单位吗?NO!设想一下,研发网卡、做线缆的工程师们为什么要关心byte? 在他们的世界里,关心的应当是一个个的高电平、低电平,对他们来说bit分明是一个更熟悉的单位,他们需要关心的每秒钟到底可以发生多次脉冲,使用byte来计算反而是莫名其妙的。所以网卡、线缆的参数实际上是在说,我们每秒钟可以传送这么多的bit。

可以结束了吗?好像是,但是似乎还可以继续畅想一下。 可以设想一下,只要网卡在线缆里满负荷地写入bit,带宽就占用满了。也就是说,带宽满还是没有满,和报文的大小一点关系都没有。如果用小包计算,那么线缆上的极限值就是1.488Mpps,如果用大包计算,就可以得到一个更小的pps值,但是bit的速率是不变的。我们甚至可以继续畅想一下,我们知道CPU是芯片,有自己的时钟,而网卡上也有芯片,那么是不是也有自己的时钟呢?如果网卡的带宽是1000Mbit,是不是就可以认为网卡的时钟频率是1Ghz,万兆卡就是10Ghz呢?网卡是不是就是在一直在按照自己的节奏,“嘀嗒嘀嗒”呢?

从双绞线中,获得了预期的结果,那么光纤呢?光纤也是两个通路吗?丫,这好像又是一个新的领域了,至少曾经听说过,光纤还是分单模与双模的。这事就等以后哪天突然有兴致的时候再研究吧。

最后,稍微回应一下本文开头处提到的问题。原本只想获得一个纯粹的理论上限,但是分析到最后,转念一想,为什么要在两个场景下去测试一个应用的性能,只要把环境自身的性能测试一下不就可以了吗。。。。。。。

(需要的提醒的是,一个请求不仅仅是报文数超过两个的问题,向网卡中灌入的速度更是一个问题,千兆环境中,1.488M是不可逾越的,也就仅此而已了)

很多时候,只需要运用好常识,方法本身比已经知道了什么更为重要!


推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球