跳转到主要内容

D.9 谬误与陷阱

谬误:组件会迅速失效并停止工作

不少容错文献采用简化假设:组件一直完美运行,直到潜在错误激活,随后发生失效并停止工作。

Tertiary Disk 的经历恰好相反。许多组件在彻底失效很久之前就开始表现异常,通常须由操作员判断是否宣布它已失效。组件一般会继续违反服务约定,直到被操作员“终止”。

图 D.20 展示四个最终被停用的磁盘,在更换前多久开始异常。

失效磁盘的系统日志消息日志条数持续时间(小时)
硬件失效:现场可更换单元的外围设备写故障。原文 Hardware Failure (Peripheral device write fault [for] Field Replaceable Unit)1763186
未就绪:诊断失败,ASCQ 为现场可更换单元的组件 ID。原文 Not Ready (Diagnostic failure: ASCQ = Component ID [of] Field Replaceable Unit)146090
已恢复错误:现场可更换单元超过失效预测阈值。原文 Recovered Error (Failure Prediction Threshold Exceeded [for] Field Replaceable Unit)13135
已恢复错误:现场可更换单元超过失效预测阈值。原文 Recovered Error (Failure Prediction Threshold Exceeded [for] Field Replaceable Unit)43117
图 D.20 Tertiary Disk 的 368 盘中,18 个月内被替换的四盘的系统日志记录[Talagala 和 Patterson 1999]。消息遵循 SCSI 规范,由设备驱动写入日志。有的盘在操作员更换前一周就出现消息。第三、第四项说明磁盘预测机制已检测到并预告即将失效,但操作员仍在数小时后才更换。

谬误:计算机系统确如广告所言,达到 99.999% 的“五个九”可用性

服务器公司的市场部门开始夸耀硬件可用性,宣称图 D.21 中 99.999% 的等级,即“五个九”;甚至操作系统公司的市场部门也试图让人有这种印象。

每年不可用时间(分钟)可用性可用性等级(九的个数)
50,00090%1
500099%2
50099.9%3
5099.99%4
599.999%5
0.599.9999%6
0.0599.99999%7
图 D.21 达到各可用性等级所对应的每年不可用分钟数,取自 Gray 和 Siewiorek[1991]。注意,五个九约等于每年不可用五分钟。

每年只中断五分钟当然令人印象深刻,但考虑调查中的实际失效数据,很难相信。例如 HP 声称,HP-9000 硬件与 HP-UX 能在“某些预先定义、预先测试的客户环境中”保证 99.999% 可用性[Hewlett-Packard 1998]。保证不包括操作员、应用和环境故障,而这些很可能已是主要故障类别;也不包括计划停机。系统未达承诺时,厂商承担什么经济处罚,同样不清楚。

Microsoft 也开展“五个九”营销。2001 年 1 月,www.microsoft.com 停机 22 小时;要把该网站可用性提高到 99.999%,此后 250 年都必须没有停机。

与宣传暗示不同,管理良好的服务器通常达到 99%–99.9% 可用性。

陷阱:功能实现在哪一层,会影响可靠性

理论上,把 RAID 放进软件没有问题;实践中,让它可靠运行却很难。

软件文化通常依赖连续版本与补丁,最终逐步达到正确;软件也难与其他层隔离。例如,正常运行往往依赖恰当的操作系统版本和补丁。因此,许多客户因软件 RAID 的缺陷或环境不兼容而丢失数据。

硬件当然也会有缺陷,但硬件文化通常更重视初始发布前的正确性测试;硬件也更可能独立于操作系统版本。

谬误:操作系统最适合调度磁盘访问

ATA、SCSI 等高层接口向主机操作系统提供逻辑块地址。基于这种抽象,OS 最多只能尝试按逻辑地址递增排序。只有磁盘知道逻辑地址如何映射到扇区、磁道与盘面的物理几何,因而能降低旋转和寻道延迟。

例如有以下四次读取[Anderson 2003]:

操作起始 LBA长度
读7248
读10016
读99871
读26128

主机可能按逻辑块顺序重排:

操作起始 LBA长度
读26128
读10016
读7248
读99871

取决于数据实际位置,重排反而会恶化性能,如图 D.22。磁盘自行调度只需转 3/4 周,OS 调度却要三周。

主机与磁盘的读取调度
图 D.22 OS 与磁盘调度的比较,分别标为 Host-ordered queue(主机排序队列)和 Drive-ordered queue(磁盘排序队列)。前者完成四次读取需要旋转三周,后者仅需 3/4 周[Anderson 2003]。

谬误:系统中磁盘的平均寻道时间,等于跨越三分之一柱面数的寻道时间

这一误解把厂商销售磁盘时的指标与预期实际性能混为一谈,还错误地假定寻道时间与距离成正比。“三分之一距离”的经验规则,是在磁道很多、排除当前磁道的条件下,从一个随机位置到另一个随机位置的平均距离。过去厂商公布这一距离的寻道时间,便于一致比较;现在则计时全部寻道,再除以次数,计算“平均值”。若错误地认为寻道时间线性依赖距离,可用厂商公布的最短与“平均”时间作如下常见估计:

Timeseek=Timeminimum+DistanceDistanceaverage(Timeaverage−Timeminimum). \mathrm{Time}_{\mathrm{seek}}=\mathrm{Time}_{\mathrm{minimum}}+ \frac{\mathrm{Distance}}{\mathrm{Distance}_{\mathrm{average}}} (\mathrm{Time}_{\mathrm{average}}-\mathrm{Time}_{\mathrm{minimum}}).

这个谬误有两层。首先,寻道时间并不与距离线性相关。磁臂必须克服惯性加速,达到最大移动速度,在接近目标时减速,再等待振动停止,即稳定时间。有时还须暂停以控制振动。对于超过 200 个柱面的磁盘,Chen 和 Lee[1995]采用模型:

SeekTime(Distance)=aDistance−1+b(Distance−1)+c. \mathrm{SeekTime}(\mathrm{Distance})= a\sqrt{\mathrm{Distance}-1}+b(\mathrm{Distance}-1)+c.

针对每种盘选择 a,b,ca,b,c,使公式吻合距离为 1、最大距离、最大距离三分之一时的标称时间。图 D.23 比较该式与错误的线性公式;平方根项体现了加减速。

第二,规格中的平均值只有在磁盘活动没有局部性时才适用。幸运的是,磁盘访问既有时间局部性,也有空间局部性(见附录 B 第 B-2 页)。图 D.24 是 UNIX 分时与业务处理两种负载的寻道距离样本。注意两者都有很高比例访问同一柱面,即图中距离 0。可见这个谬误极具误导性。

寻道距离与寻道时间模型
图 D.23 较精细模型与简单线性模型的寻道时间—距离关系。Chen 和 Lee[1995]发现,图中参数 a、b、c 的表达式对多种磁盘都适用。横轴为寻道距离,纵轴为访问时间(ms);Naive seek formula 为简单公式,New seek formula 为新公式。

图内参数公式转写如下,其中 NN 表示柱面数:

a=−10Tmin⁡+15Tavg−5Tmax⁡3N,b=7Tmin⁡−15Tavg+8Tmax⁡3N,c=Tmin⁡. a=\frac{-10T_{\min}+15T_{\mathrm{avg}}-5T_{\max}}{3\sqrt N},\qquad b=\frac{7T_{\min}-15T_{\mathrm{avg}}+8T_{\max}}{3N},\qquad c=T_{\min}.
两种工作负载的寻道距离分布
图 D.24 两种系统的寻道距离测量样本。左为 UNIX 分时系统,右为调度磁盘访问以提高吞吐量的业务处理应用。距离 0 表示同一柱面;其他数值表示纵轴相邻界限之间的累计比例。例如右图标 16 的柱为 11%,表示跨越 1–16 柱面的寻道占 11%。UNIX 只测到 1000 柱面中的 200,但覆盖 85% 访问;业务负载跟踪全部 816 柱面。图外占比至少 1% 的距离,仅有 224 占 4%,以及 304、336、512、624 各占 1%。总计 94%,其余为其他类别中小而非零的比例。数据由 Seagate 的 Dave Anderson 提供。横轴为寻道比例,纵轴为寻道距离。

表格阅读