25.1-Bit 的存储
状态机和状态
从计算模型到计算机系统
- 我们需要 “造出” 状态图、纸带……
- 核心:“纸、铅笔、橡皮”
在物理世界中实现状态
实现 Random Access
- 磁铁 (1960s)
- SRAM: Flip-flop
- DRAM: 电容
在物理世界中实现持久化
Persistence: “A firm or obstinate continuance in a course of action in spite of difficulty or opposition.”
- 我们希望更大、更多的数据能 “留下来” (并且被操作系统有效地管理起来)
持久存储器的抽象
1 | typedef uint8_t block[4096]; // 4KB |
- 一个巨大的 bit/byte array
- 允许按 block 读写
磁存储
“持久化” 可能没有想象的那么困难
一个 “能反复改写的状态”
- 当然,要能寻址 + 用电路改写
电磁感应:物理和数字世界的桥梁
1D 存储设备:把 Bits “卷起来” (磁带:1928)
- 纸带 (今天是塑料) 上均匀粘上铁磁性颗粒
- 只需要一个机械部件 (转动) 定位
- 读取:放大感应电流
- 写入:电磁头 (电磁铁) 改变磁畴磁化方向
磁带:作为存储设备的分析
成本与风险
价格 | 容量 | 可靠性 |
---|---|---|
低 - 廉价材料 | 高 | 存在机械部件、存在丢失风险 |
读写性能
顺序读写 | 随机读写 |
---|---|
勉强 (需要等待定位) | 几乎完全不行 |
今天的应用场景
- 冷数据的存档和备份
磁鼓 (Magnetic Drum, 1932)
1D → 1.5D (1D x 𝑛)
- 用旋转的二维平面存储数据 (无法内卷,容量变小)
- 读写延迟不会超过旋转周期 (随机读写速度大幅提升)
疯狂内卷:磁盘 (Hard Disk, 1956)
1.5D → 2.5D (2D x n)
- 在二维平面上放置许多磁带
磁盘:克服各种工程挑战
磁盘:作为存储设备的分析
成本与风险
价格 | 容量 | 可靠性 |
---|---|---|
低 - 高密度低成本 | 高 - 2.5D,上万磁道 | 存在机械部件 |
读写性能
顺序读写 | 随机读写 |
---|---|
较高 | 勉强 (需要等待定位) |
今天的应用场景
- 计算机系统的主力数据存储
- 我们的服务器:4 x 4TB HDD (RAID0)
磁盘:性能调优
为了读/写一个扇区
- 读写头需要到对应的磁道
- 7200rpm → 120rps → “寻道” 时间 8.3ms
- 转轴将盘片旋转到读写头的位置
- 读写头移动时间通常也需要几个 ms
通过缓存/调度等缓解
- 例如著名的 “电梯” 调度算法
- 成为了历史的尘埃
- Advanced Host Controller Interface (AHCI); Native Command Queuing (NCQ)
软盘 (Floppy Disk, 1971)
把读写头和盘片分开——实现数据移动
- 计算机上的软盘驱动器 (drive) + 可移动的盘片
- 8" (1971), 5.25" (1975), 3.5" (1981)
- 最初的软盘成本很低,就是个纸壳子
- 3.5 英寸软盘为了提高可靠性,已经是 “硬” 的了
- 8" (1971), 5.25" (1975), 3.5" (1981)
软盘:作为存储设备的分析
成本与风险
价格 | 容量 | 可靠性 |
---|---|---|
低 - 低成本材料 | 高 - 裸露介质,密度受限 | 低 |
读写性能
顺序读写 | 随机读写 |
---|---|
低 | 低 |
今天的应用场景
- 存盘按钮
坑存储
坑:天然容易 “阅读” 的数据存储
跨越千年的持久化存储方法
Compact Disk (CD, 1980)
在反射平面 (1) 上挖上粗糙的坑 (0)
- 激光扫过表面,就能读出坑的信息来
- 飞利浦 (碟片) 和索尼 (数字音频) 发明
- ~700 MiB,在当时是非常巨大的容量
光盘的复制
挖坑技术的进展
- CD (740 MB): 780nm 红外激光
- DVD (4.7 GB): 635nm 红色激光
- Blue Ray (100 GB): 405nm 蓝紫色激光 (仍难逃被淘汰)
光盘:作为存储设备的分析
成本与风险
价格 | 容量 | 可靠性 |
---|---|---|
极低 - “压盘” 复制 | 高 | 高 - 多种保护层 |
读写性能
顺序读取 | 随机读取 |
---|---|
一般 | 低 |
最大的困难:挖坑容易填坑难
- CD/R: 用激光器烧出一次性的坑 + append-only 数据结构
- CD/RW: PCM (Phase-change Material)
今天的应用场景
- 作为数字收藏
电存储
Solid State Drive (1991)
之前的持久存储介质都有致命的缺陷
- 磁:机械部件导致 ms 级延迟
- 坑 (光): 一旦挖坑,填坑很困难 (CD 是只读的)
密度和速度:光速运行的电路才是终极解决方案
- Flash Memory “闪存”
- 如何在电路中持久 1-bit?
- 挖个坑
- 把电子填进去 = 一个状态
- 把电子放跑 = 另一个状态
1-Bit Flash Memory
Flash Memory: 几乎全是优点
价格 | 容量 | 可靠性 |
---|---|---|
低 - 大规模集成电路 | 极高 | 高 - 随便摔 |
顺序读取 | 随机读取 |
---|---|
极高 | 极高 |
极为离谱的优点:电路的大规模并行
- 容量越大,速度越快,快到 SATA 接口根本无法承受
但有一个意想不到的致命缺点
- 和上面的电路有关
Wear Out
放电 (erase) 做不到 100% 放干净
- 放电数千/数万次以后,就好像是 “充电” 状态了
- Dead cell; “wear out”
有没有感觉有点害怕?
- 很多文件应该写了上千次了?
USB Flash Disk (1999)
容量大、速度快、相当便宜
- 很快就取代了软盘,成为了人手 𝑛 个的存储介质
- Compact Flash (CF, 1994)
- USB Flash Disk (1999, “朗科”)
- “可移动” 特性
- 存储个人文档
- 内容 (系统) 分发
Flash Disk 与 NAND Flash
优盘, SD 卡, SSD 都是 NAND Flash
- 但软件/硬件系统的复杂程度不同,效率/寿命也不同
- 典型的 SSD
- CPU, on-chip RAM, 缓存, store buffer, 操作系统 …
- 寿命: ~1 PiB 数据写入 (~1,000 年寿命)
- SD 卡
- SDHC 标准未规定
- 黑心商家一定会偷工减料
- 但良心厂家依然有 ARM 芯片
- SDHC 标准未规定
- 典型的 SSD
优盘和 SSD 的区别
软件定义磁盘:SSD 里藏了一个完整的计算机系统
- FTL: Flash Translation Layer
- “Wear Leveling”: 用软件使写入变得 “均匀”
- 像是 managed runtime (with garbage collection)
Wear Leveling
再一次,VR 眼镜
- Logical block address (LBA) → Physical block address (PBA)
道理简单,实现困难
- SSD 的 Page/Block 两层结构
- Page (读取的最小单位, e.g., 4KB)
- Block (写入的最小单位, e.g., 4MB)
- Read/write amplification (读/写不必要多的内容)
- Copy on write
- “VR 眼镜” 本身也需要更新
- Coding for SSDs
FTL 带来的性能、可靠性、安全性问题
曾经:修电脑引发的血案?
- (快速) 格式化是没用的
- mmap.mmap(fd, prot=PROT_READ, length=2**40)
- 我们有一个 “数据恢复” 实验
SSD: 似乎不妙?
- Copy-on-write 意味着旧的数据还在!
- logic block 被覆盖,physical block 依然存储了数据
- 文件系统加密/Self-Encrypting Drive
- 安全带来的缺点:数据就真的无法恢复了
SSD 的可靠性:另一个故事
什么?硬件里的软件?
- 其实非常复杂:算法, cache; store buffer; …
谁写出来的?那可得有 bug 啊!
- 让我们好好构造疯狂的 workloads,把它弄挂吧!
无论是内存还是持久存储,最终胜出的仍然是电——它的密度和速度是其他介质难以比拟的。但同时我们也看到,NAND Flash 作为持久存储时有着巨大的缺陷——写入寿命。但我们也看到了工业界竟然敢于试制这样跨时代的产品,在十多年的争议中终究成为了今天存储的主角。如果更快的 non-volatile memory 到来又退场,我们的计算机系统是否会发生翻天覆地的变化?