# D.7 I/O 系统的设计与评估——Internet Archive 集群
<!-- source: p0909 -->

I/O 系统设计的艺术，在于满足成本、可信赖性与设备种类目标，同时避免性能和可信赖性瓶颈。避免瓶颈，意味着主存与 I/O 设备之间的组件必须平衡；因为整条链的性能与可信赖性，以及相应的性价比或成本—可信赖性，只能与最薄弱环节一样好。<!-- source: p0910 -->设计者还须规划扩展，让客户按应用调整 I/O。但设备数量与类型的扩展也有代价：更长总线和网络、更大电源、更大机箱。

设计时应比较不同连接方式和各类设备数量，分析性能、成本、容量与可用性。可按以下步骤进行，各步答案可能由市场要求决定，也可能由成本、性能和可用性目标决定。

1. 列出要接入的设备类型，或系统支持的标准总线与网络。
2. 列出各设备物理要求，包括大小、功耗、连接器、总线插槽、扩展机箱等。
3. 列出各设备成本，包含其所需控制器的成本分摊。
4. 列出各设备可靠性。
5. 记录各设备对处理器资源的需求：发起 I/O、支持设备运行（如处理中断）、完成 I/O 的指令周期；等待 I/O 使用完内存、总线、缓存所造成的停顿；从 I/O 活动恢复所花的周期，例如刷新缓存。
6. 列出各设备对内存和 I/O 总线的需求。即使处理器不用内存，主存与 I/O 连接带宽也有限。
7. 评估不同组织方式的性能与可用性。负担得起时，尽量避免单点失效。性能须靠模拟才能适当评估，也可用排队论估算。若假定设备独立失效且寿命呈指数分布，可计算可靠性；再估计设备 MTTF，并考虑失效到修复的时间，得到可用性。

最后根据成本、性能、可用性目标选择最佳组织。

性价比目标会影响 I/O 方案与物理设计。性能用 MB/s 还是 I/O/s 衡量，取决于应用需求。追求高性能时，限制应只来自设备速度、数量，以及内存、处理器速度；追求低成本时，成本应主要花在 I/O 设备本身。<!-- source: p0911 -->可用性目标部分取决于中断给组织造成的损失。

与其只做纸上设计，不如评估一个真实系统。

## Internet Archive 集群

我们估算 Internet Archive 一个大型、以存储为主的集群的成本、性能与可用性。该项目始于 1996 年，旨在保存不断变化的互联网历史。通过 Wayback Machine，可以“穿越时间”，查看某个 URL 的网站过去是什么样。原书所述时期，已有超过 1 PB（\(10^{15}\) 字节）数据，每月新增 20 TB（1 TB＝\(10^{12}\) 字节），因此可扩展存储是必要条件。同一批硬件还每隔几个月爬取网络，获取互联网快照。

LAN 连接的计算机集群已成为经济实惠、适合某些应用的计算引擎。集群也在 Google 等 Internet 服务中扮演重要角色，这类场景与本例一样，更重存储而非计算。

Internet Archive 多年来采用过多种硬件，当时正在迁移到新集群，以提高电力与机房面积利用效率。基本单元是 Capricorn Technologies 的 1U 存储节点 **PetaBox GB2000**。2006 年配置为四个 500 GB 并行 ATA（PATA）磁盘、512 MB DDR266 DRAM、一个 10/100/1000 以太网接口，以及执行 80x86 指令集的 VIA 1 GHz C3 处理器。典型节点功耗约 80 W。

图 D.19 是标准 VME 机架中的集群。每架装 40 个 GB2000，总原始容量 80 TB；40 节点通过一个 48 端口 10/100 或 10/100/1000 交换机连接，整架功耗约 3 kW。计算设施通常限制每架 10 kW，因此远低于上限。

1 PB 需要约 12 个这样的机架，由更高层交换机连接各架交换机的千兆上行链路。

## 估计性能、可信赖性和成本

为说明评估方法，对组件成本、性能、可靠性作若干估计。成本与性能假设如下：

- VIA 处理器、512 MB DDR266、ATA 控制器、电源、风扇、机箱合计 $500。

<!-- source: p0912 -->

- 四个 7200 RPM PATA 磁盘，每盘 500 GB，平均寻道 8.5 ms，介质传输 50 MB/s，价格 $375；PATA 链路速率 133 MB/s。
- 48 端口 10/100/1000 交换机及一架所需全部电缆，共 $3000。
- VIA 处理器性能为 1000 MIPS。
- ATA 控制器每个磁盘 I/O 增加 0.1 ms 开销。
- 操作系统每次磁盘 I/O 执行 50,000 条 CPU 指令。
- 网络协议栈在集群与外界间传输一个数据块，执行 100,000 条 CPU 指令。
- Wayback 历史查询平均 I/O 为 16 KB；采集新快照时为 50 KB。

![Internet Archive 的 TB-80 机架](/figures/app-d/fig-d-19.png)
{#fig-D.19 .wide .expand num="D.19" caption="Internet Archive 使用的 Capricorn Systems TB-80 VME 机架。电缆、交换机、显示器都可从正面操作，背面仅用于通风，因此两个机架可背靠背摆放，减少机房占地。"}

### 例题：每单位 IOPS 的成本

评估 80 TB 机架每单位每秒 I/O 次数（IOPS）的成本。假定每次 I/O 都有平均寻道和平均旋转延迟；负载均匀分散到所有盘；<!-- source: p0913 -->所有设备可用到 100% 容量，即仅受最弱环节限制，而且该环节可达 100% 利用率。对两种平均 I/O 大小分别计算。

**解答。**I/O 性能由最弱环节限制，因此逐项计算链上最大性能。

先看一个 GB2000 的 CPU、主存与总线。CPU 上限取决于速度，以及磁盘 I/O 和网络发送的指令数：

$$
\mathrm{IOPS}_{\mathrm{CPU,max}}=\frac{1000\,\mathrm{MIPS}}{50{,}000\ \text{指令/I/O}+100{,}000\ \text{指令/消息}}=6667.
$$

主存上限由内存带宽与传输大小决定：

$$
\begin{aligned}
\mathrm{IOPS}_{\mathrm{memory,max}}(16\,\mathrm{KB})&=\frac{266\times8\,\mathrm{MB/s}}{16\,\mathrm{KB/I/O}}\approx133{,}000,\\
\mathrm{IOPS}_{\mathrm{memory,max}}(50\,\mathrm{KB})&=\frac{266\times8\,\mathrm{MB/s}}{50\,\mathrm{KB/I/O}}\approx42{,}500.
\end{aligned}
$$

PATA 链路受带宽与 I/O 大小限制：

$$
\begin{aligned}
\mathrm{IOPS}_{\mathrm{bus,max}}(16\,\mathrm{KB})&=\frac{133\,\mathrm{MB/s}}{16\,\mathrm{KB/I/O}}\approx8300,\\
\mathrm{IOPS}_{\mathrm{bus,max}}(50\,\mathrm{KB})&=\frac{133\,\mathrm{MB/s}}{50\,\mathrm{KB/I/O}}\approx2700.
\end{aligned}
$$

机器有两条总线，原文给出合计上限：16 KB 时 18,600 IOPS，50 KB 时 5400 IOPS。

> **译注：**原页确为 18,600，但按前面约 8300 的两倍应为约 16,600；精确用十进制单位算为 16,625。保留原值并指出算术不一致，不影响后文“磁盘为瓶颈”的结论。

再看 ATA 控制器。经 PATA 传输一个块所需时间为：

$$
\frac{16\,\mathrm{KB}}{133\,\mathrm{MB/s}}\approx0.1\,\mathrm{ms},\qquad
\frac{50\,\mathrm{KB}}{133\,\mathrm{MB/s}}\approx0.4\,\mathrm{ms}.
$$

加 0.1 ms 控制器开销，每次 I/O 约为 0.2–0.5 ms，因此每控制器最大速率：

<!-- source: p0914 -->

$$
\frac1{0.2\,\mathrm{ms}}=5000\,\mathrm{IOPS},\qquad
\frac1{0.5\,\mathrm{ms}}=2000\,\mathrm{IOPS}.
$$

下一环是磁盘。平均 I/O 时间为寻道、半周旋转与数据传输之和：

$$
\begin{aligned}
T_{16\mathrm{KB}}&=8.5\,\mathrm{ms}+\frac{0.5}{7200\,\text{转/分}}+\frac{16\,\mathrm{KB}}{50\,\mathrm{MB/s}}\\
&\approx8.5+4.2+0.3=13.0\,\mathrm{ms},\\
T_{50\mathrm{KB}}&=8.5\,\mathrm{ms}+\frac{0.5}{7200\,\text{转/分}}+\frac{50\,\mathrm{KB}}{50\,\mathrm{MB/s}}\\
&\approx8.5+4.2+1.0=13.7\,\mathrm{ms}.
\end{aligned}
$$

因此，在采用平均寻道的前提下，每盘最大速率分别为：

$$
\frac1{13.0\,\mathrm{ms}}\approx77\,\mathrm{IOPS},\qquad
\frac1{13.7\,\mathrm{ms}}\approx73\,\mathrm{IOPS}.
$$

四盘合计 292–308 IOPS。最后是连接外界的网络，按千兆链路计算：

$$
\mathrm{IOPS}_{16\mathrm{KB}}=\frac{1000\,\mathrm{Mbit/s}}{16\,\mathrm{K}\times8}=7812,
\qquad
\mathrm{IOPS}_{50\mathrm{KB}}=\frac{1000\,\mathrm{Mbit/s}}{50\,\mathrm{K}\times8}=2500.
$$

显然，GB2000 的瓶颈在磁盘。整架 16 KB 时 \(40\times308=12{,}320\) IOPS，50 KB 时 \(40\times292=11{,}680\) IOPS。交换机若不能分别支持 \(12{,}320\times16\mathrm K\times8\approx1.6\) Gbit/s，以及 \(11{,}680\times50\mathrm K\times8\approx4.7\) Gbit/s，就会成为瓶颈。假定 48 端口交换机多出的八个千兆端口连接外界，就能承载架内 160 盘的全部 IOPS。

按这些假设，整架成本为：

$$
40\times(\$500+4\times\$375)+\$3000+\$1500=\$84{,}500.
$$

原文指出磁盘本身占成本近 60%；每 TB 约 $1000，比 2001 年上一版中的存储集群好约 10–15 倍；每单位 IOPS 成本约 $7。

> **译注：**按给出的价格，磁盘总价为 $60,000，占 $84,500 的约 71%，与“近 60%”不一致；额外 $1500 在此前成本假设中未单独解释。

## 计算 TB-80 集群的 MTTF

Google 等 Internet 服务依赖应用层多个数据副本保证可信赖性，常把副本放在不同地理位置，同时防范环境与硬件故障。<!-- source: p0915 -->Internet Archive 在每个站点有两份数据，站点位于旧金山、阿姆斯特丹、埃及亚历山大。每站的音乐、书籍、电影、视频等高价值内容保留双份，历史网页爬取数据保留单份。为降低成本，80 TB 机架内不设置冗余。

### 例题：机架失效前平均时间

不用厂商标称的 600,000 小时 MTTF，而采用近期磁盘调查［Gray 和 van Ingen 2005］。如第 1 章所述，ATA 每年约有 3%–7% 失效，MTTF 约 125,000–300,000 小时。仍假定寿命呈指数分布，并作如下假设：

| 组件 | MTTF（小时） |
|---|---:|
| CPU／内存／机箱 | 1,000,000 |
| PATA 磁盘 | 125,000 |
| PATA 控制器 | 500,000 |
| 以太网交换机 | 500,000 |
| 电源 | 200,000 |
| 风扇 | 200,000 |
| PATA 电缆 | 1,000,000 |

**解答。**各组件失效率相加：

$$
\begin{aligned}
\text{失效率}
&=\frac{40}{1{,}000{,}000}+\frac{160}{125{,}000}+\frac{40}{500{,}000}+\frac1{500{,}000}\\
&\quad+\frac{40}{200{,}000}+\frac{40}{200{,}000}+\frac{80}{1{,}000{,}000}\\
&=\frac{40+1280+80+2+200+200+80}{1{,}000{,}000\ \text{小时}}\\
&=\frac{1882}{1{,}000{,}000\ \text{小时}}.
\end{aligned}
$$

系统 MTTF 是失效率的倒数：

$$
\mathrm{MTTF}=\frac{1{,}000{,}000\ \text{小时}}{1882}\approx531\ \text{小时}.
$$

在这些组件 MTTF 假设下，平均约每三周，机架内就有某个部件失效；约 70% 是磁盘，约 20% 是风扇或电源。
