目录
第2章 IO大法——走进计算机IO世界
开篇:数据的高速公路系统
2.1 IO的通路——总线:计算机的血管网络
2.1.1 总线的本质:共享的通信通道
2.1.2 总线的三层结构:道路、交规与乘客
1. 物理层:道路本身
2. 协议层:交通规则
3. 电气层:车辆与动力
2.1.3 计算机中的总线层级:从毛细血管到主动脉
层级详解:
2.1.4 总线技术的两大流派:并行与串行
并行总线:人海战术
串行总线:精兵策略
2.1.5 总线的仲裁:红绿灯与交警
1. 集中式仲裁——单一调度中心
2. 分布式仲裁——民主协商
3. 时分复用——固定时刻表
4. 现代方案:PCIe的交换架构
2.1.6 总线的拓扑:道路网形状
共享总线型(旧式)
星型/交换型(现代)
树型/层次型(复杂系统)
2.1.7 总线性能的关键指标
带宽:车流量
延迟:快递时间
并发度:同时处理的快递数
2.1.8 现实案例:你的游戏加载过程的总线之旅
2.2 计算机内部通信
2.2.1 IO总线是否可以看作网络?
2.2.2 CPU、内存和磁盘之间通过网络来通信
第一层网络:芯片内部的片上网络(NoC)
第二层网络:CPU与内存的协议栈
第三层网络:CPU与磁盘的SCSI协议栈
2.3 网中之网:存储的七层网络模型
层次1:应用网络
层次2:块存储网络
层次3:存储内部网络
层次4:芯片间网络
层次5:芯片内网络
现实例子:云盘文件访问的七层穿透
2.3.1 存储网络的特殊挑战
挑战一:极低延迟要求
挑战二:极高可靠性
挑战三:顺序与一致性
挑战四:带宽与并发
2.3.2 现代趋势:全网络化存储栈
NVMe-oF:存储网络的终极进化
智能网卡(SmartNIC)与DPU
2.3.3 存储网络的拓扑演进
第一阶段:点对点直连
第二阶段:共享仲裁环
第三阶段:交换网络
第四阶段:网状网络
第五阶段:可编程网络
2.3.4 存储网络协议大观
1. 基于块的网络存储协议
2. 基于文件的网络存储协议
3. 基于对象的存储协议
2.3.5 存储网络性能的数学
带宽需求计算
延迟的级联效应
2.3.6 存储网络的安全考虑
物理隔离时代
逻辑隔离时代
零信任时代
2.3.7 存储网络的监控与排错
关键监控指标
排错工具箱
典型问题与解决
2.3.8 未来展望:存储网络的终极形态
愿景一:全融合网络
愿景二:可编程数据平面
愿景三:存储与计算的深度融合
愿景四:全域存储网络
本章结语:从导线到智能网络
第2章 IO大法——走进计算机IO世界
开篇:数据的高速公路系统
想象一下,你站在一个巨型物流枢纽的指挥塔上。下面有无数的包裹(数据)需要运送:
有些包裹要跨越大洋(从硬盘到CPU)
有些只是隔壁仓库的调货(从内存到CPU)
有些需要紧急加急(显卡渲染数据)
有些可以慢慢排队(文档保存)
这个物流系统如何不堵车?如何确保每个包裹准时到达?如何让加急包裹优先通过?
欢迎来到计算机的IO(Input/Output,输入/输出)世界。这一章,我们将化身交通规划师,从纳米级的芯片内部,到跨越全球的数据中心网络,全面解密数据如何飞驰。
2.1 IO的通路——总线:计算机的血管网络
2.1.1 总线的本质:共享的通信通道
一个生动的比喻:办公室里的对话方式
假设一个10人办公室,需要互相传递消息:
方案A:点对点专线
每两人之间拉一根电话线
10个人需要:10×(10-1)/2 = 45根线!
优点:私密,可同时通话
缺点:布线复杂,成本高
方案B:会议室广播
所有人到会议室,轮流发言
只需一个共享空间
优点:布线简单
缺点:一次只能一人发言,效率低
方案C:交换式电话系统
每人一部电话,通过总机连接
可建立临时专线,多对同时通话
现代计算机采用的方式
总线(Bus)就是方案B的电子版:一条共享的物理通道,所有设备连接在上面,分时复用。
2.1.2 总线的三层结构:道路、交规与乘客
任何总线都包含三个要素:
1. 物理层:道路本身
导线:铜线或电路板走线
宽度:并行总线的“车道数”
早期的ISA总线:8条数据线(8车道)
PCI总线:32条数据线(32车道)
内部总线可达512车道
速度限制:时钟频率
好比道路的“最高时速”
33MHz = 每秒3300万次数据传输机会
100MHz = 1亿次机会
2. 协议层:交通规则
寻址规则:如何指定包裹送给谁?
内存地址:0x0000 到 0xFFFF...
IO端口号:0x00 到 0xFF...
仲裁机制:谁先使用道路?
固定优先级:CPU永远优先
轮询:每个设备轮流
竞争式:谁先申请谁用
数据格式:包裹如何包装?
起始标志 + 地址 + 数据 + 校验码 + 结束标志
就像:信封+收件人+信纸+封条+邮戳
3. 电气层:车辆与动力
电压水平:什么算“1”,什么算“0”
TTL电平:5V=1,0V=0
LVDS:差分信号,更抗干扰
驱动能力:信号能传多远
芯片内部:毫米级,直接驱动
主板总线:厘米级,需要增强
外部电缆:米级,需要特殊驱动电路
2.1.3 计算机中的总线层级:从毛细血管到主动脉
现代计算机不是一根总线通天下,而是多层总线 hierarchy:
[CPU内部]
|
[L1/L2缓存总线] -- 最快,私密道路,仅CPU核心与缓存使用
|
[前端总线(FSB)或系统总线] -- 连接CPU与内存控制器,高速公路
|
[内存总线] -- 专用连接内存
|
[芯片组内部总线]
├── [PCIe总线] -- 连接显卡、高速设备
├── [SATA总线] -- 连接硬盘、光驱
├── [USB总线] -- 连接外设
└── [传统总线] -- 连接低速设备
层级详解:
第一层:CPU内部总线——纳米级的神经束
位置:在CPU芯片内部
宽度:可达512位(512条数据线并行)
速度:与CPU核心同频,可达5GHz
距离:几毫米
比喻:大脑神经元之间的连接,以光速思维
第二层:内存总线——数据的高速专线
技术演进:
SDRAM(1993):与系统总线同步
DDR(2000):时钟上下沿都传输,效率翻倍
DDR5(2020):速度达6400MHz,带宽51.2GB/s
关键设计:
双通道/四通道:相当于并行的多条高速公路
带宽计算:频率×位宽÷8
DDR4-3200,双通道(128位):3200MHz×128bit÷8 = 51.2GB/s
第三层:扩展总线——设备的共享道路
PCIe的革命(2004年取代PCI/AGP):
串行代替并行:看似退步,实为飞跃
点对点交换:不再是共享总线,而是每个设备有专用通道
通道可聚合:x1、x4、x8、x16
PCIe 4.0 x16:32GB/s(双向)
相当于32车道高速公路
2.1.4 总线技术的两大流派:并行与串行
并行总线:人海战术
原理:多位数据同时发送,每人拿一面旗子,同时挥舞
巅峰代表:并行ATA(PATA,即IDE)
16条数据线同时传输
理论快,但遇到瓶颈:
时钟歪斜:16条线的信号无法完全同步到达
互相干扰:线间电磁干扰
插拔困难:40/80针宽排线
极限:约133MB/s(ATA-7标准)
串行总线:精兵策略
原理:一位一位发送,但速度极快
优势:
时钟歪斜问题消失
干扰小
线缆简单(SATA只有7针)
秘诀:
高频率:从1.5Gb/s到24Gb/s(SATA到SAS-4)
编码效率:8b/10b编码(每8位数据用10位传输)
多通道聚合:PCIe x4相当于4条串行通道并行
有趣的对比:
并行:像一队人并排走路,步子要一致,速度受最慢者限制
串行:像一个人百米冲刺,虽然只有一人,但速度极快
2.1.5 总线的仲裁:红绿灯与交警
当多个设备都要用总线时,谁先谁后?
仲裁机制大观:
1. 集中式仲裁——单一调度中心
一个中央仲裁器(通常在芯片组)
设备申请->仲裁器批准->使用总线
优点:调度简单
缺点:单点瓶颈
2. 分布式仲裁——民主协商
每个设备都有仲裁逻辑
基于优先级竞争
如PCI总线:每个设备检查总线是否空闲,按优先级使用
3. 时分复用——固定时刻表
每个设备分配固定时间片
类似TDMA(时分多址)
保证实时性,但效率可能不高
4. 现代方案:PCIe的交换架构
根本不是共享总线!
每个设备有专用通道
交换机负责路由
从根本上消除冲突
2.1.6 总线的拓扑:道路网形状
共享总线型(旧式)
CPU
|
[总线]
/ | \
内存 显卡 硬盘
星型/交换型(现代)
CPU
|
[内存控制器]
|
[芯片组/PCIe交换机]
/ | \
显卡 SSD 网卡
中心交换,点对点连接
典型:PCIe、SATA
树型/层次型(复杂系统)
CPU0 CPU1
| |
[快速互连总线]
|
[芯片组]
/ | \
内存通道0 PCIe根 其他
2.1.7 总线性能的关键指标
带宽:车流量
理论带宽:频率 × 位宽
DDR4-3200 双通道:51.2GB/s
PCIe 4.0 x16:31.5GB/s(单向)
有效带宽:实际能用的部分
通常为理论的60-80%(开销、协议、争用)
延迟:快递时间
访问延迟:从请求到开始接收的时间
内存:约100纳秒
PCIe设备:几百纳秒到微秒
影响因素:
协议开销(封装/解封装)
仲裁等待
物理距离(光速限制:1米=3.3纳秒)
并发度:同时处理的快递数
现代总线支持多个未完成请求
PCIe的标签机制:最多256个并发传输
2.1.8 现实案例:你的游戏加载过程的总线之旅
当你启动《赛博朋克2077》时:
CPU从SSD读取数据:
CPU -> 芯片组 -> PCIe交换机 -> NVMe SSD
请求:读取游戏文件第10000-20000块
路径:CPU发出PCIe TLP(事务层包)
2. SSD返回数据:
SSD -> PCIe交换机 -> 芯片组 -> 内存控制器 -> 内存
数据被DMA直接写入内存,不经过CPU
3. CPU处理数据:
CPU -> 内存控制器 -> 内存
读取刚加载的数据
4.传输到显卡:
内存 -> 内存控制器 -> CPU -> PCIe -> 显卡显存
纹理、模型数据传输
多总线并行工作:
SATA总线:加载背景音乐
USB总线:读取手柄输入
内存总线:CPU与内存疯狂交换
PCIe总线:显卡与CPU通信
关键洞察:现代游戏是总线压力测试,所有总线几乎满负荷。
2.2 计算机内部通信
2.2.1 IO总线是否可以看作网络?
答案:完全可以,而且越来越像。
让我们对比:
| 特征 | 传统总线 | 现代总线 | 计算机网络 |
|---|---|---|---|
| 拓扑 | 共享线路 | 点对点交换 | 交换网络 |
| 寻址 | 物理地址 | 逻辑地址+路由 | IP地址+路由 |
| 数据单元 | 原始数据 | 带头部的数据包 | 数据包 |
| 错误处理 | 简单校验 | CRC重传等 | TCP重传等 |
| 流控 | 无或简单 | 信用制等 | 滑动窗口等 |
PCIe就是芯片内部的以太网:
TLP(事务层包)= IP包
路由= 基于ID的路由表
交换= 多端口交换机
流控= 基于信用的流量控制
关键区别:
网络:米到千米距离,毫秒级延迟
总线:毫米到厘米距离,纳秒到微秒延迟
但协议思想高度相似
2.2.2 CPU、内存和磁盘之间通过网络来通信
第一层网络:芯片内部的片上网络(NoC)
现代多核CPU内部已经不是简单总线,而是微型互联网:
AMD Zen架构示例:
[核心0]---[L3缓存片]---[核心1]
| | |
[内存控制器] [PCIe控制器] [其他]
| |
[Infinity Fabric] -- AMD的片上网络
Infinity Fabric的特点:
基于数据包的通信
可扩展拓扑
服务质量(QoS)支持
本质是微型的计算机网络
第二层网络:CPU与内存的协议栈
DDR内存访问不是简单读写:
CPU层:生成内存请求(虚拟地址)
↓
MMU层:虚拟地址->物理地址转换
↓
内存控制器:生成具体命令
- 激活(ACT)特定行
- 读取(RD)或写入(WR)特定列
- 预充电(PRE)关闭行
↓
DDR总线:传输命令和地址
↓
内存颗粒:执行操作,返回数据
这就像:
CPU:客户下单(要某本书)
内存控制器:图书馆管理员
内存颗粒:书架系统
过程:找到对应书架(激活行)->取第几本(读列)->放回原处(预充电)
第三层网络:CPU与磁盘的SCSI协议栈
一个SATA读请求的旅程:
应用层:请求读取文件块
↓
文件系统:转换为逻辑块地址(LBA)
↓
SATA驱动:封装为FIS(帧信息结构)
↓
SATA链路层:编码为8b/10b,加入CRC
↓
物理层:串行差分信号传输
↓
硬盘控制器:解码,执行寻道+读取
↓
返回数据:反向过程
封装嵌套:
[文件数据]
↓包在
[文件系统元数据]
↓包在
[SATA FIS结构]
↓包在
[8b/10b编码流]
↓转换为
[差分电信号]
就像快递:
物品(数据)
放入小盒(文件系统信息)
放入快递袋(SATA FIS)
贴上运单(CRC校验)
装上卡车(电信号传输)
2.3 网中之网:存储的七层网络模型
存储通信事实上是多重网络嵌套:
层次1:应用网络
用户通过NFS/SMB访问文件
协议:TCP/IP over 以太网
这是用户感知的网络
层次2:块存储网络
服务器通过iSCSI/FC访问块设备
协议:SCSI over TCP/IP或FC
这是操作系统感知的网络
层次3:存储内部网络
存储控制器与硬盘柜通信
协议:SAS、FC-AL、SATA
这是存储设备内部的网络
层次4:芯片间网络
多控制器之间同步缓存
协议:InfiniBand、专用互连
这是存储控制器的内部网络
层次5:芯片内网络
SoC内部模块通信
总线或NoC(片上网络)
这是芯片级别的网络
现实例子:云盘文件访问的七层穿透
你在北京访问广州云盘里的文档:
你的电脑(北京) --HTTP over TCP/IP over 以太网--> 腾讯网关
↓
腾讯网关 --内部RPC over TCP/IP--> 广州数据中心负载均衡
↓
负载均衡 --iSCSI over TCP/IP over 以太网--> 存储服务器
↓
存储服务器 --SAS over 铜缆--> 硬盘扩展柜
↓
硬盘柜 --SATA over PCB走线--> 具体硬盘
↓
硬盘内部 --ATA over 内部总线--> 缓存芯片
↓
缓存芯片 --内部总线--> 磁头/闪存控制器
每一层都有:
自己的寻址方案
自己的错误检测
自己的流量控制
自己的安全机制
2.3.1 存储网络的特殊挑战
挑战一:极低延迟要求
网络ping:1ms可接受
内存访问:100ns是网络延迟的10,000分之一
解决方案:专用协议(如FC)、内核旁路(RDMA)
挑战二:极高可靠性
网页加载失败:刷新即可
存储写入失败:可能丢数据
解决方案:端到端校验、原子操作、持久化日志
挑战三:顺序与一致性
网络数据包可以乱序到达(TCP会重排)
存储写入必须保持顺序(文件系统依赖)
解决方案:屏障指令、写入顺序保证
挑战四:带宽与并发
4K视频流:100Mb/s
全闪存阵列:40Gb/s(400倍)
解决方案:多路径、链路聚合、NVMe-oF
2.3.2 现代趋势:全网络化存储栈
NVMe-oF:存储网络的终极进化
NVMe over Fabrics
将PCIe总线协议扩展到网络
直接通过网络访问SSD,绕过所有中间层
传统 vs NVMe-oF:
传统:
应用->文件系统->SCSI层->HBA驱动->FC网络->存储->RAID->SCSI->硬盘NVMe-oF:
应用->文件系统->NVMe驱动->以太网/RDMA->存储->NVMe SSD
延迟对比:
传统SAN:100-500微秒
NVMe-oF over RDMA:10-20微秒
接近本地SSD的延迟
智能网卡(SmartNIC)与DPU
卸载存储协议处理
CPU不再参与网络存储协议栈
网卡直接与SSD对话
效果:
CPU节省:30-50%的存储相关开销
延迟降低:减少上下文切换
吞吐提升:专用硬件处理
2.3.3 存储网络的拓扑演进
第一阶段:点对点直连
服务器 --- 存储
DAS(直连存储)
简单,但扩展性差
第二阶段:共享仲裁环
服务器1
|
服务器2 --- FC仲裁环 --- 存储1
| |
服务器3 存储2
FC-AL(光纤通道仲裁环)
共享带宽,类似令牌环网
第三阶段:交换网络
[FC交换机]
/ | \
服务器1 服务器2 存储
全交换,点对点专用带宽
现代SAN标准拓扑
第四阶段:网状网络
服务器1 === 服务器2
| \ / |
| \ / |
| 存储1 |
| / \ |
存储2 === 存储3
多路径,高可用
超融合基础架构
第五阶段:可编程网络
服务器 -- [可编程交换机] -- 存储
/ | \
防火墙 负载均衡 加密
交换机可运行存储逻辑
存储感知网络
2.3.4 存储网络协议大观
1. 基于块的网络存储协议
Fibre Channel (FC):专为存储设计,低延迟
8G/16G/32G速率
专用硬件(HBA卡、交换机)
iSCSI:SCSI over TCP/IP
使用标准以太网
成本低,管理简单
NVMe-oF:下一代标准
over RDMA(RoCEv2, iWARP)
over TCP(正在标准化)
FCoE:FC over 以太网
融合网络尝试
市场接受度有限
2. 基于文件的网络存储协议
NFS(网络文件系统):Unix/Linux标准
v3:无状态,简单
v4:有状态,支持锁、委托等
SMB/CIFS:Windows标准
域集成好
适合Windows环境
pNFS:并行NFS
NFSv4.1扩展
客户端直连存储设备,绕过元数据服务器
3. 基于对象的存储协议
S3:亚马逊Simple Storage Service协议
RESTful HTTP接口
键值存储,无限扩展
Swift:OpenStack对象存储协议
类似S3,开源实现
2.3.5 存储网络性能的数学
带宽需求计算
例子:备份1PB数据到磁带库
数据量:1PB = 1,000TB = 1,000,000GB
可用备份窗口:8小时 = 28,800秒
所需持续带宽:1,000,000GB / 28,800s ≈ 35GB/s
网络带宽:35GB/s × 8 = 280Gb/s
结论:需要至少3条100Gb以太网链路聚合
延迟的级联效应
传统SAN读取:
应用请求(1) -> 文件系统(5μs) -> 卷管理(2μs)
-> SCSI层(3μs) -> HBA驱动(5μs) -> 光纤网络(50μs)
-> 存储前端(10μs) -> RAID处理(20μs) -> 缓存查找(2μs)
-> 硬盘队列(5μs) -> 硬盘寻道(8000μs) -> 数据传输(100μs)
-> 返回路径(反向)
总延迟:~8,200μs(8.2ms)
全闪存NVMe-oF读取:
应用请求(1) -> 文件系统(5μs) -> NVMe驱动(2μs)
-> RDMA网卡(5μs) -> 网络(15μs) -> 存储(5μs)
-> NVMe SSD(100μs) -> 返回
总延迟:~133μs(0.13ms)
性能提升:60倍!
2.3.6 存储网络的安全考虑
物理隔离时代
存储网络专用(FC SAN)
“空气隔离”安全
但成本高,不灵活
逻辑隔离时代
IP SAN(iSCSI)
VLAN隔离
VPN加密通道
零信任时代
全加密传输
端到端认证
基于身份的访问控制
现代安全实践:
传输加密:IPsec for iSCSI,FC-SP for FC
静态加密:磁盘级加密
访问控制:LUN Masking,Zoning
审计跟踪:所有访问记录
2.3.7 存储网络的监控与排错
关键监控指标
带宽利用率:避免拥塞
端口错误计数:CRC错误、超时等
延迟分布:P50、P95、P99延迟
队列深度:设备忙闲程度
IOPS:每秒IO操作数
排错工具箱
协议分析仪:解码FC/iSCSI/NVMe包
性能分析工具:IO路径跟踪
交换机管理:查看端口统计、路由表
多路径软件:检查路径状态、故障切换
典型问题与解决
问题:突然的性能下降
可能原因:
网络拥塞(查带宽)
存储端瓶颈(查存储性能)
多路径故障(查路径状态)
主机端问题(查CPU、内存)
排查步骤:
端到端延迟分析
逐段排除法
对比历史基线
2.3.8 未来展望:存储网络的终极形态
愿景一:全融合网络
一张以太网承载:
计算网络(MPI)
存储网络(NVMe-oF)
管理网络
基于优先级和服务质量区分
愿景二:可编程数据平面
交换机可执行存储功能:
去重、压缩、加密
快照、复制
存储逻辑靠近数据
愿景三:存储与计算的深度融合
计算靠近存储(计算存储)
智能SSD:可执行用户定义函数
减少数据移动,提升效率
愿景四:全域存储网络
跨数据中心的统一存储视图
数据跟随计算移动
真正的云原生存储
本章结语:从导线到智能网络
我们走完了这段从微观到宏观的旅程:
从简单的共享总线开始——像一条乡间小路,所有车辆共用
进化为分层总线架构——城市快速路系统,不同级别道路
演变为点对点交换网络——立交桥与定向匝道
最终成为全网络化存储——智能交通系统,车路协同
核心演变逻辑:
从共享到专用:消除竞争,提升效率
从并行到串行:提升频率,克服物理限制
从简单到智能:增加协议复杂度,换取功能丰富
从硬件到软件定义:灵活性战胜固定设计
存储IO的本质从未改变:在正确的时间,将正确的数据,送到正确的位置。
但实现这一目标的手段,已经发生了天翻地覆的变化。今天的存储系统,本质上是一个分层的、智能的、软件定义的、全球分布的数据运输网络。
作为存储专家,你需要理解:
每一层网络的特性与限制
协议转换的开销与收益
延迟的组成与优化点
带宽的规划与扩展方法
在下一章中,我们将深入这个网络的终点站之一:磁盘。看看数据如何在最经典的磁性介质上安家落户,了解旋转的盘片和飞舞的磁头如何演绎数据的舞蹈。
但在此之前,请思考:
如果你的数据从CPU到硬盘要经过10层协议转换,每层增加1微秒延迟,总延迟是多少?这对应用意味着什么?
为什么现代数据中心要追求“扁平化”网络?减少层次真的那么重要吗?
当网络速度接近光速极限时,存储架构下一步该向何处进化?
记住:在存储的世界里,光速是最终的上限,协议是现实的枷锁,而创新则是打破枷锁的钥匙。