在二层和三层转发测试方面(主要是指吞吐量、延时测试),两者是基本相同的。
buffer性能测试,主要是针对存储转发设备的buffer容量的测试。因为不同产品的buffer结构各不相同,所以没有像RFC那样标准的测试用例和衡量标准。需要根据不同产品的特征、不同的应用场景和流量模型,进行测试用例设计。
1 二三层转发性能测试
各厂商的测试仪器都提供了多种测试套件来进行二三层转发性能测试。具体的测试方法都有详细说明,这里就不赘述了。本节将重点介绍这些测试套件背后的一些细节问题。
1.1 同步模式和异步模式
使用TestCenter测试时,有一个设置是选择测试使用同步模式还是异步模式。在端口发送测试流量时,测试仪对发包顺序存在一个调度,保证在任意时刻,每一个端口都只唯一收到从一个端口发来的报文,避免在多对多测试时,出现某个时刻,多个端口同时向一个端口发包,产生拥塞的情况。
以8个端口的Full Mesh测试为例,表1表示在某一个时间点(行),每个端口(列)发包的目的端口。
t1 | t2 | t3 | t4 | t5 | t6 | t7 | t8 | t9 | |
P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P1 | P2 |
P2 | P3 | P4 | P5 | P6 | P7 | P8 | P1 | P2 | P3 |
P3 | P4 | P5 | P6 | P7 | P8 | P1 | P2 | P3 | P4 |
P4 | P5 | P6 | P7 | P8 | P1 | P2 | P3 | P4 | P5 |
P5 | P6 | P7 | P8 | P1 | P2 | P3 | P4 | P5 | P6 |
P6 | P7 | P8 | P1 | P2 | P3 | P4 | P5 | P6 | P7 |
P7 | P8 | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 |
P8 | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P1 |
在同步模式中,测试仪器严格按照表1中的设置来进行发包。这就保证了任意一个时间点,任意端口都不会同时收到两个或两个以上端口发送的报文。这就避免了测试时出现拥塞。
异步模式,是指测试仪器端口并不是严格在同一时间点发包,而是按照一个固定的时间差(TestCenter上默认为64us,可配置)来发送。这样就可能存在某个时刻多个端口会同时向同一个端口发包的情况,产生了拥塞。
同步模式下的性能测试,因为测试仪器保证了不会产生拥塞,所以主要关注的是设备的带宽,和设备的buffer关系不大;而在异步模式下,测试会产生拥塞,所以需要设备有相对较大的buffer缓存能力,来保证达到线速转发。
1.2 store-forward与cut-through以及相应的时延
交换机按照处理帧的不同方式分为存储转发(store-forward)和直通式(cut-through)。在时延测试时会体现出区别。
图1 单个报文在交换机中的转发时刻
如图1所示,报文在进入交换机到从交换机转发主要经历几个时刻:报文的第一个字节进入交换机的时刻为T1,报文全部进入交换机的时刻T2,报文从交换机端口转发时的时刻T3,报文全部从交换机端口转发出去的时刻T4。这几个时刻之间的差值分别定义为Δ1、Δ2、Δ3。显然,Δ1和Δ3会受到报文字节长度的影响。
对于store-forward转发,交换机在转发之前必须接收整个报文,并且进行错误校验,如果没有错误再发往目的地址。所以报文需要全部进入buffer缓存后,再转发。也就是说,T3一定是在T2之后,报文的整个转发流程中,有一部分是buffer内的调度时间Δ2。
对于cut-through转发,交换机只要检查到报文头中所包含的目的地址就立即进行转发,无需等待报文全部被接收,也不进行错误校验。也就不存在buffer内的调度时间Δ2
根据如上的转发特征,定义了以下几种转发时延类型:
(1)LILO(Last In/Last Out)
指帧的最后一个bit进入设备端口,到帧的最后一个bit从设备端口转发之间的时间间隔,即报文的转发时延为T4-T2=Δ2+Δ3。
(2)LIFO(Last In/First Out)
是指帧的最后一个bit进入设备端口,到帧的第一个bit从设备端口转发之间的时间间隔。即T3-T2=Δ2。这段时间是交换机完全接收到报文后,进行表项查找,buffer调度,再转发所需要的时间。store-forward方式使用这个时间来衡量时延。可以看出,这种时延计算方式,不受转发报文的大小影响。
(3)FIFO(First In/First Out)
指帧的第一个bit进入设备端口,到帧的第一个bit从设备端口转发之间的时间间隔。即T3-T1=Δ1+Δ2 。在cut-through方式下,只要报文头到达交换机即开始转发,报文不被缓存,也就没有Δ2的时间。所以cut-through选用这种时延计算方式。在cut-through方式下,这种方式也不受转发报文大小的影响。
1.3 混合帧测试/IMIX测试
一般在进行转发性能测试时,会测试不同长度报文的转发。
在测试strore-forward方式的设备时,尤其是异步模式下,随着报文长度的增加,转发测试时产生的拥塞对于buffer的要求会更高(因为每个报文占用的buffer增多,buffer调度的时间增长)。所以经常发现,随着报文长度的增加,延时测试的结果会越来越大。对于某些设备,当测试5k以上的jumbo帧时,吞吐量甚至有可能达不到100%。更极端的一种情况,是混合包长的转发性能测试,也就是IMIX测试,即测试流量是由不同大小的报文按照一定的比例混合组成。通过测试发现,按照混合帧构造流量的测试结果,甚至会比以jumbo帧(例如一个报文9k)构造流量的测试结果更差。这是为什么呢?
因为设备在转发不同大小报文时,所使用的时间差别很大。以1518和64字节为例,转发一个1518字节的报文约等于24个64字节报文的转发时间。当交换机的一个端口在转发一个大字节报文的过程中,可能会有多个不同字节大小的报文也要从这个端口出去,这就产生了严重的拥塞,导致丢包。所以在混合帧的情况下,对Buffer的要求会更高。
1.4 二三层转发测试时丢包的一般原因
在性能测试过程中,经常会遇到非设备性能因素导致的丢包,对测试产生困扰。这里简单罗列几种:
l 测试套上报FCS错误。一般是因为某根网线、光纤或某个模块故障。解决方法为更换网线、光纤或模块;
l 小字节不丢包,大字节丢包。因为大字节占用buffer资源更多,所以这种情况一般是因为长帧造成的资源不足引起的,可以通过改变buffer设置,来优化测试结果;
l 大字节不丢包,小字节丢包。这种情况一般是由描述符资源限制引起的。部分芯片会为每个报文在其入端口上分配一个报文描述符,相同流量情况下,小字节占用的报文描述符就多;
l MAC HASH冲突。在二层性能测试中,如果使用大量MAC地址测试,可能会出现少量MAC不能被芯片学习的情况,导致部分流量广播,造成丢包。应先测试设备的MAC HASH能力,然后调整MAC地址的数量;
l 聚合端口HASH不均造成丢包。一般情况下,在多芯片或者堆叠环境中,芯片之间的级联口,或者堆叠设备之间的堆叠链路,都会使用多个高速链路的聚合方式来实现。在HASH算法不能保证绝对平均的情况下,会产生某条高速HASH到的流量速率过大,导致的丢包。