文献标识码:A
DOI:10.16157/j.issn.0258-7998.2015.10.001
中文引用格式:黄乐天,周在龙,王君实,等. 片上网络故障模型及容错设计方法合理性分析[J].电子技术应用,2015,41(10):7-12,16.
英文引用格式:Huang Letian,Zhou Zailong,Wang Junshi,et al. Rationality analyzing of fault model and fault tolerance design method for network on chip[J].Application of Electronic Technique,2015,41(10):7-12,16.
0 引言
以2000年由瑞典皇家理工学院Hemani、Janstch等人首先在论文中明确定义了“Network on Chip”的概念为标志[1],片上网络正式成为一个研究领域已经15年了。自该领域诞生之初起,片上网络的可靠性设计就被作为一个重要问题被各国研究者所重视。Benini和Micheli分析了片上通信网络的分层模型并且给出了每层模型应该具备的功能时,明确提出了可靠性设计的需求[2]。片上网络的可靠性问题随着集成电路工艺的进步和片上网络互联规模的扩大变得日趋严重。一方面集成电路工艺在向纳米级演进的过程中,由于加工精度、功耗密度、集成规模等因素而导致工艺误差、老化、单粒子翻转等问题日益严重,从而导致器件的故障概率极大增加。另一方面随着片上网络规模的扩大而导致的总元件数量的上升,导致片上网络中故障发生的总量急剧上升。因此通过合理的容错设计方法提升片上网络的可靠性成为片上网络进一步发展过程中绕不开的一大难题。
集成电路的故障类型依据其发生频率和产生条件可以划分为临时性故障(Transient Fault)、间歇性故障(Intermittent Fault)以及永久性故障(Permanent Fault)三类[3]。参考文献[4]中总结了多种不同的物理效应和三类故障的对应关系。临时性故障主要由于孤立事件翻转(Single Event Upset,SEU和Single Event Transient,SET)以及电子系统内部噪声引起。此类故障的主要特点是临时出现且发生位置随机分布,与外界环境和工作条件关系不大。与临时性故障相对应的是永久性故障,主要由工艺误差、老化、电迁移等原因引起的元器件损伤造成。永久性故障一旦发生将永久存在,且故障的总量将随着集成电路使用时间的增加而持续增大。永久故障的位置分布有一定的随机性,但由老化、电迁移等原因引起的永久性故障则在一定程度上受温度、功耗密度等内外部环境因素的影响。间歇性故障介于临时性故障和永久性故障之间,主要是由于不同因素而导致的时序问题而诱发。虽然某些因老化等因素导致的间歇性故障会随着集成电路使用时间的增加而退化为永久性故障,但更多的间歇性故障则是由于特定时刻串扰(Crosstalk)、温度变化(Temperature Variation)、电压紧急(Voltage Emergency)等内外部环境因素造成的时序问题而引发。因而这些时序问题发生的时间和概率虽然也呈现出一定的随机性,但却更容易发生在集成电路中关键路径(Critical Path)和受环境因素影响更大的区域。由于间歇性故障和临时性故障均不会持续发生,在以往的一些研究中通常将其归为一类故障加以研究[5]。但随着集成电路工艺的进步和低压/近阈值集成电路设计方法的兴起,间歇性故障由于其发生概率极大提升而成为了一个重要问题[6],近年来针对这类故障的研究明显增加。
由于集成电路故障成因和类型的研究大多属于器件和工艺层面的研究内容,在研究容错设计时通常需要根据设计目标的特点将其抽象为特定的故障模型以便深入研究。在抽象的过程中将不可避免地简化故障的某些特征,而不合理的特征取舍可能导致基于此模型的容错设计研究出现偏差,进而设计出容错效率较低的硬件结构或出现过度设计(Over Design)。对于片上网络而言,故障可以在数据链路层、网络层和传输层分别被抽象为不同的模型。数据链路层主要将故障抽象为链路上信号的阻塞(Stuck-at)和翻转(Upset)[7]。网络层的故障模型主要为自适应容错路由研究服务,传统上将故障划分为链路故障和路由器故障[8]。在传输层的故障模型则主要是考虑数据包内容错误或完全丢失[9]。这些模型在很大程度上降低了容错设计的复杂度,但相应的也隐藏了一些关键特性。但更为严重的是,这些模型大多直接借鉴传统的计算机/通信网络故障模型,对片上网络的特异性没有给予足够的体现。造成这种情况的部分原因是因为片上网络在研究的初期大多以架构设计、拓扑分析、路由算法研究等相对高层次的研究为主,与之相伴的容错设计研究也大多采用相对粗糙的模型。
随着片上网络研究的全面成熟和片上多核技术的普及,片上网络已经从系统结构设计层面转向实现与应用层面。自2007年Tilera公司推出了基于片上网络互联结构的64核处理器Tile64[10]起,基于片上网络的多核处理器芯片日渐增多。多伦多大学ABDELFATTAH M S等人于2014年发布了面向现场可编程门阵列(FPGA)的嵌入式片上网络[11]则标志着片上网络开始被用于多核处理器芯片以外其他类型的芯片中。而在这一过程中片上网络的实现结构也日益明确,多数关键模块的实现形式已有一些基本定论。因此我们有条件重新思考在当前和未来集成电路工艺条件下片上网络故障模型的合理性,从而得到更加合理、可行、适用的故障模型,为进一步提升容错设计的容错效率并减少过度设计带来的额外开销奠定基础。同时正确地分析导致故障行为的物理效应,也将有助于设计合理的容错方案。本文将分别对现有片上网络故障模型和容错设计方法的合理性进行初步分析,为从事片上网络容错设计的相关研究者提供参考。
1 片上网络故障模型合理性分析
传统的片上网络故障模型在片上网络容错设计的研究中曾发挥过重要作用,但随着片上网络的发展以及实用化程度的提高,片上网络故障模型与实际的片上网络故障行为之间的差距日益明显。因此需要从造成片上网络故障行为集成电路物理效应出发,重新审视片上网络故障模型的合理性。
1.1 传输层故障模型分析
传统网络的传输层故障模型主要分为数据包内容错误与数据包完全丢失。其中数据包丢失是传统网络传输层所要解决的主要问题。造成传统网络中传输层数据包丢失的主要原因包括:
(1)数据包内容错误超过底层协议可以恢复的极限而被底层硬件(如网卡等)直接丢弃而造成的数据包丢失;
(2)数据报头错误导致错误的传输,如IP报头、TCP报头校验错误时数据包会被丢弃而造成数据包丢失;
(3)由于传输过程中链路拥塞而导致数据包超过生存时间而被丢弃。
由于数据包内容成果底层协议可以恢复的极限这一问题和底层故障概率以及容错设计能力有关,传统网络中数据包由于传输距离较远而容易出现错误,而片上网络底层的故障概率却并不一定很高。对这一问题的具体探讨将在1.3节中再详细讨论。
相比于传统网络,片上网络的传输层故障有其不同的特征。相对于传统网络,片上网络的规模偏小且拓扑结构相对固定,因而在设计之初可以通过多种仿真方法对片上网络的传输带宽作较为精确的分析。同时由于片上网络所承载的是多处理器核心之间传输的信息,由于信息传输实时性要求较高而导致拥塞避免是片上网络设计优化过程中必须要考虑的重要问题。因此由于链路拥塞而丢弃数据包这种行为通常在片上网络中并不被允许,因而这一故障原因在片上网络中并不存在。
与传统网络大多采用串行传输方式不同,片上网络基本是基于Flit的并行传输方式,通常在首个Flit中包含地址、控制等重要信息。由于采用并行传输的方法,不同的位通常采用不同的物理连线传输并独立地存储于不同的存储单元中,因此针对重要信息的位所用物理连线和存储单元可以采用有别于普通位的保护措施以加强。如对地址信息采用性能更强的纠错编码,控制信号采用三模冗余(TMR)等[12],这些链路层容错措施将有效降低甚至消除由于报头错误而导致的数据包丢失的问题。
综上,在一个容错设计合理的片上网络中,传输层故障模型中的数据包丢失故障可以基本忽略。因此需要充分地分析底层设计的容错能力以确定正确传输层故障模型是否需要考虑丢包故障。
1.2 网络层故障模型分析
在过去10多年片上网络容错路由的研究通常面向由永久性故障引起的片上网络路由节点或链路功能性问题,通常认为由于制造缺陷、老化等原因造成的晶体管失效是导致永久性故障的主要原因。在传统网络的网络层故障模型中,故障一般被分为链路故障和路由节点故障以方便容错路由算法的研究。在早期的片上网络容错路由的研究中也普遍地采用了这样的划分方法,这一时期片上网络的研究大多停留在架构设计与分析的层面。但随着Intel等公司先后发布了一系列基于片上网络的多核处理器芯片[13]之后,片上网络的硬件实现结构日益明确,相应的网络层故障模型也需要革新。
传统网络中路由节点故障可能由多种原因导致,如路由器的电源失效导致其因断电而无法工作,整个路由器的功能将完全丧失而导致与其相连的链路均处于断开状态。片上网络路由节点与传统网络路由节点不同的是其功能完全由晶体管组成的逻辑电路实现,而晶体管并不会出现大面积同时失效的情况。因此,如果单个晶体管的失效不会导致整个片上网络路由节点的功能完全丧失,则片上网络路由节点故障实质上并不存在。
一个典型的片上网络路由节点硬件实现结构如图1所示。
从图1中可以看出其数据通路(Data path)可划分为输入缓冲器、交换矩阵、输出寄存器等三个部分。其中输入缓冲器中任何晶体管失效最多只能导致与自身相关的输入链路出现故障,输出寄存器中任何晶体管失效同样最多只能导致与自身相关的输出链路失效。因而这两部分任意晶体管失效均无法造成整个路由节点出现工作不正常的情况而导致路由节点故障。交换矩阵中的故障行为和其具体的实现结构有关,参考文献[14]中给出了三种不同的交换矩阵实现方式,可以分别由传输管矩阵、三态门矩阵以及标准CMOS逻辑门实现的多路复用器。传输管矩阵和三态门矩阵相比于标准的CMOS逻辑门的多路复用器而言虽然具有更小的面积和更低的功耗,但由于这两种方案均存在延迟难以确定、驱动能力偏弱、可能由于控制信号的时序问题而产生临时性的短路等问题而在实际的芯片中较少采用。采用传输管矩阵构建交换矩阵时,若某个传输管由于某种原因处于导通状态,则至少有一对输入线与输出线处于短路状态,如图 2(a)所示。处于这种状态的交换矩阵不但影响故障传输管所在的输出,还有可能通过短接的输入线影响到其他输出的电平。而采用的三态门矩阵和标准CMOS逻辑门的多路复用器构建的交换矩阵由于其单向传输的特性,则只会影响到故障所在的输出,如图2(b)所示。由此可见,在不采用传输管矩阵构建交换矩阵时,单个晶体管的失效只影响其所在的输出端口,而不会波及其余输出端口。因而在大多数不采用传输管实现交换矩阵的路由节点中,数据通路上任意位置出现单个晶体管失效均可以被等效为输入链路故障或输出链路故障,而不会出现路由节点功能整体失效的情况。
在对路由节点的架构分析中,路由节点控制通路(Control path)故障通常被认为会导致路由节点整体功能失效。这是因为架构设计人员在仿真中习惯于调用同样的功能函数来模拟各个输入和输出链路的路由、仲裁等功能。但在实际的路由节点硬件结构中,路由计算单元通常与输入缓冲器配对实现,而仲裁电路则通常与输出寄存器配对实现。这样设计的原因是可以保证多个输入输出链路可以同时完成路由计算/仲裁的工作,从而最大限度地利用硬件并行工作的特性提升包交换的速度。参考文献[15]中给出了路由计算模块和仲裁模块实现的示意图,从中可以较为明确地获悉这种配对的特性。因此,当某个路由计算单元中晶体管失效而导致该单元工作不正常时,可以认为与之配对的输入缓冲器工作不正常而将其等价为输入链路故障。而当某个仲裁模块中晶体管失效而导致该单元工作不正常时也可以认为与之配对的输出寄存器工作不正常而等效为输出链路故障。因此,在一般情况下路由节点控制逻辑中单个晶体管失效也不会造成其整体功能失效。随着失效晶体管数量的增加,可能出现多条输入/输出链路故障,从而使得节点大部分功能丧失。此时可以将多条链路故障等效为路由节点故障。
结合上面的分析可以得出这样的结论,在使用常规的片上网络路由器硬件结构设计方案时,单个或少量的晶体管失效通常不会引起路由节点整体功能的失效或故障。这些故障基本可以被等效为链路故障而非路由节点故障。但随着一些新的仲裁方法或路由算法的提出,其对应的电路结构可能会发生一些变化而导致出现路由节点故障的可能,但出现这种故障的可能性需要进一步探讨。针对一个具体的片上网络设计其容错方案时对片上网络路由节点的具体电路结构进行适当的分析,即可以确定是否有必要采用路由节点故障模型。目前大部分容错路由的研究者已经开始更倾向于使用链路故障模型而非路由节点故障模型。
1.3 链路层故障模型分析
链路层故障模型主要考虑由于数据在传输过程中某些比特位的翻转、呆滞等现象造成该位出现错误。造成链路层故障的物理效应有很多。元件老化、电迁移效应、制造误差等原因造成的某位信号线短路或断路可以被认为是链路层的永久性故障,单粒子翻转效应等影响存储单元状态而造成数据错误可以被认为是链路层的临时性故障,电压紧急、串扰(Crosstalk)等在特定的外部环境或特定工作状态下引起的数据错误可以被认为是链路层的间歇性故障。因而链路层故障实际包含了临时性故障、间歇性故障和永久性故障三种不同的故障分类。这三种故障在链路层虽然故障行为表现相近,但由于其成因的区别导致使用链路层故障模型时其故障概率和故障注入方式有所区别。
临时性故障由于是由单粒子翻转等原因引起的,其发生时间和位置均近似呈随机分布。因此针对临时性故障的链路层故障模型可以视为以一定的概率随机在更改任意位置、任意信号线的值,并不需要对故障的注入做特殊的处理。发生间歇性故障则明显的受到环境以及具体硬件结构的影响,其发生的时间和位置存在一定的规律性,但故障是否发生仍然具有一定的随机性。永久性故障根据其产生原因不同,故障出现的规律也有较大区别。由加工误差引起的永久性故障在分布时具有随机性,但由于老化引起的永久性故障则明显与环境有关,因而其空间位置的分布不是完全随机的。所以链路层间歇性故障和永久性故障的发生概率和空间分布问题是一个需要讨论的问题。
首先对链路层间歇性故障的发生概率和空间分布加以讨论。串扰(Crosstalk)被认为是引起链路层间歇性故障的一个重要因素。一般认为由于信号线上特定的信号跳变引起某些信号变化延迟,若恰好与时钟抖动等因素相配合则容易导致该信号被保存为一个错误的值,从而引发故障。一般片上网络容错设计研究者在考虑串扰引起的间歇性故障时,通常习惯于从信号跳变过程本身去加以考虑,通过编码或其他方式改变跳变的图案(Pattern)来对其加以避免[16]。但实际上串扰本身是否会发生其实需要一定的外部条件,同时其是否会引起故障实际上更取决于其是否真正破坏了数字集成电路的时序。要发生串扰通常需要信号线线距和线长均满足一定的条件,因而可能发生串扰的位置通常在两个路由节点之间的互联线上而非其内部连线。但从参考文献[17]中明确给出的路由节点中各级流水线延迟的情况来看,在链路传输(Link Transmission,LT)即两个路由节点之间信号传输阶段的延迟要远远小于其他级流水线。换言之,在常规拓扑结果中链路传输本身并不处于关键路径(Critical Path)上。因而不管是否出现因为串扰而导致信号延迟的情况,在链路传输阶段的时序余量可以充分保证被下一级路由节点接收的信号处于稳定状态。但对于某些面向特定应用的非规则片上网络而言[18],在网络中存在一定的长走线,因而可能由于延迟较大而容易受到串扰的影响。造成间歇性故障的其他因素诸如电压紧急、温度等同样导致特定位置的信号出现故障,通常这些故障更多出现在关键路径上。在设计阶段虽然设计者无法准确地预知所有故障发生的位置与概率,但却可以通过对设计方案进行仿真与分析确定容易发生故障的薄弱环节,从而合理地设置和使用链路层故障模型。
链路层永久性故障的发生概率和空间分布同样有一定规律可循。由于老化引起的永久性故障与老化条件有关,因而分析并确定容易引起老化的环境因素对确定这类故障发生的概率和空间分布是有很大帮助的。温度是引起晶体管老化的重要原因,对于集成电路的温度分布可以在设计阶段即通过一系列的热仿真得到。而由于工艺误差或制造过程引起的永久性故障比较难以精确建模,但可以通过分析电路模块的规模简单等效得到,在此不再赘述。
2 容错设计方法合理性分析
片上网络的容错设计方法已有相当数量的论文讨论,但这些论文通常只注重介绍容错方法本身,而对容错设计方法的使用前提与使用场景缺乏深入分析与讨论。这一现象导致容错设计方法的合理性存在较大问题,因而本文结合之前对故障模型的分析对容错设计方法的合理性进行必要的分析。
2.1 基于离线测试的容错方法
基于离线测试的容错方法是一种最基本的容错方法,其目的在于提高芯片的良品率。较为典型的基于离线测试的容错方法即为片上网络自适应路由。大多数自适应路由都是在故障状态已知的前提下,通过外部所给出的故障信息按自适应路由算法调整信息的传输路径以避开出现故障的链路或路由节点。
按具备自适应路由能力的路由节点对故障信息的知晓程度不同,自适应路由可分为基于全局信息的自适应路由算法、基于局部信息的自适应路由算法和基于本地信息的自适应路由算法三类。基于全局信息的自适应路由算法需要使用整个网络的各个资源的状态信息。当然,一个路由器需要确切知晓网络中所有资源的状态信息非常困难,代价非常高。因而此类算法常采用空间迭代,使得每个路由器获得等价的全局信息,如Q-Routing[19]。基于局部信息的自适应路由算法需要路由节点知晓临近节点的信息,FoN[20]以及FRR[21]是此类算法的典型代表。相比于全局信息,获取局部信息的代价要小很多。此类自适应路由算法也一直在优化故障信息传输的开销。基于本地信息的自适应路由算法则只关注与路由节点相连的链路或节点的状态,Gradient算法[22]就是该类算法的代表。这三类算法中虽然基于全局信息的自适应路由算法效果最好,但由于其信息传播开销最大而较少有人研究。基于本地信息的自适应路由算法性能提升受到较大限制而导致优化空间较小,但在故障概率较低的情况下已经足以满足设计需求。基于局部信息的自适应路由算法是前几年研究的热点,其难点在于平衡信息传播开销、算法复杂度等多方面的因素。
在传统的自适应路由方法的研究论文中几乎不曾提及如何检测并确定某条链路或路由节点已处于故障状态,其通常认为故障信息已经确认并作为已知前提开展研究。因而,离线测试作为一种基本的检测手段可以直接与这些自适应路由算法相配合作为提高良品率的方法。但需要注意的是离线测试只能针对出厂后的芯片加以检测,因而主要检测由于生产加工问题而引起故障。这类故障的成因、分布及其行为在前文已有分析。在选择或设计合理的自适应路由算法时应对其充分加以考虑,避免使用与之不相符合的故障模型或错误估计故障概率。
2.2 基于在线测试的容错方法
与基于离线测试的容错方法不同,基于在线测试的容错方法往往需要与一定的在线测试手段相配合。首先通过在线测试确定故障的位置或发生的概率,再采取相应的方法绕开或替换故障单元以达到容错的目的。
基于编码的在线检测方法是开销较小、实现也较为方便的一种。这种方法通过检错或纠错编码检测传输过程中数据出现的错误。但由于纠错编码同时也具备错误数据恢复的功能,因而在大多数研究中把这类方法归结于容错方法而非在线检测方法。但实际上合理运用纠错或检错编码并与测试数据注入方法配合是可以达到在线检测效果的,在后文中将对此做一定的分析。基于编码的方法可以很方便地与重传机制相配合构成较为高效的混合纠错重传机制(hybrid FEC/ARQ)[23],该方法对于临时性故障的容错效果较好。但使用混合纠错重传机制会导致比较大硬件开销和传输延迟,因而通常被用于传输层容错。
按照特定的规则向网络注入专门的测试数据包,可以根据包的到达情况和接受到的数据对片上网络的链路和路由节点加以检测。与基于编码的方法不同的是,由于发送的数据包内容是确定的,可以在接收端通过比对检测出链路中多个数据故障。由于其传输路径可以提前设置,可以对路由节点中不同的传播路径加以测试[24]。使用特定的测试数据包不但可以判断链路层故障引起的数据错误,还可以通过数据包能否正常地通过特定的传输路径来判断路由节点中某些控制逻辑是否出错。当测试出路由节点的问题后将其映射为链路故障模型,再配合自适应路由算法即可以实现网络层容错设计。采用专门测试数据包的另外一个优点在于通过统计已到达数据包的错误概率,在明确数据包传输路径的基础上可以求解出不同链路或传输路径上包的错误概率,进而对于诊断间歇性故障有极大的好处。
在线测试的另外一种方式是采用在线的内建自测试(BIST)电路。这类在线测试方法需要针对片上网络设计专门的电路测试电路[25],并用适当的方法将被测电路与其他的部分电路隔离。采用内建自测试电路可以在更细粒度的层面检测故障,有利于采用更细粒度的错误恢复机制。但内建自测试电路测试的规模与其测试粒度有关,测试粒度越细则电路复杂度和规模越大。近年来将内建自测试电路用于片上网络容错设计的研究者主要把精力放在如何平衡在线检测性能、粒度和代价。
2.3 基于纠错和硬件冗余的容错方法
纠错与硬件冗余从本质上来说属于同一类方法。纠错依靠传输更多的信息使得数据错误可以被修复,硬件冗余则通过在网络中增加更多的硬件资源以使当部分硬件出现故障时片上网络仍然可以正常运行。在传输更多信息时必然涉及到使用更多的硬件资源如连线或存储单元来,因而也是一种意义上硬件冗余。严格意义上说,片上网络自适应路由算法就是利用了片上网络互联资源的硬件冗余来达到容错目的。
纠错的效果与纠错编码的复杂度以及传输过程中出现错误的概率有关。在端到端传输的错误概率显然大于在两个路由节点之间传输的错误概率。因而在两个路由节点之间才有纠错编码的效果显然好于端到端传输,但后者的面积、延迟、功耗等开销要远远小于前者[26]。各种开销的增加实际上会导致片上网络的整体性能下降,在很多时候使得容错设计失去了原本的意义。换言之,如果主动降低片上网络的性能如运行速度等,往往可以使得间歇性故障概率下降而在使用端到端纠错达到同样的效果。这方面的研究目前尚缺乏比较全面和深入的分析。
3 结语
本文结合片上网络的硬件实现结构和先进工艺集成电路物理效应对片上网络存在的故障行为进行了总结,分别就传输层、网络层和链路层的故障模型进行了详细的分析。通过分析表明现有的故障模型是存在一定的适用范围的。在此基础上对不同故障模型所适用的应用场景也进行了归纳总结。在分析故障模型的基础上对现有的片上网络容错方法进行了总结,对其合理性和应用方法作了初步分析。从本文的研究可以看出,片上网络容错设计虽然经过多年的发展已经取得了长足的进步,但目前各个研究点还相对孤立而未形成全面完善的解决方案或研究结论。片上网络容错设计还有赖于各国研究者的进一步大力研究。
参考文献
[1] HEMANI A,JANTSCH A,KUMAR S,et al.Network on chip:An architecture for billion transistor era[C].In Proceedings of 18th conference of Norchip,2000:1-8.