# 6.9 谬误与陷阱
<!-- source: p0570 -->

WSC 虽然只有 25 年历史，Google 等公司的 WSC 体系结构设计者已经发现许多谬误与陷阱，而且往往付出了代价才获得这些认识。正如引言所说，WSC 体系结构设计者就是今天的 Seymour Cray。

## 谬误：云计算提供商在亏钱

AWS 刚宣布时，关于云计算的一个常见疑问是：按当时那样低的价格，能否盈利？AWS 后来发展得如此庞大，必须在 Amazon 季度财报中单独列报。令一些人意外的是，AWS 已被证明是公司最赚钱的部分。2021 年，AWS 营收为 620 亿美元，营业利润为 185 亿美元；Amazon 其他全部业务营收为 4070 亿美元，营业利润却只有 65 亿美元。2016 年，AWS 营收为 122 亿美元，营业利润率为 25%，而 Amazon 零售业务的营业利润率低于 3%。AWS 一直贡献着 Amazon 约四分之三的利润。

## 陷阱：关注平均性能，而不是第 99 百分位性能

正如 Dean 和 Barroso（2013）指出的，WSC 服务开发者更关心分布尾部，而不是均值。如果某些客户获得的性能很差，这种体验可能把他们赶到竞争对手那里，而且再也不会回来。

## 陷阱：为了提高 WSC 性价比，采用性能过弱的处理器

Amdahl 定律仍然适用于 WSC。每个请求总有一些串行工作；如果它们在慢服务器上执行，请求延迟就可能增加（Hölzle，2010；Lim 等，2008）。如果串行工作使延迟增加，使用弱处理器的成本就必须包括优化代码、使延迟恢复到较低水平所需的软件开发成本。大量慢服务器带来的更多线程，也可能更难调度和均衡负载；线程性能的波动因此会导致更长的延迟。当必须等待最慢任务时，一次糟糕调度出现的概率即使只有千分之一，对 10 个任务可能无关紧要，对 1000 个任务却会成为问题。

十年前，有人预计定制 CPU 会采用比最新乱序核心更简单、但数量更多的核心。这个预期没有实现。云提供商继续部署配备最新<!-- source: p0571 -->乱序核心的最新 x86 芯片。一些提供商使用乱序 Arm 核心构建定制 CPU，在单线程性能上与 x86 乱序核心竞争，AWS Graviton CPU 就是一例。对于迁移到云上的单机负载，乱序核心是显而易见的选择。即使分布式负载拥有充足的请求级并行性，乱序核心也能让开发者无需花费大量精力优化代码，就获得良好的吞吐量和延迟。尽管存在效率问题，改进速度也不快，乱序核心对 WSC 系统仍然十分重要。有趣的是，高端乱序核心如今又普遍出现在智能手机中，与简单核心组成 big-little 配置。

大量较小服务器还可能导致利用率降低，因为需要调度的对象越少，显然越容易安排。最后，即便某些并行算法，在问题划分过细时，效率也会降低。Google 的经验法则是采用服务器级计算机中的低端型号（Barroso 和 Hölzle，2009）。

一个具体例子来自 Reddi 等（2010）：他们比较了运行 Bing 搜索引擎的嵌入式微处理器 Atom 与服务器微处理器 Nehalem Xeon。结果发现，Atom 的查询延迟约为 Xeon 的三倍；Xeon 也更稳健。随着负载增加，Xeon 的服务质量缓慢、小幅下降；Atom 在试图承受额外负载时，很快就无法满足服务质量目标。虽然 Atom 的能效更高，但响应时间会影响收入，收入损失很可能远高于节能带来的成本节省。无法满足响应时间目标的高能效设计，很难获得部署；下一章 7.9 节还会看到这一陷阱的另一个实例。

这种行为会直接转化为搜索质量差异。鉴于延迟对用户的重要性，正如原文所引图 6.37 所示，只要查询延迟尚未超过截止时间，Bing 搜索引擎就会采用多种策略改善搜索结果。较大的 Xeon 节点延迟较低，因此有更多时间改进结果。于是，即使 Atom 几乎没有负载，也有 1% 的查询答案比 Xeon 差；正常负载下，这个比例为 2%。Kanev 等（2015）给出了更新、但结论一致的结果。

> **译注：** 此处原文引用图 6.37，但图 6.37 是 Nitro 虚拟机启动过程。关于服务延迟影响的相邻图表是图 6.36，原书交叉引用疑有误。

## 陷阱：不同公司的 PUE 测量口径不一致

Google 的 PUE 测量从电力到达变电站之前开始。有些公司从 WSC 入口测量，跳过了降压环节，而这部分损耗可达 6%。如果 WSC 利用室外空气辅助冷却，季节不同，结果也会不同。最后，有些公司报告的是 WSC 设计目标，而不是建成系统的实测值。最保守、也最好的 PUE 测量方法，是从公用电网供电入口开始测量，并报告过去 12 个月的滚动平均值。

## 谬误：WSC 设施的资本成本高于其中服务器的资本成本

<!-- source: p0572 -->

匆匆看一眼图 6.33，或许会得出这个结论，却忽略了整个 WSC 各部分不同的摊销年限。设施可使用长达 20 年，服务器则每三四年就要重新购置。按图 6.33 分别采用 10 年和 3 年摊销期，十年内设施资本支出为 7200 万美元，服务器则为 \(3.3\times6700\) 万美元，即 2.21 亿美元。因此，十年内 WSC 服务器的资本成本约为设施的三倍。原文所引图 3.34 的 TCO 分解也印证了这一点。

> **译注：** 原文此处写“图 3.34”，相应 TCO 分解图实际是本章图 6.34。金额和倍数保留原文口径。

## 陷阱：试图依靠停止工作的低功耗模式，而不是仍可工作的低功耗模式来节电

图 6.35 表明，通用集群中服务器的平均利用率可能在 10%–50% 之间。考虑到 6.7 节讨论的 WSC 运营成本问题，人们可能认为低功耗模式会大有帮助。

第 1 章指出，DRAM 或磁盘进入不工作的低功耗模式时无法访问，因此无论读写速率多低，都必须先恢复到完全工作模式。问题在于，恢复所需的时间与能量，降低了这类低功耗模式的吸引力。图 6.35 显示，几乎所有服务器的平均利用率都至少为 10%；因此，可以预期长时间的低活动水平，却不能预期长时间完全不活动（Lo 等，2014）。

相比之下，处理器在低功耗模式下仍可运行，只是速率低于正常水平，因此仍可工作的低功耗模式更容易使用。处理器恢复到完全工作模式的时间也以微秒计，因而这类模式还缓解了低功耗模式引起的延迟顾虑。

> **译注：** 原句将运行速率写作“at a small multiple of the regular rate”，未给出具体倍率。“低于正常水平”是根据本段对低功耗模式的讨论作出的语境解释，不能据此确定具体降频比例。

## 谬误：DRAM 的可信赖性已经提高，WSC 系统软件也能容错，因此不必额外花钱采用 ECC 内存

ECC 为每 64 位 DRAM 增加 8 位，因此取消纠错码（ECC），理论上可以节省九分之一的 DRAM 成本。尤其是曾有 DRAM 测量报告称，每兆位的失效率只有 1000–5000 FIT，FIT 表示每十亿运行小时的失效次数（Tezzaron Semiconductor，2004）。

Schroeder 等（2009）研究了 Google 大多数 WSC 中受 ECC 保护的 DRAM，测量持续 2.5 年，覆盖的服务器无疑有数十万台。研究发现，FIT 比已发表数据高 15–25 倍，即每兆位 25,000–70,000 次失效。超过 8% 的 DIMM 受到失效影响；每个 DIMM 平均每年发生 4000 次可纠正错误和 0.2 次不可纠正错误。按服务器统计，每年约三分之一的服务器经历 DRAM 错误，平均每年发生 22,000 次可纠正错误和 1 次不可纠正错误。原文接着说：也就是说，对三分之一的服务器而言，每 2.5 小时就会纠正一次内存错误。注意，这些系统采用的是更强大的 Chipkill<!-- source: p0573 --> 编码，而不是较简单的 SECDED 编码。如果采用后者，不可纠正错误率将高出 4–10 倍。

如果 WSC 只有奇偶校验保护，服务器每遇到一次内存奇偶校验错误都必须重启。假如重启耗时 5 分钟，那么三分之一的机器将把 20% 的时间花在重启上！这种行为会使这套昂贵设施的性能下降约 6%。此外，这些系统还会遭遇大量不可纠正错误，而操作人员甚至不会收到发生错误的通知。

> **译注：** 原文“平均每年 22,000 次可纠正错误”与“每 2.5 小时一次”不一致。按一年 8760 小时计算，前者对应约每 0.40 小时一次；若每次重启 5 分钟，则约占 21% 的时间，与后文的 20% 接近。

Google 早年使用的 DRAM 甚至没有奇偶校验保护。2000 年，在下一版搜索索引发布前的测试中，系统开始针对测试查询推荐随机文档（Barroso 和 Hölzle，2009）。原因是某些 DRAM 出现固定为零的故障，破坏了新索引。Google 因此增加了一致性检查，以便将来检测这类错误。随着 WSC 规模扩大、ECC DIMM 价格更容易负担，ECC 成为 Google WSC 的标准配置。ECC 还有一个额外好处：维修时更容易找到损坏的 DIMM。

这些数据有助于解释第 4 章的 Fermi GPU 为什么为内存增加 ECC，而其前代产品甚至没有奇偶校验保护。这些 FIT 数据也让人怀疑：仅因 Intel Atom 处理器能效较高，就尝试把它用于 WSC 是否合适，因为其芯片组并不支持 ECC DRAM。

## 陷阱：无法像处理纳秒或毫秒延迟那样，有效处理微秒延迟

Barroso 等（2017）指出，现代计算机系统让程序员容易缓解纳秒级和毫秒级延迟，例如数十纳秒的缓存与 DRAM 访问，以及数毫秒的磁盘访问，却明显缺少对微秒级事件的支持。存储层次结构向程序员提供同步接口，硬件承担大量工作，使访问表现出正确的存储一致性与缓存一致性（第 2 章）。操作系统为磁盘读取提供类似的同步接口：大量操作系统代码确保等待磁盘时能安全切换到其他进程，数据准备好后再返回原进程。对于 Flash 等存储技术或 200 Gbit/s 以太网等高速网络接口带来的微秒级延迟，我们需要新的应对机制。

## 谬误：在活动较少时关闭硬件，能提高 WSC 性价比

图 6.33 表明，配电与冷却基础设施的摊销成本，比整个月的电费还高 50%。因此，把负载集中起来、关闭空闲机器，固然能省一些钱；但即使节省一半电力，每月运营费用也只降低 7%。还有实际问题需要解决：WSC 广泛部署的监控基础设施，依赖于向设备发出探测并检查响应。能耗与工作量成比例、以及仍可工作的低功耗模式，还有一个优点：

<!-- source: p0574 -->

它们与 WSC 监控基础设施兼容，而这种基础设施使一名操作人员能够负责超过 1000 台服务器。还应注意，预防性维护正是空闲时间执行的重要任务之一。

WSC 的通常做法是在活动较少时运行其他有价值的任务，收回配电与冷却方面的投资。典型例子是为搜索创建索引的 MapReduce 批处理作业。AWS 的竞价机制也是从低利用率中获取价值的一例。如果用户能够灵活选择任务运行时间，允许 AWS 通过竞价实例更灵活地安排任务，例如放在 WSC 原本利用率较低的时段，计算费用最高可降至原来的四分之一。

## 谬误：Flash 设备只有存储频繁访问的温数据才划算

Flash 的每位成本比硬盘高一个数量级。不过，对某些冷数据存储系统，Flash 也可能具有成本效益。以社交网络发布照片的存储系统为例，多数旧照片很少被访问；但用户一旦请求查看旧照片，仍期待交互式响应。使用硬盘的冷存储系统，为满足 SLO 的延迟要求，就必须让磁盘保持旋转，每块磁盘约消耗 5 W。基于 Flash 的冷存储系统在空闲时效率更高，因为它没有运动部件，而且半导体芯片可以更快退出低功耗模式。节省的能源成本可能抵消 Flash 设备增加的购置成本。

> **译注：** 原句印为“can exist low power modes faster”，其中 exist 与句法和上下文不符；这里按 exit（退出）理解。正文的其他数据保留原样。
