分布式共享存储系统算法和一致性研究介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、介绍
19世纪70年代,当时处理器运行速度非常的慢,存储器运行速度快于微处理器。

而在80年代,随着微电子工艺的发展,处理器速度迅速增加,相反存储器速度提高较慢,此时存储器速度已跟不上处理器速度,通信瓶颈与并行编程的负担成了当时的主要问题。

当人们设计的处理器与储存器速度慢慢达到其物理极限时,为了进一步提高运算速度,多处理器成了主要的研究与发展趋势。

当时两个主流的并行系统是:共享主存多处理器(也称共享主存系统)和分布式主存多处理器(也称分布式主存系统)。

共享主存系统提供一个全面和方便的编程模型,结构通用性好、可移植性、编程容易,但是难以扩展到很大的规模,难以满足当今飞速增长的对计算机计算能力的需求;分布式主存多处理器为高运算速度提供可能性,并具有很好的可扩充性,但其不利于程序设计。

分布式共享存储器结合了共享主存系统和分布式主存系统的优点,集可编程性与可扩展性于一身。

分布式共享存储(DSM)的概念最早是由李凯在1986年提出的[1]。

这一早期的设计受到了传统的虚拟存储系统的启发。

在虚拟存储系统中,当处理机访问不在实存中的页面时,将产生页面中断,而由操作系统将这一页面从硬盘取入实存。

李凯的设计类似于这一过程,所不同的是访问未命中的页面不是从硬盘取出,而是通过网络从其他处理机的局部存储器中取得。

尽管该系统的存储空间在物理上是分布在不同的处理机上的,但却构成了一个虚拟的共享存储空间。

因此,分布式共享存储系统也被称作虚拟共享存储系统。

图1.1
分布式共享存储系统是在一个物理(硬件)的分布式存储系统上实现逻辑的
共享存储模型,以便在分布式存储系统上可以进行共享存储程序设计。

其基本结构如图1.1所示。

从图中可以看出,分布式共享存储系统的硬件结构和分布式存储系统是相同的,每个处理机都有自己的局部存储器,但这些局部存储器被DSM 系统映射成了一个统一的共享存储空间。

它提供给程序员一个逻辑上统一的地址空间, 任何一台处理机都可以对这一地址空间直接进行读写操作。

程序设计者可以以共享存储模型来进行程序设计,因而使分布式存储系统上的并行程序设计变得容易起来。

同时,分布式共享存储系统保留了分布式存储系统的易于构造和扩展的特性,为建立易用的、大规模的并行计算机提供了一条发展之路。

总的来说,分布式共享存储器有以下几个优点[2]:
1、方便程序员编程设计;
2、允许共享存储系统的算法和软件运用在分布式系统上;
3、由于缺少了软件瓶颈,分布式系统能扩展更大的规模;
4、使低功耗存储机成为可能。

本节主要对分布式共享存储器做了一个简单的介绍。

后面的章节将对分布式共享存储器的算法、一致性模型、实施机制、异构性、多线程、系统实例做综述。

二、分布式共享存储器算法研究
分布式共享存储系统必须能够自动的将共享存储入口转变到进程间的通信。

这就需要算法放置与访问共享数据、保持数据一致性,以及替换数据。

算法执行在DSM中主要为了解决两个问题[2]:1、最小化静态和动态分布的系统共享数据访问时间;2、维持共享数据的一致性,最小化一致性管理消耗。

本节将介绍四种基本分布式共享存储器算法,将以他们是否有迁移或是复制数据来对算法分类。

这四种算法分别是中央服务器算法、迁移算法、读复制算法、全复制算法[3]。

如表2.1所示,迁移算法、读复制算法需迁移数据,使得对数据访问能在本地进行,减少了远程访问次数,从而能避免通信消耗;读复制算法、全复制算法需复制数据,使得多次读访问能在同一时间发生。

下面将是这四种算法的具体介绍。

1、中央服务器算法
中央服务器算法是一种既不迁移数据也不复制数据的算法,它是分布式共享储存器实施最简单的算法。

中央服务器算法使用一个中央服务器负责为所有对共享数据的访问提供服务, 并保持共享数据惟一的副本, 读和写操作都包括由执行该操作的进程向数据服务员发送请求报文。

数据服务员执行请求并回答,读操
作时回答数据项,写操作时回答一个承认,如图2.1所示。

中央服务器算法每次数据访问都需要两次消息传递:一次是进程访问数据服务器请求,另一次是数据服务器的回答。

然而,该算法潜在的问题是中央服务器很可能将是一个瓶颈,因为它需要响应所有的客户服务请求。

中央服务器算法下的组织结构不存在任何的共享数据物理分布。

一个简单的改进是将共享数据分布到多个不同的服务器,但在这种情况下,客户必须在访问数据时寻找正确的服务器。

一种更好的额解决方法是通过虚拟地址和简单的匹配来划分数据,以决定要连接的服务器。

2、迁移算法
迁移算法在其他文献也被称为“单读者/单写者算法[]”,该算法下数据总是迁移到指定位置当它被访问时。

一次只能在一个主机上执行的线索读或写一个给定的数据,如图2.2所示。

这种算法的好处是:1、当进程访问当前本地数据时,不会有任何的通信开销。

如果一个应用程序表现出很高的局部性,数据迁移成本将被多个访问摊销。

2、如果选择的模块大小与虚拟主存页面大小相同,该算法能与主操作系统的虚拟存储系统集成。

当较长的访问时,从一个处理器从不间断地访问其他处理器序列是可能的,并写在同一数据读取经常发生,这种情况下迁移算法能表现的很好。

然而,迁移算法性能很低,因为它没有充分利用多个只读副本的并行潜力,这也是迁移算法
被用的很少的原因。

3、读复制算法
读复制算法又称多读者/单写者算法,该算法能降低读操作的平均功耗。

与迁移算法的区别是当一个节点读访问远程数据块时,它复制而不是迁移该数据块。

这样,一个数据块可能在不同的节点有多个只读副本。

若允许一个节点对一个指定块的副本进行一个读/写或多个节点对该块的副本进行只读,则复制算法可以很自然地变为迁移算法。

如图2.3所示。

针对DSM管理责任安置的不同,读复制算法又可分为:
(1)中央管理者算法
所有读和写都要到管理者中,管理者
(2)改进的中央管理者算法
(3)固定分布的管理者算法
(4)广播分布的管理者算法
(5)动态分布的管理者算法
4、全复制算法
全复制算法又称多读者/多写者算法。

该算法下所有的数据在所有的节点都有副本,它允许数据块在进行写时也可以复制。

全复制算法的数据一致性维护最为复杂。

一个可能的方法是使用一个全局排序器,对所有的写操作进行全局排序,而只对与发生在执行读操作节点上的写操作相关的那些读操作进行排序。

对于不是本地模块数据的读操作,在读操作完成之前,须得与远节点通信,获得只读复制,然后将只读复制改为写复制。

对于不是本地模块数据的写操作,在写进程之前,所有其它节点相同模块的复制都要变成无效状态。

该算法操作如图2.4所示。

5、容错的DSM算法
以上DSM算法一个最大的问题是它们都不具有容错功能,Michael Stumm 和Songnian Zhou将以上四种基本算法扩展成能容忍单个主机错误的算法,并证明这些程度的容错能力在很多应用中是有效的。

中央服务器容错算法如图2.5所示,
这种中央服务器容错算法只是在原中央服务器算法上加了一个备份服务器,这样就使得算法能容忍单个错误。

在迁移算法中,错误恢复程序就很直接。

所有主机页面在它们出错时都将通过它们的备份中恢复。

这个模块的建立需要服从命令决定:一旦主机不能放置将要访问的模块,它就放置模块的备份。

如果这个备份是本地的,然后一个新备份将被迁移到远处的主机并被置为无效;否则这个备份就将被迁移到能被访问到的主机。

由于恢复主机模块服从命令使得恢复时间不能确定,只要错误的主机被找到就决定和恢复该缺失模块就变得更加重要。

三、分布式共享存储器一致性模型
在分布式共享存储系统中,共享数据可以被多个处理机同时访问。

如果在系统中所有共享数据只保留一个备份,将导致大量的访问错误和数据传送,使性能大为降低。

为了提高性能,必须允许共享数据有多个可访问的备份同时存在。

但是,共享数据的多个备份带来了新的问题:如何保证这些备份是一致的?所以存储一致性模型是分布式共享存储器设计的关键问题。

目前分布式共享存储器一致性模型有:
——严格的一致性模型
——顺序一致性模型
——因果一致性模型
——PRAM 一致性模型
——处理机一致性模型
——弱一致性模型
——释放一致性模型
——懒惰释放一致性模型
——入口一致性模型
1、严格一致性模型
如果对任一存储单元的任何读访问将返回在此之前对同一单元的最近一次写访问所写入的值,那么称这种存储系统为严格一致的。

严格的一致性是所有存储一致性模型中最严格的。

严格一致性模型是从单处理机系统的存储模型直接得来的,它要求多处理机系统和单机系统一样,如果某一处理机发出一个写操作,该操作将立即全局地完成,即立即为其它处理机所见。

图3.1表示了严格一致性的执行,处理P1的写操作“立即”被P2所见。

严格一致性对访存事件序列的严格限制使它几乎不可能被共享存储系统采用。

它要求在某一处理机发出的写操作全局地完成之前,所有机(包括发出该写操作的处理机)不能进行新的访存操作。

满足这种要求所需的代价是极高的,而在分布式共享存储系统中则几乎不可能实现。

2、顺序一致性模型
顺序一致性由Lamport 提出,它是这样定义的:果在多处理机系统中,任何程序的执行所得到的结果与所有处理机的操作以某一种顺序执行,且各个处理机的操作按照其程序所规定的次序执行所得到的结果相同,则我们说该系统是顺序一致性的。

图3.2表示了顺序一致性的执行,处理P1能看见随后的顺序:2)(1)(1)(212x w x r x w →→。

图3.2
顺序一致性所规定的存储器行为是和大多数程序设计者的直觉相一致的。


个处理机按照其程序序顺序地发出访存请求,而存储器则每次只为一个请求服务,且按照一个任意的顺序在各个处理机间切换其服务,并保证所有处理机的请求都将得到服务。

3、因果一致性模型
因果一致性模型是由Hutto和Ahamad提出,它是这样定义的:在因果一致性模型中,存在因果关系的两个写操作必须以同一次序相对于各处理机完成;并发的写操作可以不同的次序相对于各处理机完成。

图3.3的执行是符合因果一致性的,因为P1的W(A)1和P4的W(A)2是并发的.而图3.4的例子是违反因果一致性的,因为P4的读操作R(A)1的存在使Pl的W(A)1和P4的W(A)2成为有因果关系的操作。

因果一致性模型放松了顺序一致性模型对访存操作的原子性的要求,对于并发的写操作不要求其必须以相同的次序相对于各处理机完成。

但是,因果一致性模型的实现非常困难,因为它要求对各访存操作之间是否存在因果关系作出判别。

4、PRAM一致性模型
PRAM指的是“流水的随机访问存储器”,这一模型是由Lipton和Salldberg 提出。

在PRAM一致的系统中,同一处理机所发出的写操作应按胆其发出的次序相对于其它各处理机完成,而不同处理机所发出的写操作可以不同的次序相对于各
个处理机完成。

PRAM一致性模型对访存操作的原子性基本上未作要求,在拥有共享存储器的多个备份这样的系统中易于实现。

但是,PRAM一致性模型是一个从硬件实现角度来提出的一致性模型,它没有考虑程序设计者对程序的执行情况所做的设想,因而增加了程序设计者的负担。

5、处理机一致性模型
处理机一致性由Goodman提出。

如果当一个读操作获准相对于其它任一处理机完成之前,所有以前的读操作必须已完成;或是当一个写操作获准相对于其它任一处理机完成之前,所有以前的访存(读/写)操作必须已完成。

6、弱一致性模型
弱一致性模型可定义为:一个系统是弱一致性的,如果所有对同步变量的操作是符合顺序一致性的;或在所有以前的数据操作全局完成之前,不允许执行任何对同步变量的操作;或在所有以前的同步操作全局完成之前,不允许执行任何数据操作。

弱一致性模型允许相邻的两个同步操作之间的数据操作以任何次序执行(当然对同一存储单元的操作仍要求按程序序执行),因此,以前用于单处理机系统的各种优化技术几乎都可以被采用,所以弱一致,性模型可以有效地提高系统性能。

7、释放一致性模型
一个系统是释放一致性的,如果当一个数据读/写操作获准相对于其它任一处理机完成之前,所有以前的获取操作必须都已经完成;或当一个释放操作获准相对于其它任一处理机完成之前,所有以前的数据操作必须都已经完成;或当同步操作之间是顺序一致的。

释放一致性模型从三个方面对访存操作的次序作了放松:第一,同步操作之间的数据操作可以任何次序完成(这一点和弱一致性模型相同);第二,在释放操作之后的数据操作不需要等到该释放操作完成后才可执行;第三,获取操作不需要等到它前面的数据操作完成后才可执行。

8、懒惰释放一致性模型
任一处理机在访问共享变量前必须先获得访问许可,所以在它执行获取操作前,不会对共享变量进行访问,因而不需要知道其它处理机对共享变量的改动。

所以,一个处理机完全可以等到执行获取操作时才去了解其它处理机对共享变量的修改。

这种思想产生了懒惰释放一致性模型。

懒惰释放一致性模型不要求处理机在释放操作时将它以前对共享数据的修改传送给所有的处理机,而是要求某一处理机在执行获取操作时才从上一个释放其访问许可的处理机那里获得其对共享数据的修改信息。

9、推测的基于主页的释放一致性
Michael Kistler提出了一种推测的基于主页的释放一致性模型。

该模型能推测升级远程节点数据以减少远程存储器访问延时。

该技术应用一个预测器根据过去共享主存的访问情况来预测未来的访问。

9、入口一致性模型
当进程进入临界区时,和该临界区相关的共享数据保持一致,此即是入口一致性模型。

满足入口一致性的条件是:
(l)在当前拥有者对数据的更新操作未完成时,不能执行另一进程对同步变量的获取操作。

(2)如果某进程以互斥模式访问某同步变量,则在该进程释放此同步变量之前,任何别的进程即使是在非互斥模式下都将无法获得该同步变量。

(3)如果某进程以互斥模式访问某一同步变量,则在该进程完成操作之后,任何进程对此同步变量的后继非互斥访问,都只有在成为该同步变量的拥有者之后才能完成。

因为只有少量的共享变量需要同步,所以如果将每一个同步变量与多个共享数据相关联,则会减少对同步变量的获取和释放操作的开销。

同时,还可以允许多个包含不同变量的临界区并行操作,从而提高并行性。

相关文档
最新文档