什么是分布式共享内存?及其优势

2025年7月3日 | 6分钟阅读

它是一种管理多个节点上的内存并使进程间通信对最终用户透明的机制。应用程序会认为它们在共享内存上运行。DSM 是一种允许用户进程在不使用进程间通信的情况下访问共享数据的机制。在 DSM 中,每个节点都有自己的内存,并提供内存读写服务,以及一致性协议。分布式共享内存 (DSM) 在分布式系统中实现了共享内存模型,但它没有物理共享内存。所有节点共享由共享内存模型提供的虚拟地址空间。数据在不同节点的内存之间移动。

What is a distributed shared memory

现在让我们讨论几种不同类型的分布式共享内存

  1. 片上内存
    1. 所有数据都存储在 CPU 的芯片上。
    2. 内存和地址线之间有直接连接。
    3. 片上内存 DSM 非常昂贵且复杂。
  2. 总线型微处理器
    1. 内存和 CPU 之间的连接通过多条平行导线建立,这些导线充当总线。
    2. 所有计算机都遵循一些协议来访问内存,并且实现了一个算法来防止系统同时访问内存。
    3. 缓存内存减少了网络流量。
  3. 环形微处理器
    1. 在环形 DSM 中,没有集中式内存
    2. 所有节点通过某个链接/网络连接,内存访问通过令牌传递完成
    3. 在此系统中,所有位于共享区域的节点/计算机访问单个地址线
  4. 交换式多处理器
    1. 当我们构建超过 64 个处理器的多处理器时。
    2. 将内存分成模块并将其连接到 CPU。
    3. 这用于构建一个系统,如多个集群,并使用集群间总线连接集群。
    4. 从图可以看出,每个交叉点都是一个微小的电子交叉开关,可以打开和关闭以传输数据。

实现 DSM 的算法

  • 中心服务器算法
    • 一个中心服务器维护所有共享数据。
    • 读取:服务器只需返回数据
    • 写入时更新数据并向客户端发送确认
    • 一个简单的有效解决方案,为分布式应用程序提供共享内存
    • 效率低下——服务器成为瓶颈,内存访问延迟长
    • 数据可以分布式——需要一个目录来存储页面的位置。
  • 迁移算法
    • 数据被发送到数据访问请求的位置——后续访问是本地的
    • 对于读/写,将远程页面获取到本地机器,然后执行操作。
    • 跟踪内存位置:位置服务、每个页面的主机器、广播。
    • 问题:抖动——页面在节点之间频繁移动,伪共享
    • 多次读取可能会很昂贵。
  • 读复制算法
    • 读取时,页面会被复制(将页面标记为多个读取器)
    • 写入时,除一个副本外,所有副本都必须更新或失效
    • 多读单写
    • 允许对页面进行多次读取
    • 必须跟踪所有位置:位置服务/主机器
  • 全复制算法
    • 允许多读多写
    • 必须控制对共享内存的访问

分布式共享内存的应用

  • 为节点提供大的虚拟内存空间。
  • 处理大型复杂数据库。
  • 用于汽车电器现代玩具
  • 减少节点的内存访问时间。
  • 减少通信量并提高通信容量。

现在让我们看看分布式共享内存系统的一些优点

  1. 易于抽象 - 由于地址空间相同,数据迁移对程序员来说不是问题,使其比 RPC 更容易构建。
  2. 更易于移植 - 由于 DSM 中使用的访问协议,从顺序系统到分布式系统的迁移变得容易。由于它们使用通用的编程接口,因此 DSM 程序是可移植的。
  3. 数据局部性 - 正在以大块获取的数据,或接近正在获取的内存地址的数据,将来可能需要。
  4. 更大的内存空间 - 提供大的虚拟内存空间,减少分页操作,总内存大小是所有节点内存大小的总和。
  5. 更好的性能 - 它加快了数据访问速度,以提高系统性能。
  6. 灵活的通信环境 - 发送方和接收方不需要同时存在,因此它们可以加入和离开 DSM 系统而不影响其他人。
  7. 简化的进程迁移 - 由于它们共享相同的地址空间,因此将一个进程移动到另一台计算机很简单

下面列出了一些分布式共享内存 (DSM) 系统的更多基本优势

  1. 比使用多处理系统便宜
  2. 数据访问流畅
  3. 它提供了更好的可扩展性,因为多个节点可以访问内存。

现在让我们看看分布式共享内存的缺点

  1. 在非分布式共享内存系统中访问速度比在分布式系统中快。
  2. 同时访问数据一直是讨论的话题。它应该为此提供额外的保护。
  3. 它产生了程序员对实际消息的一些控制
  4. 为了编写正确的程序,程序员必须学习一致性模型
  5. 它不如消息传递实现高效,因为它使用了异步消息传递实现。

消息传递与分布式共享内存的区别

分布式共享内存消息传递
变量直接共享变量被形式化。
通信成本较低通信成本较高
进程修改数据可能会发生错误。与进程关联的私有地址空间可防止错误发生。
进程不能同时运行。进程可能同时运行。

常见问题

在一致性模型方面,分布式共享内存如何与物理共享内存不同?

分布式共享内存 (DSM) 系统使用软件抽象来模拟物理分散系统上的共享内存,给人一种所有机器上的内存都是全局的印象。另一方面,物理共享内存系统(如 SMP)具有硬件强制的一致性。物理共享内存系统通常在硬件级别强制执行更强的一致性模型(如顺序一致性),而 DSM 由于通信延迟和可扩展性限制,通常使用较弱的模型(如释放一致性或弱一致性)。

为什么伪共享是 DSM 中的关键性能问题,以及如何缓解它?

当多个节点访问驻留在同一内存页上的不同变量时,DSM 中会出现伪共享,导致不必要的页面无效和同步。这会降低性能,因为尽管没有实际的数据依赖关系,但网络上会发生频繁的数据传输。缓解策略包括数据结构填充、更好的数据放置策略以及允许比基于页面的 DSM 更细粒度的面向对象的 DSM 系统。

解释一致性协议和一致性协议在 DSM 中的作用以及它们如何交互。

在 DSM 中,一致性协议确保内存块的所有副本都反映最新的写入,从而在节点之间维护共享变量的一致视图。另一方面,一致性协议定义了对共享数据进行内存操作(如读/写)的顺序和时机。一致性维护数据的正确性,而一致性控制操作的正确性。例如,一个协议可以使用写失效来维护一致性,并强制执行释放一致性来平衡性能和正确性。

比较基于页面的 DSM 系统和基于对象的 DSM 系统。它们带来哪些权衡?

基于页面的 DSM 系统将内存划分为固定大小的页面并在节点之间共享,这简化了实现,但通常会导致伪共享和低效的内存使用。相比之下,基于对象的 DSM 共享高级编程对象,提供了更细粒度和更少的伪共享,但它增加了对象跟踪、序列化和运行时开销的复杂性。权衡在于在简单性和粗粒度(基于页面)与精确性和复杂性(基于对象)之间进行选择。

DSM 系统中的内存访问延迟如何影响可扩展性,以及存在哪些优化策略?

由于远程数据的网络通信延迟,DSM 系统中的内存访问延迟随着节点数量的增加而增加,这可能会限制可扩展性。为了优化这一点,DSM 系统采用了数据预取、本地缓存、延迟释放一致性以及复制等策略,以减少远程内存访问的频率和成本。