摘要: 本文针对以太网异步的特性,讨论了当前业界使用的避免丢包的方法,并就这些方法中最常用的流控机制做了具体陈述,并基于VSC7323阐述了具体实现方式。
关键词: 以太网;丢包;流控;VSC7323
异步以太网中的丢包问题
目前广泛应用的以太网仍然基于异步机制,异步指网络中的各个设备处于各自独立的时钟域。
图1是一种以太网应用示例。以太网设备1和以太网设备2代表以太网中相互进行业务传输的设备。
图1 以太网传输示例
示例的传输机制如下:设备1 的待发送数据包存储在其内部发送缓存中,并基于本设备的工作时钟(OSC1)进行发送。数据包进入设备2后,首先经过CDR(时钟数据恢复器)的处理,从接收数据中提取出时钟,并利用此时钟,将数据包存入其接收缓存中。存入接收缓存的数据包经过本设备上层协议处理或经过网络中其他设备的传输和处理后,假设这些数据包的数目没有发生变化,并且需要经过设备2传输回设备1。
根据图1,设备1发出数据包是基于本地时钟OSC1,设备2作为接收方,基于从接收到的数据包中提取出的时钟CLK2,采样接收数据并将其存储进入接收缓存。分析可知,CLK2和OSC1两时钟是同步的。依此同样可以推知设备2发往设备1的数据包传输流程。由于以太网异步工作的本质,OSC1和OSC2作为不同设备的本地时钟,并不能做到完全同频(以太网设备的工作时钟允许有正负50ppm的频差),假设OSC1的频率高于OSC2,则设备2将以比较快的速度在接收口上接收数据包,但只能以较慢的速度在发送口上转发出去。从而在设备2上将存在流量的瓶颈,当设备2 的接收缓存存满后,会导致丢包。
为了更加清晰的表述问题,将设备2作为一个黑盒子,并且考虑极限情况,即输入速率处于最快情况(即设备1 的工作时钟相对标准时钟具有+50ppm的频差),而输出速率处于最慢情况(即设备2的工作时钟相对标准时钟具有 -50ppm的频差)。其工作模式如图2。
在图2中,设备2 的输入数据速率比输出数据速率高,那么部分数据包只能丢弃。
图2 简化的设备2工作模式
解决丢包的方案
对于示例中的设备2,由于接收数据包的速度快于其发送数据包的速率,数据包将在缓存中堆积,一定时间后将发生溢出并造成数据包丢失。为避免丢包,一般有四种解决方法:
·降低设备1的发包速率,即增加所发送的数据包之间的IDLE码的数目,由于设备2只需缓存有效数据包而无需存储IDLE码,但对于设备1而言,IDLE码需要占据其发送时隙,由此可以补偿设备1和设备2之间的频差。
·设备2把自身的接收缓存的状态告知设备1,设备1一旦接到设备2的缓存将满告警信息,将主动暂停发包一段时间,从而避免设备2的缓存溢出。这种缓存告警信息称为流控信息,而相关的一套机制称为流控机制。
·采用同步以太网机制。图1中,对于设备2,如果利用从接收数据中提取的时钟CLK2代替OSC2作为本设备的系统时钟,则能实现设备2对设备1的同步。除此以外,目前通过数据包传送同步信息的方法也在讨论中(参考电气电子工程师协会提出的标准IEEE1588)。
·在设备2的发送侧通过减小IPG(帧间距)来加快其发送有效数据包的速度,从而使得发送速度能跟上接收速度。
对以上四种方法,虽然都可以避免数据包的丢失,但方法1的实现会导致系统性能的降低;方法3需要更改以太网设备的硬件设计或添加相关的协议层软件,成本较高。方法4虽然可以解决问题,但目前以太网设备厂商众多,单纯的依靠更改IPG并不能从根本上解决问题。下文重点描述方法2即流控机制的实现。
流控机制和具体实现
在以太网中,作为一种解决丢包的方法,流控机制的本质是使通信设备能实时的了解对端设备对通信流量的要求,根据对端设备的要求来决定本设备是继续发送还是暂停发送数据包。这要求以太网通信设备必须根据自己的缓存的状况,实时将缓存的空或满信息发送给对端。这种缓存的空满信息就称为流控信息。
全双工模式
对于全双工通讯设备,流控信息通过发送Pause帧来实现传输。Pause帧是一种符合IEEE802.3标准的以太网帧,其属于MAC控制帧的一种,MAC控制帧的格式如图3所示。
图3 MAC控制帧格式
目的MAC地址域,6字节,要求为01-80- C2-00-00-01;源MAC地址域,6字节,为本设备MAC地址;以太网帧长度或类型域,要求为88-08,用于标明本帧的类型为MAC控制帧;MAC控制操作码,2字节。Pause帧仅是MAC控制帧的一种,对于Pause帧,其在MAC控制帧中的操作码为00-01;MAC控制参数域,包含用于MAC控制相关的参数。对于Pause帧,此处应填入要求对端设备暂停发送的时间长度,由两个字节(16位)来表示该长度,每单位长度为物理层芯片发送512位数据的时间。所以发送一次Pause帧,要求对端设备暂停发送的时间长度最长为:65535×512 / 以太网传输速率;保留域。
需要注意,Pause帧不能用于要求对端设备暂停发送其自己的MAC控制帧。
以VITESSE公司的以太网接口芯片VSC7323为例。该芯片作为数据链路层芯片可支持10个千兆以太网接口。
每个以太网口对应一个接收缓存。 对每个接收缓存设置了两个水位线:高水位线HIGH_WM和低水位线LOW_WM,如图4所示。
在图4中,纵轴代表接收缓存的占用量,横轴代表时间。如果占用量达到了HIGH_WM,则接收设备将向发送设备发出Pause帧,发送设备接收到有效Pause帧后,将立即暂停发送,使接收设备有充足的时间处理接收缓存中的数据。当接收缓存的占用量逐步降低达到LOW_WM时,表明接收缓存目前可以有充足的容量来接收数据包,从而接收设备将停止发送Pause帧,使得发送设备能继续传送数据。
图4 流控水位线示意图
多长时间发送一次Pause帧?如果发送频率太高,将占用宝贵的带宽资源,反之,则达不到流控的目的。
工作于全双工模式时,VSC7323芯片支持两种流控机制:标准流控和XON/XOFF机制。
标准流控机制。芯片内部,每个以太网口都拥有一个独立的接收缓存。每个接收缓存对应一组寄存器,用户可以根据需要配置HIGH_WM,LOW_WM,PAUSE_VALUE等参数。其中PAUSE_VALUE的意义请参考前文对于MAC控制参数的描述。其数值代表发出一个Pause帧后,发送设备需要等待PAUSE_VALUE个时间单位才能继续发送(通过对PAUSE_VALUE的值进行递减计数到0来实现),而对于接收设备而言,只要本接收缓存的占用量高于HIGH_WM,则将每隔1/2的PAUSE_VALUE个单位时间发出一个Pause帧,直到缓存占用量小于LOW_WM为止。PAUSE_VALUE的值将通过Pause帧的MAC控制参数域发送给对端设备。
XON/XOFF机制与标准机制类似,不同点在于发送方不需要等到PAUSE VALUE倒计数为0才能继续发送,只需要接收方发来一个PAUSE VALUE等于0的Pause帧,则发送方可立即发送。相对而言,XON/XFF比标准机制更加灵活且有助于提高性能。
基于VSC7323,首先要配置其工作于全双工模式,并使能流控能力。由于VSC7323的接收缓存的总空间为3Mbits,通过寄存器,可以把这些空间对10个以太网口进行平均分配,也可以根据QoS(服务质量)的要求,对质量要求高的口分配更多的缓存。对每个口分配完成后,再进行HIGH_WM,LOW_WM,PAUSE_VALUE参数的配置即可实现流控机制。
半双工模式
对于半双工通讯设备,通过Back Pressure(反压)来实现流控。对于工作在半双工模式下的设备,流控信息可以通过发送collision(冲突信号)来实现。根据CSMA/CD(载波监听多路访问/冲突检测)工作方式,在半双工模式下,任何以太网设备在发送数据之前必须对通信线路进行监测,以确保本设备发送的数据不会和别的设备发送的数据发生冲突。如果存在冲突,则需要等待一段随机的时间后才能继续发送。Back Pressure正是利用了半双工的这种特性,当接收设备的缓存占用量超出阈值时,其将主动发出类似冲突的信号给对端设备,对端设备检测到冲突,将会取消本次发送,等待一段随机的时间后再重发。
对于VSC7323,需要注意,当其工作于半双工模式时,不能支持千兆速率,即只能工作于10/100 Mbps 模式。在流控配置上,HIGH_WM和LOW_WM的配置方式与全双工模式相同。与全双工模式不同的是,由于半双工模式下设备只能通过产生collision来要求对端设备暂停发送,PAUSE_VALUE的信息不可能传输给对端,所以半双工模式下,无需配置PAUSE_VALUE。只要接收缓存的占用量高于HIGH_WM,设备将持续制造collision,使得对端设备无法有效发送数据,直到接收缓存的占用量低于LOW_WM,设备才停止制造collision,使对端设备能继续发送数据。
就本质而言,全双工的Pause帧方式和半双工的Back Pressure方式,都是通过一种通信双方都能够识别的信息,在接收设备缓存占用量超出阈值时,使发送设备暂停发送,从而避免由于接收设备的缓存溢出造成丢包。
流控机制已经作为标准定义在IEEE 802.3规范中,目前绝大多数以太网设备都能支持该机制。