共享存储方式SMP、分布式存储方式MPP、共享虚拟内存SVM介绍
在高性能计算(HPC)或数据库、大数据系统的架构中,常常会提到以下几种存储/并行方式:
- SMP(Symmetric Multi-Processing):对称多处理(又称共享存储系统)
- MPP(Massively Parallel Processing):大规模并行处理(又称分布式存储系统)
- SVM(Shared Virtual Memory):共享虚拟内存
它们的核心差异在于:如何组织多台处理单元或多核、多CPU对内存的访问与数据的存储管理。下面分别进行详细介绍,并谈谈优缺点、相互关系以及通俗易懂的例子。
1. SMP(Symmetric Multi-Processing,对称多处理)
1.1 基本概念
- SMP 系统中,多个 CPU(或多核)共用同一物理内存,所有处理器对内存的访问权限和访问延迟基本对称。
- 常见于单台服务器或工作站,主板上插有多颗物理 CPU(或 CPU 内部多核),共同访问统一的内存总线和共享的主存(RAM)。
1.2 优点
- 编程和数据共享简单:所有处理器共享一个地址空间,线程之间通过共享变量即可实现数据通信。
- 管理和部署方便:只有一台主机、一个操作系统实例,应用安装、调度维护都相对简单。
- 适合中等规模的并行:多核 CPU 或多路服务器在中等规模计算或实时交易场景表现良好。
1.3 缺点
- 可扩展性有限:共享主存和总线带宽会成为瓶颈,处理器数量过多时,访问冲突加剧,扩容成本高。
- 异构性较差:所有 CPU 统统共享同一种资源结构,难以混合 GPU、FPGA 等更多专用硬件做大规模并行。
- 故障影响较大:在一台机器上,一旦系统或总线出现故障,整体就容易瘫痪。
1.4 通俗举例
- 单台服务器/工作站:比如 2 颗或 4 颗英特尔至强 CPU 的服务器,它们都能读取/写同一条内存中的数据,就像住在同一个屋檐下、使用共同的储物柜。
2. MPP(Massively Parallel Processing,大规模并行处理)
2.1 基本概念
- MPP 系统一般由多台独立节点(可能是多台物理服务器)组成,每个节点拥有自己的 CPU、内存和存储,节点之间通过高速网络互联。
- 与 SMP 不同的是,多台节点不共享主内存,每个节点管理自己的内存、硬盘,分布式协同工作。
2.2 优点
- 可大规模扩展:可以通过增加节点数量来线性或近线性地提升计算或存储能力,扩容弹性好。
- 高容错:某些节点出现故障,可以通过集群的冗余或分布式机制进行容错或自动接管。
- 适合海量数据处理:特别在大数据场景或超算中心,需要很多节点各自处理一部分数据,再通过网络聚合结果。
2.3 缺点
- 编程模型和数据分配较复杂:节点之间需要通过网络通信(消息传递),程序员需要考虑数据分片、任务分发、容错等问题。
- 网络带宽和延迟:节点间远程通信延迟大,不像 SMP 那样直接访问共享内存;一旦数据需要大规模跨节点传输,就可能成为性能瓶颈。
- 管理复杂度提升:由多台节点构成,需要专业的部署、监控和运维能力。
2.4 通俗举例
- 分布式数据库或数据仓库:如 Greenplum、Amazon Redshift、Teradata 等,将数据分片存在多个节点上,各节点并行处理,再汇总结果。
- 超算集群:许多节点通过高速网络链接(如 InfiniBand),每个节点都有自己的存储与内存,运行 MPI 等并行程序来做科学计算。
3. SVM(Shared Virtual Memory,共享虚拟内存)
3.1 基本概念
- SVM 指的是多个处理单元(可能是多个节点或多个设备)在系统层面上共享同一个虚拟地址空间。
- 不同于 SMP(物理上一致的共享存储)或 MPP(分布式独立内存),SVM 可能基于硬件或软件的机制,使得应用层看到的地址空间是统一的,但在底层实际上可能是分布在不同节点/设备上。
3.2 关键机制
- 地址映射:通过操作系统或硬件的内存管理单元(MMU),将多个物理内存分散在不同节点或设备上,而呈现给用户或进程的则是同一个“大”地址空间。
- 一致性协议:如果多个处理单元在读写同一块虚拟地址,需要有一致性协议(如目录协议、监听协议等)来确保某个单元更新后,其他单元能看到最新数据或保持同步。
- 可能是硬件或软件支持:如大型并行机、NUMA 架构主机,或者通过一些软件层来模拟这种“共享虚拟内存”的体验。
3.3 优点
- 简化编程模型:开发者看到的就像共享内存环境一样,不必显式编写消息传递或数据分片逻辑。
- 减少数据复制:同一虚拟地址可以被不同处理单元映射,减少不必要的拷贝或传输。
- 灵活性:底层可以是分布式硬件,软件/硬件层面则对外提供一个统一的虚拟地址空间。
3.4 缺点
- 一致性维护开销:必须处理好访问冲突、缓存同步等,协议和实现较为复杂,性能可能受限。
- 硬件要求或软件开销:若是硬件层支持,需要更复杂的内存管理和互联;若是软件模拟,可能会有额外的性能损耗。
- 适用场合有限:SVM 多用于一些高端 HPC 系统或特定硬件支持的场合(例如 GPU 与 CPU 间的统一虚拟地址空间)。
3.5 通俗举例
- GPU/CPU Unified Memory:部分 GPU(如 NVIDIA CUDA Unified Memory)提供“统一内存”模型,让 CPU 和 GPU 共享一个虚拟地址空间,看起来像一起访问同一片内存,实际上底层做了大量的同步与管理。
- 大规模并行机中的共享虚拟地址:一些高端并行计算机通过底层硬件来保持所有节点的共享虚拟地址一致,这让程序员像在 SMP 上编程一样,只不过扩展到了更多节点。
4. 三者之间的关系与区别
-
内存组织方式
- SMP:单一物理共享内存,多处理器共享同一个内存地址空间。
- MPP:物理上分布式内存,每个节点独立管理自己的内存,通常需要消息传递或分布式协议来通信。
- SVM:逻辑上共享(同一虚拟地址空间),底层可能是分布式也可能是部分共享,需要硬件/软件来同步和维护一致性。
-
扩展性
- SMP:扩展到一定规模后,带宽和总线成为瓶颈,扩展能力有限。
- MPP:横向扩展能力较强,可以增加更多节点来增强计算和存储能力。
- SVM:扩展能力视具体实现而定,若底层仍是分布式,一致性开销可能成为制约;若是硬件SVM,很难做到大规模部署。
-
应用场景
- SMP:中等规模服务器、工作站、多核 CPU 系统,适合多线程、共享内存编程模式。
- MPP:大数据分析平台、超算集群、高并发分布式系统,适合海量数据处理和大规模并行计算。
- SVM:需要共享内存式编程便捷性,但底层又可能是分布式或异构硬件(CPU+GPU)。
5. 小结
- SMP(共享存储,对称多处理):依赖单机共享内存,编程简单,但规模扩展受限。
- MPP(分布式存储,大规模并行处理):各节点独立内存,通过网络通信扩展性强,适合大数据和超算,但编程复杂度更高。
- SVM(共享虚拟内存):为用户提供共享内存的“假象”或统一抽象,底层可能分布式或异构,需要额外的硬件/软件机制保持一致性。
它们代表了三种不同的思路:物理共享(SMP)、分布式(MPP)和逻辑共享(SVM)。选择何种架构,主要取决于应用规模、性能需求、硬件资源以及研发成本等多种因素。