D.7 I/O 系统的设计与评估——Internet Archive 集群 I/O 系统设计的艺术,在于满足成本、可信赖性与设备种类目标,同时避免性能和可信赖性瓶颈。避免瓶颈,意味着主存与 I/O 设备之间的组件必须平衡;因为整条链的性能与可信赖性,以及相应的性价比或成本—可信赖性,只能与最薄弱环节一样好。设计者还须规划扩展,让客户按应用调整 I/O。但设备数量与类型的扩展也有代价:更长总线和网络、更大电源、更大机箱。
设计时应比较不同连接方式和各类设备数量,分析性能、成本、容量与可用性。可按以下步骤进行,各步答案可能由市场要求决定,也可能由成本、性能和可用性目标决定。
列出要接入的设备类型,或系统支持的标准总线与网络。 列出各设备物理要求,包括大小、功耗、连接器、总线插槽、扩展机箱等。 列出各设备成本,包含其所需控制器的成本分摊。 列出各设备可靠性。 记录各设备对处理器资源的需求:发起 I/O、支持设备运行(如处理中断)、完成 I/O 的指令周期;等待 I/O 使用完内存、总线、缓存所造成的停顿;从 I/O 活动恢复所花的周期,例如刷新缓存。 列出各设备对内存和 I/O 总线的需求。即使处理器不用内存,主存与 I/O 连接带宽也有限。 评估不同组织方式的性能与可用性。负担得起时,尽量避免单点失效。性能须靠模拟才能适当评估,也可用排队论估算。若假定设备独立失效且寿命呈指数分布,可计算可靠性;再估计设备 MTTF,并考虑失效到修复的时间,得到可用性。 最后根据成本、性能、可用性目标选择最佳组织。
性价比目标会影响 I/O 方案与物理设计。性能用 MB/s 还是 I/O/s 衡量,取决于应用需求。追求高性能时,限制应只来自设备速度、数量,以及内存、处理器速度;追求低成本时,成本应主要花在 I/O 设备本身。可用性目标部分取决于中断给组织造成的损失。
与其只做纸上设计,不如评估一个真实系统。
Internet Archive 集群 我们估算 Internet Archive 一个大型、以存储为主的集群的成本、性能与可用性。该项目始于 1996 年,旨在保存不断变化的互联网历史。通过 Wayback Machine,可以“穿越时间”,查看某个 URL 的网站过去是什么样。原书所述时期,已有超过 1 PB(10 15 10^{15} 1 0 15 字节)数据,每月新增 20 TB(1 TB=10 12 10^{12} 1 0 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。 四个 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。 图 D.19 Internet Archive 使用的 Capricorn Systems TB-80 VME 机架。电缆、交换机、显示器都可从正面操作,背面仅用于通风,因此两个机架可背靠背摆放,减少机房占地。 例题:每单位 IOPS 的成本 评估 80 TB 机架每单位每秒 I/O 次数(IOPS)的成本。假定每次 I/O 都有平均寻道和平均旋转延迟;负载均匀分散到所有盘;所有设备可用到 100% 容量,即仅受最弱环节限制,而且该环节可达 100% 利用率。对两种平均 I/O 大小分别计算。
**解答。**I/O 性能由最弱环节限制,因此逐项计算链上最大性能。
先看一个 GB2000 的 CPU、主存与总线。CPU 上限取决于速度,以及磁盘 I/O 和网络发送的指令数:
I O P S C P U , m a x = 1000 M I P S 50,000 指令/I/O + 100,000 指令/消息 = 6667.
\mathrm{IOPS}_{\mathrm{CPU,max}}=\frac{1000\,\mathrm{MIPS}}{50{,}000\ \text{指令/I/O}+100{,}000\ \text{指令/消息}}=6667.
IOPS CPU , max = 50 , 000 指令 /I/O + 100 , 000 指令 / 消息 1000 MIPS = 6667. 主存上限由内存带宽与传输大小决定:
I O P S m e m o r y , m a x ( 16 K B ) = 266 × 8 M B / s 16 K B / I / O ≈ 133,000 , I O P S m e m o r y , m a x ( 50 K B ) = 266 × 8 M B / s 50 K B / I / O ≈ 42,500.
\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}
IOPS memory , max ( 16 KB ) IOPS memory , max ( 50 KB ) = 16 KB/I/O 266 × 8 MB/s ≈ 133 , 000 , = 50 KB/I/O 266 × 8 MB/s ≈ 42 , 500. PATA 链路受带宽与 I/O 大小限制:
I O P S b u s , m a x ( 16 K B ) = 133 M B / s 16 K B / I / O ≈ 8300 , I O P S b u s , m a x ( 50 K B ) = 133 M B / s 50 K B / I / O ≈ 2700.
\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}
IOPS bus , max ( 16 KB ) IOPS bus , max ( 50 KB ) = 16 KB/I/O 133 MB/s ≈ 8300 , = 50 KB/I/O 133 MB/s ≈ 2700. 机器有两条总线,原文给出合计上限:16 KB 时 18,600 IOPS,50 KB 时 5400 IOPS。
**译注:**原页确为 18,600,但按前面约 8300 的两倍应为约 16,600;精确用十进制单位算为 16,625。保留原值并指出算术不一致,不影响后文“磁盘为瓶颈”的结论。
再看 ATA 控制器。经 PATA 传输一个块所需时间为:
16 K B 133 M B / s ≈ 0.1 m s , 50 K B 133 M B / s ≈ 0.4 m s .
\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}.
133 MB/s 16 KB ≈ 0.1 ms , 133 MB/s 50 KB ≈ 0.4 ms . 加 0.1 ms 控制器开销,每次 I/O 约为 0.2–0.5 ms,因此每控制器最大速率:
1 0.2 m s = 5000 I O P S , 1 0.5 m s = 2000 I O P S .
\frac1{0.2\,\mathrm{ms}}=5000\,\mathrm{IOPS},\qquad
\frac1{0.5\,\mathrm{ms}}=2000\,\mathrm{IOPS}.
0.2 ms 1 = 5000 IOPS , 0.5 ms 1 = 2000 IOPS . 下一环是磁盘。平均 I/O 时间为寻道、半周旋转与数据传输之和:
T 16 K B = 8.5 m s + 0.5 7200 转/分 + 16 K B 50 M B / s ≈ 8.5 + 4.2 + 0.3 = 13.0 m s , T 50 K B = 8.5 m s + 0.5 7200 转/分 + 50 K B 50 M B / s ≈ 8.5 + 4.2 + 1.0 = 13.7 m s .
\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}
T 16 KB T 50 KB = 8.5 ms + 7200 转 / 分 0.5 + 50 MB/s 16 KB ≈ 8.5 + 4.2 + 0.3 = 13.0 ms , = 8.5 ms + 7200 转 / 分 0.5 + 50 MB/s 50 KB ≈ 8.5 + 4.2 + 1.0 = 13.7 ms . 因此,在采用平均寻道的前提下,每盘最大速率分别为:
1 13.0 m s ≈ 77 I O P S , 1 13.7 m s ≈ 73 I O P S .
\frac1{13.0\,\mathrm{ms}}\approx77\,\mathrm{IOPS},\qquad
\frac1{13.7\,\mathrm{ms}}\approx73\,\mathrm{IOPS}.
13.0 ms 1 ≈ 77 IOPS , 13.7 ms 1 ≈ 73 IOPS . 四盘合计 292–308 IOPS。最后是连接外界的网络,按千兆链路计算:
I O P S 16 K B = 1000 M b i t / s 16 K × 8 = 7812 , I O P S 50 K B = 1000 M b i t / s 50 K × 8 = 2500.
\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.
IOPS 16 KB = 16 K × 8 1000 Mbit/s = 7812 , IOPS 50 KB = 50 K × 8 1000 Mbit/s = 2500. 显然,GB2000 的瓶颈在磁盘。整架 16 KB 时 40 × 308 = 12,320 40\times308=12{,}320 40 × 308 = 12 , 320 IOPS,50 KB 时 40 × 292 = 11,680 40\times292=11{,}680 40 × 292 = 11 , 680 IOPS。交换机若不能分别支持 12,320 × 16 K × 8 ≈ 1.6 12{,}320\times16\mathrm K\times8\approx1.6 12 , 320 × 16 K × 8 ≈ 1.6 Gbit/s,以及 11,680 × 50 K × 8 ≈ 4.7 11{,}680\times50\mathrm K\times8\approx4.7 11 , 680 × 50 K × 8 ≈ 4.7 Gbit/s,就会成为瓶颈。假定 48 端口交换机多出的八个千兆端口连接外界,就能承载架内 160 盘的全部 IOPS。
按这些假设,整架成本为:
40 × ( $ 500 + 4 × $ 375 ) + $ 3000 + $ 1500 = $ 84,500.
40\times(\$500+4\times\$375)+\$3000+\$1500=\$84{,}500.
40 × ( $500 + 4 × $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 服务依赖应用层多个数据副本保证可信赖性,常把副本放在不同地理位置,同时防范环境与硬件故障。Internet Archive 在每个站点有两份数据,站点位于旧金山、阿姆斯特丹、埃及亚历山大。每站的音乐、书籍、电影、视频等高价值内容保留双份,历史网页爬取数据保留单份。为降低成本,80 TB 机架内不设置冗余。
例题:机架失效前平均时间 不用厂商标称的 600,000 小时 MTTF,而采用近期磁盘调查[Gray 和 van Ingen 2005]。如第 1 章所述,ATA 每年约有 3%–7% 失效,MTTF 约 125,000–300,000 小时。仍假定寿命呈指数分布,并作如下假设:
**解答。**各组件失效率相加:
失效率 = 40 1,000,000 + 160 125,000 + 40 500,000 + 1 500,000 + 40 200,000 + 40 200,000 + 80 1,000,000 = 40 + 1280 + 80 + 2 + 200 + 200 + 80 1,000,000 小时 = 1882 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}
失效率 = 1 , 000 , 000 40 + 125 , 000 160 + 500 , 000 40 + 500 , 000 1 + 200 , 000 40 + 200 , 000 40 + 1 , 000 , 000 80 = 1 , 000 , 000 小时 40 + 1280 + 80 + 2 + 200 + 200 + 80 = 1 , 000 , 000 小时 1882 . 系统 MTTF 是失效率的倒数:
M T T F = 1,000,000 小时 1882 ≈ 531 小时 .
\mathrm{MTTF}=\frac{1{,}000{,}000\ \text{小时}}{1882}\approx531\ \text{小时}.
MTTF = 1882 1 , 000 , 000 小时 ≈ 531 小时 . 在这些组件 MTTF 假设下,平均约每三周,机架内就有某个部件失效;约 70% 是磁盘,约 20% 是风扇或电源。