DDI0487--A1.7
Introduction
RAS(Reliability,Availability,Serviceability)
RAS是衡量一个系统可靠性的三个方面:
Reliability——持续提供正确服务的能力。
Availability——正确提供服务的准备状态。
Serviceability——能够进行修改和修复的能力。
RAS技术能够减少意外停机情况的发生,原因在于:
短暂性错误能够在它们导致应用程序或系统出现故障之前被检测出并予以纠正。
出现故障的部件能够被识别出来并予以更换。
提前预测出可能出现的故障,以便在计划性维护期间进行更换。
Faults,errors,and failures
当服务实现了系统功能时,即为正确的服务交付。
正确的服务可能包括:
得出正确的结果。
在分配给该任务的时间内完成任务并取得结果。
不泄露机密和安全信息。
为了描述RAS扩展和RAS系统架构,偏离正确服务的情况下使用以下定义:
故障(failure)指的是偏离正确服务状态的情况。这包括数据损坏,数据丢失和服务丢失。
错误(error)即偏离正确服务的表现。存在错误的不正确值是无效的。
错误(error)的根源是故障(fault)。
未被检测到却确实存在的错误被称为潜在错误或未被发现的错误。
在没有错误检测的系统中,所有错误都是潜在错误,它们会通过各个组件默默地传播下去,直到被掩盖住或产生故障。
故障的严重程度可以从轻微到灾难性的范围变化:
一次小失误所带来的后果与正确服务交付所带来的益处相比,其代价是相当的。
灾难性故障所带来的有害后果要比正确服务交付所带来的益处高出好几个数量级,甚至高的无法相提并论。
一个系统中存在诸多故障源,包括软件和硬件故障:
硬件故障源自硬件内部或者影响硬件本身。
软件故障影响的是软件本身,即程序或数据。
RAS扩展和RAS系统架构主要针对有硬件故障引发的错误。这些错误主要分为2个方面:
瞬时性故障。
非暂时性故障或持续性故障。
General taxonomy of errors
错误检测
当一个组件访问内存或其他状态时,可能会在内存或该状态中检测到错误。
该错误可能会由组件自行修正或推迟处理,或被标记为“延迟错误”或“检测错误”传递给另一个组件。
错误传播
当事务的生产者给消费者传递一个值或信号时,就发生了事务处理。
Transactions是生产者给消费者提供的服务的一部分。
在许多协议和服务接口定义中,高级事务由一系列操作组成,例如在Requester和Completer之间。
就本手册而言,生产者和消费者之间单向传输的最基本形式被认为是transaction。
也就是说,操作序列中的每一个都被视为一个单独的事务。
对于某些操作,例如请求,请求者是生产者,完成者是消费者。
对于其他操作,例如响应,完成者是生产者,请求者是消费者。
当服务接口因错误而不正确时,错误将由事务的生产者传播。错误被传播给消费者。
错误是通过偏离正确的服务传播的,包括以下任何一种情况,如果没有激活故障,这些情况是不允许发生的:
损坏的值从生产者传递给消费者。
发生了不该发生的事务或其他操作。
应该发生的事务或其他操作没有发生。
在多处理器一致系统中,可以观察到单处理器语义的丢失或任何其他一致性的丢失。
更改事务或其他操作的时间和/或顺序,使这些事务或操作的时间和/或顺序不正确。
在这种情况下,服务接口为事务和其他操作定义可接受的时间和/或顺序。
如果事务的消费者无法检测到错误,并且由于事务而消耗未检测到的错误,则错误将由事务的生产者静默传播。这可能是由于:
事务中存在错误,但未被生产者检测到。该错误由生成器以静默方式传播。
该错误存在于事务中,但没有作为错误向消费者发出信号。例如,在事务中传递了已损坏的值,但没有任何迹象表明它已损坏。该错误由生成器以静默方式传播。
如果事务导致错误变得无法检测,则潜在的(可能检测到的)错误将由其他正确事务的消费者静默传播。
在系统中,错误可能会被逐级传播,直至一下情况之一发生:
它们被屏蔽,并不会影响到系统的运行结果。
错误可能被掩盖,因为不正确的值被丢弃或覆盖,或错误被检测出并移除。
它们会影响系统的服务接口,并有可能导致故障。如果错误已经悄然而至服务接口,那么:
这是一种无声数据损毁(Silent Data Corruption,SDC)。
此故障(以每十亿太设备运行一小时操作的故障数量衡量)的发生率被称为“无声故障发生率”。简称SDC FIT率。
或者该错误可能已经被检测,从而导致系统调用错误处理和恢复机制。更多信息,请出参阅Arm Reliability,Availability,and Serviceability(RAS)System Architecture,for A-profile architecture(ARM IHI 0100).
Infected and poisoned
当组件收到一个未修正的错误并据此更新其状态时,该组件状态就会受影响变得infected。
如果某个值在组件的状态中被标记为存在错误,则称其处于被污染状态,这样一来,在后续对状态的访问中,会检测到该值已被标记为存在错误,并将其视为已检测到的错误。
poison用于掩饰错误。
可控制和不可控制的
未被发现的错误会在未检测到该错误的组件中不能得到遏制。
一个无声息传播的错误在无声息传播的组件中得不到遏制。
如果组件中检测到未纠正错误,则在该组件中不被控制。
如果在组件上中检测到的未纠正错误不是不可控的,则在组件上是可控的。
如果组件无法确定检测到的未纠正错误是在组件上不可控制还是在组件上可控制,则组件将检测到的未纠正错误视为在组件上不可控。
在组件上不可控的错误可能在系统级别上是可控的。
将错误报告为可控则允许软件遏制该错误。这并不意味着硬件已经遏制了错误。