多处理机与分布式系统
一、核心问题与第一性原理
所有多处理机与分布式系统的设计,都在反复回答同一组根本问题:
1. 三大不可回避的基本矛盾
| 维度 | 根本问题 | 本质冲突 |
|---|---|---|
| 一致性 | 多个执行单元如何看到同一个世界 | 正确性 vs 并行性 |
| 性能 | 并行是否真的带来加速 | 计算加速 vs 协调开销 |
| 可扩展性 | 系统规模扩大时复杂度如何增长 | 局部优化 vs 全局复杂性 |
核心结论:所有体系结构差异,都是在这三者之间选择不同的平衡点。
二、并行系统的四条设计轴(统一抽象模型)
所有并行/分布式系统都可以映射到以下四个抽象维度:
- **地址空间模型**:统一地址空间 vs 分离地址空间
- **通信方式**:共享内存 vs 消息传递
- **一致性实现者**:硬件 / 操作系统 / 程序员
- **延迟假设**:低且稳定 vs 高且不确定
这四条轴构成了理解 UMA、NUMA、多核、DSM、多计算机的统一坐标系。
三、多处理机:共享内存假设下的扩展
3.1 多处理机的定义(抽象层)
多处理机系统:
- 多个 CPU
- **共享单一地址空间**
- 通常依赖硬件维持内存一致性
编程模型假设:内存是“共同可见”的。
3.2 UMA:统一存储访问的理想模型
本质特征
- 任意 CPU 访问任意内存,延迟相同
- 一致性主要由硬件缓存协议保证
架构演进逻辑
总线型 UMA:
- 优点:简单、直观
- 本质瓶颈:**共享总线 = 全局串行点**
交叉开关:
- 用硬件并行换性能
- 代价:复杂度 O(n²)
多级交换网络:
- 以层次化降低硬件复杂度
- 代价转移为路径竞争与延迟
本质规律:UMA 的扩展极限由“全局共享”本身决定。
3.3 NUMA:对物理现实的妥协
为什么 NUMA 必然出现?
- 物理距离无法被抽象掉
- 存储器规模增长导致访问不均匀
NUMA 的核心思想
- **逻辑上共享,物理上分布**
- 本地访问快,远程访问慢
编程与系统代价
- 性能不再只由算法决定
- 数据布局成为一等公民
NUMA 是共享内存模型的最后一次扩展。
3.4 多核、众核与异构:片上并行的极端化
多核(CMP)
- 共享内存 + 缓存一致性
- 问题集中在:一致性流量与能耗
众核(如 GPU)
- 核心数量极多
- 放弃通用一致性,追求吞吐
- 本质:**SIMD/SIMT 数据并行机器**
异构多核
不同指令集 / 能力核心共存
本质矛盾:
- 性能效率 vs 编程复杂性
四、多处理机操作系统的组织哲学
4.1 OS 组织的根本问题
多个 CPU 如何安全、高效地共享一个操作系统?
4.2 三种典型范式
1. 每 CPU 一份 OS
优点:实现简单
致命问题:
- 全局状态难以一致
- I/O 与缓存管理冲突
2. 主从模型
本质:集中化控制
问题:
- 单点瓶颈
- 扩展性差
3. 对称多处理(SMP)
现代主流方案
两种实现路径:
- 大内核锁(历史方案)
- 细粒度锁 / 子系统并行
SMP 的核心挑战:操作系统本身成为并发程序。
五、同步:限制并发不确定性的机制
5.1 同步的第一性原理
同步不是为了性能,而是为了限制状态不确定性的传播。
5.2 自旋、阻塞与现实折中
自旋:
- 假设等待时间短
- 浪费算力换取低延迟
阻塞:
- 节省 CPU
- 付出上下文切换代价
工程现实:
- **自旋 + 阈值 + 阻塞** 的混合策略
六、调度:时间维度上的资源分配
6.1 调度的抽象目标
- 公平性
- 吞吐量
- 局部性
调度本质是:在时间轴上安排并行实体的相遇与错开。
6.2 多处理机调度策略
- 分时:线程为基本单位
- 亲和性:减少缓存失效
- 空间共享:强化通信局部性
- 群调度:保证协同线程同时运行
七、范式断裂:从多处理机到多计算机
7.1 根本性变化
| 维度 | 多处理机 | 多计算机 |
|---|---|---|
| 地址空间 | 共享 | 分离 |
| 通信 | 内存读写 | 消息 |
| 延迟 | 低且稳定 | 高且不确定 |
| 失败 | 异常 | 常态 |
分布式系统不是“放大的多处理机”。
八、通信:显式面对分离现实
8.1 网络接口的本质角色
- 速率匹配器
- 异步缓冲器
- 协议卸载器
8.2 零拷贝与 RDMA
减少内存复制 = 减少不必要的抽象层
本质目标:
- 降低通信路径长度
九、通信抽象:RPC 与 DSM
9.1 RPC
目标:隐藏网络
代价:
- 表达能力受限
- 性能与失败语义复杂
9.2 DSM
目标:保留共享内存幻觉
核心问题:
- 伪共享
- 一致性代价
DSM 的价值在于教学与思想实验,而非主流工程实践。
十、分布式调度与负载均衡
10.1 调度的根本问题
工作应该在哪里运行?
10.2 典型思想
- 全局建模(图论):最优但昂贵
- 发送者发起:系统繁忙时开销大
- 接受者发起:系统空闲时更友好
十一、总结:长期稳定的认知结论
并行系统的复杂性主要来自一致性管理
扩展性问题无法被“更聪明的硬件”彻底解决
架构演进本质是:
- 从隐式共享 → 显式通信
- 从硬件保证 → 软件承担
优秀系统的标志:
- 清晰暴露代价
- 明确失败边界
- 允许局部最优而非全局幻想
最终认知:并行与分布式系统设计,是一门关于“承认现实约束”的工程哲学。
关联内容
- [/软件工程/架构/系统设计/分布式/分布式系统.html](/软件工程/架构/系统设计/分布式/分布式系统.html) - 详细阐述了分布式系统的架构、中间件、存储系统等内容,与多处理机系统在设计理念上有诸多相通之处
- [/软件工程/架构/系统设计/分布式/分布式一致性系统.html](/软件工程/架构/系统设计/分布式/分布式一致性系统.html) - 深入探讨了分布式一致性系统的本质、模型和实现机制,对理解多处理机系统中的缓存一致性有重要参考价值
- [/软件工程/架构/系统设计/分布式/分布式一致性与协调机制.html](/软件工程/架构/系统设计/分布式/分布式一致性与协调机制.html) - 详细分析了分布式系统中的协调挑战和协调机制,包括分布式锁、Session管理等内容
- [/计算机系统/程序结构和执行/存储器层次结构.html](/计算机系统/程序结构和执行/存储器层次结构.html) - 详细介绍了缓存一致性协议(如MESI)以及存储器层次结构,这对理解多处理机系统中的缓存一致性至关重要
- [/操作系统/死锁.html](/操作系统/死锁.html) - 涵盖了多处理机系统中的同步和锁机制与死锁预防相关内容
- [/软件工程/架构/系统设计/缓存.html](/软件工程/架构/系统设计/缓存.html) - 讨论了缓存一致性问题,与多处理机系统中的缓存一致性有相似之处
- [/编程语言/JAVA/JAVA并发编程/基础概念.html](/编程语言/JAVA/JAVA并发编程/基础概念.html) - 涉及缓存一致性协议和内存可见性等概念
- [/编程语言/并发模型.html](/编程语言/并发模型.html) - 探讨了并发编程中的状态一致性问题,与多处理机系统中的同步机制相关