一种面向虚拟集群的共享存储系统转让专利

申请号 : CN201410274162.4

文献号 : CN105242872B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曾令仿肖子良冯丹张泽浩

申请人 : 华中科技大学

摘要 :

本发明提供了一种面向虚拟集群的共享存储系统,属于计算机存储技术领域。该系统主体部分由通过网络互连的两台主机组成。主机主要包括用于组成共享存储空间的共享存储模块,若干虚拟机以及为虚拟机提供相关服务的虚拟机服务模块。虚拟机主要包括一个虚拟设备,在内核空间的设备驱动模块以及供应用程序调用的访问接口模块。本发明提供了一种新颖的分布式共享存储系统,它的独特之处在于为不同物理机上虚拟机的信息传递提供一种机制,从而使共享存储编程语义可以在云端的虚拟集群中得以实现。该发明为用户层提供一个用户态可编程的共享存储空间,既可以保证对共享存储读写效率,同时并没有干预客户机内核层和虚拟机监控层。

权利要求 :

1.一种面向虚拟集群的共享存储系统,其特征在于,所述共享存储系统由两台网络互连的物理主机组成,所述物理主机中包括多个虚拟机、共享存储空间和虚拟机服务模块;所述虚拟机包括虚拟设备、设备驱动模块和用户编程接口模块;所述虚拟机服务模块包括虚拟机监控模块、消息转发模块和系统锁管理模块;其中:(1)所述物理主机中:

(1.1)所述虚拟机是由命令行启动的;(1.2)所述共享存储空间是posix语义的共享存储空间;(1.3)所述虚拟机服务模块,用于监控物理机上虚拟机的启动和退出:当有虚拟机启动时,向新启动的虚拟机通告共享存储空间和一个在主机上唯一的虚拟机编号,当有虚拟机退出时,向其它虚拟机通告退出情况;所述虚拟机服务模块还用于负责整个系统协议的消息转发;所述虚拟机服务模块还用于负责和另一台主机上的虚拟机服务模块的通信以及和本地物理机上的虚拟机设备中通信模块的通信;所述虚拟机服务模块负责参与维护系统共享存储访问的一致性,包括更改共享存储的页状态,从共享存储空间读出请求页,向共享存储空间写入请求页;其中一台主机上的虚拟机服务模块同时还负责管理系统的锁,负责处理锁请求和锁释放消息;

(2)所述虚拟机中:

(2.1)所述虚拟设备是由软件模拟的虚拟设备,包括共享存储映射模块、寄存器模块、通信模块和同步模块;(2.2)所述设备驱动模块用于驱动虚拟设备;(2.3)所述用户编程接口模块用于为用户提供一个统一共享存储空间的访问接口,访问接口通过对虚拟设备寄存器的读写操作来传递应用层的访问请求,该编程接口实现了一种基于锁的编程语义;

(3)所述虚拟设备中:

(3.1)所述共享存储映射模块用于将主机上监控模块提供的共享存储空间映射至虚拟设备的存储空间,供上层应用程序使用;(3.2)所述寄存器模块用于探测应用层通过编程接口发送的请求,包括应对系统的初始化参数设置和读取请求,对共享存储空间的访问请求,锁释放和锁申请请求;(3.3)所述通信模块负责与主机上的虚拟机服务模块的通信流程,用于接收和发送系统消息,所述通信模块还负责处理寄存器模块探测到的来自应用层的消息的处理以及负责来自主机上虚拟机服务模块的消息的处理,保证对共享存储访问的一致性和正确性;(3.4)所述同步模块负责系统的同步机制,所述同步机制包括异步中断机制和全局等待机制。

2.如权利要求1所述的面向虚拟集群的共享存储系统,其特征在于:所述共享存储系统的整体存储空间由两台主机共同提供,其中一台主机提供共享存储空间的低地址空间,另一台提供共享存储空间的高地址空间。

3.如权利要求1或2所述的面向虚拟集群的共享存储系统,其特征在于:所述两台互连的物理主机均采用全地址本地缓存,以避免页面替换引起的系统性能震荡。

4.如权利要求1或2所述的面向虚拟集群的共享存储系统,其特征在于:所述虚拟设备中包含有应用层进程编号和虚拟机编号的映射表,将应用层进程的编号和对应的虚拟机编号联系起来,从而为应用层屏蔽了底层的具体消息转发流程。

5.如权利要求1或2所述的面向虚拟集群的共享存储系统,其特征在于:所述虚拟设备中的寄存器模块采用异步探测模式,能及时探测到应用层的相关请求,同时不影响虚拟机的性能。

6.如权利要求1或2所述的面向虚拟集群的共享存储系统,其特征在于:所述虚拟机服务模块对所在主机上的虚拟机的管理方式为集中式管理,利于系统对数据一致性的维护。

7.如权利要求1或2所述的面向虚拟集群的共享存储系统,其特征在于:所述虚拟机服务模块中的锁管理模块,当处理锁释放消息时,采用最近释放原则,即如果锁请求的源虚拟机和最近释放锁的虚拟机在同一主机上,那么该锁请求可优先获取锁,有效避免共享页面在两台主机之间无谓的迁移,所述虚拟机服务模块中的锁管理模块,采用读锁写锁分离机制,实现共享存储空间的串行写和并行读。

说明书 :

一种面向虚拟集群的共享存储系统

技术领域

[0001] 本发明属于计算机存储技术领域,尤其涉及一种面向虚拟集群的共享存储系统。

背景技术

[0002] 云计算之所以变得越来越流行主要是基于它对一些计算型服务在性能和代价方面所表现出来的优越性。虚拟集群是云端的一种主要运行环境,相对传统的高性能计算平台,虚拟集群在服务高性能计算应用方面有更多的优势,这些优势主要表现在它的易扩展性,可重置行和维护性方面。然而,和传统集群相比而言,虚拟集群的分布式编程语义在很大程度上并没有改变,这大大阻碍了大量共享存储应用在虚拟集群中有效利用云端资源。
[0003] 针对传统集群上,网络工作站或者多核处理器系统的共享存储系统研究是很常见的,比如有Ivy,Treadmarks,Jiajia,Aurora等等。这些系统通过增加中间层库函数或者影响编程语言的功能来为共享存储应用提供一种有限的解决方案。然而,这些系统在云端并不适用。为了能充分利用云端资源,这些资源通常是经过虚拟化技术的复杂转换来为大量大规模的应用提供服务。然而,多数工作在很大程度上局限于改善在同一台物理机上的虚拟机之间的通信,它们通常是利用主机主存共享来优化消息传递机制。
[0004] 虚拟集群不应当仅仅局限分布在同一台物理机上,因此有不同主机共同构成一个统一的共享存储空间,使虚拟集群可以分布在不同的主机上,有利于虚拟集群环境下的云计算在性能和范围等方面得到更大的优化。

发明内容

[0005] 本发明提出一种面向虚拟集群的共享存储系统,采用共享存储技术,结合懒惰更新释放一致性模型,为分布在不同主机上的虚拟机提供一个统一的共享存储空间。
[0006] 本发明公开一种面向虚拟集群的共享存储系统,系统由两台网络互连的物理主机组成。所述物理主机中包括多个虚拟机、共享存储空间和虚拟机服务模块;所述虚拟机包括虚拟设备、设备驱动模块和用户编程接口模块;所述虚拟设备包括共享存储映射模块、寄存器模块、通信模块和同步模块;所述虚拟机服务模块包括虚拟机监控模块、消息转发模块和系统锁管理模块;其中:
[0007] (1)所述物理主机中:
[0008] (1.1)所述虚拟机是由命令行启动的;(1.2)所述共享存储空间是posix语义的共享存储空间;(1.3)所述虚拟机服务模块,用于监控物理机上虚拟机的启动和退出:当有虚拟机启动时,向新启动的虚拟机通告共享存储空间和一个在主机上唯一的虚拟机编号,当有虚拟机退出时,向其它虚拟机通告退出情况;所述虚拟机服务模块还用于负责整个系统协议的消息转发;所述虚拟机服务模块还用于负责和另一台主机上的虚拟机服务模块的通信以及和本地物理机上的虚拟机设备中通信模块的通信;所述虚拟机服务模块负责参与维护系统共享存储访问的一致性,包括更改共享存储的页状态,从共享存储空间读出请求页,向共享存储空间写入请求页;其中一台主机上的虚拟机服务模块同时还负责管理系统的锁,负责处理锁请求和锁释放消息;
[0009] (2)所述虚拟机中:
[0010] (2.1)所述虚拟设备是由软件模拟的虚拟设备,包括共享存储映射模块、寄存器模块、通信模块和同步模块;(2.2)所述设备驱动模块用于驱动虚拟设备;(2.3)所述用户编程接口模块用于为用户提供一个统一共享存储空间的访问接口,访问接口通过对虚拟设备寄存器的读写操作来传递应用层的访问请求,该编程接口实现了一种基于锁的编程语义;
[0011] (3)所述虚拟设备中:
[0012] (3.1)所述共享存储映射模块用于将主机上监控模块提供的共享存储空间映射至虚拟设备的存储空间,供上层应用程序使用;(3.2)所述寄存器模块用于探测应用层通过编程接口发送的请求,主要包括应对系统的初始化参数设置和读取请求,对共享存储空间的访问请求,锁释放和锁申请请求;(3.3)所述通信模块负责与主机上的虚拟机服务模块的通信流程,用于接收和发送系统消息,所述通信模块还负责处理寄存器模块探测到的来自应用层的消息的处理以及负责来自主机上虚拟机服务模块的消息的处理,保证对共享存储访问的一致性和正确性;(3.4)所述同步模块负责系统的同步机制,所述同步机制包括异步中断机制和全局等待机制。
[0013] 在本发明的一个实施例中,所述共享存储系统的整体存储空间由两台主机共同提供,其中一台主机提供共享存储空间的低地址空间,另一台提供共享存储空间的高地址空间。
[0014] 在本发明的一个实施例中,所述两台主机均采用全地址本地缓存,以避免页面替换引起的系统性能震荡。
[0015] 在本发明的一个实施例中,所述虚拟设备中包含有应用层进程编号和虚拟机编号的映射表,将应用层进程的编号和对应的虚拟机编号联系起来,从而为应用层屏蔽了底层的具体消息转发流程。
[0016] 在本发明的一个实施例中,所述虚拟设备中的寄存器模块采用中断异步探测模式,能及时探测到应用层的相关请求,同时不影响虚拟机的性能。
[0017] 在本发明的一个实施例中,所述虚拟机服务模块对所在主机上的虚拟机的管理方式为集中式管理,利于系统对数据一致性的维护。
[0018] 在本发明的一个实施例中,所述虚拟机服务模块中的锁管理模块,当处理锁释放消息时,采用最近释放原则,即如果锁请求的源虚拟机和最近释放锁的虚拟机在同一主机上,那么该锁请求可优先获取锁,有效避免共享页面在两台主机之间无谓的迁移,所述虚拟机服务模块中的锁管理模块,采用读锁写锁分离机制,实现共享存储空间的串行写和并行读。
[0019] 通过本发明所构思的以上技术方案,与现有技术相比,本系统具有以下的有益效果:
[0020] 1、本发明用两台主机共同构成共享存储空间,所述共享存储空间可被分布在任一主机上的虚拟机可见。所述共享存储系统为在不同物理机上的虚拟机提供一种通信机制,使共享存储编程语义在云端的虚拟集群中得以实现。虚拟机上的应用层的云计算按照系统提供的一致性编程语义访问共享存储空间,使云计算能够在虚拟集群环境中更加充分利用云端资源。
[0021] 2、所述的共享存储系统空间不仅可供分布在同一主机上的虚拟机共享,而且也可供分布在不同主机上的虚拟机共享。
[0022] 3、所述的的面向虚拟集群的共享存储系统为虚拟云的分布式应用提供了一种基于锁的分布式计算编程语义。从而使分布式计算能更充分应用于虚拟云环境中。
[0023] 4、所述的面向虚拟集群的共享存储系统中,同一主机上虚拟机之间的数据共享,不需要数据拷贝。不同主机上虚拟机的数据共享,不需要经过虚拟机的网络栈协议,实现了数据共享的高效性。

附图说明

[0024] 图1为本发明一种实施方案的简易系统结构示意图;
[0025] 图2为本发明初始阶段存储组织示意图;
[0026] 图3为本发明的通信结构的示意图;
[0027] 图4是应用层发送指令到虚拟设备层的示意图;
[0028] 图5为本发明协议执行流程说明图;协议执行流程包括数据页请求流程,锁申请流程,锁释放流程;
[0029] 图6是虚拟机服务模块的锁请求处理流程;
[0030] 图7是共享存储页状态在数据页面动态迁移过程中的状态转换示意图;
[0031] 图8所示为系统在初始化阶段构建应用层进程编号和虚拟机编号的映射表的示意图。

具体实施方式

[0032] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0033] 本发明提供了一种面向虚拟集群的共享存储系统,所述共享存储系统由两台网络互连的物理主机组成,所述物理主机中包括多个虚拟机、共享存储空间和虚拟机服务模块;所述虚拟机包括虚拟设备、设备驱动模块和用户编程接口模块;所述虚拟机服务模块包括虚拟机监控模块、消息转发模块和系统锁管理模块;其中:
[0034] (1)所述物理主机中:
[0035] (1.1)所述虚拟机是由命令行启动的;(1.2)所述共享存储空间是posix语义的共享存储空间;(1.3)所述虚拟机服务模块,采用集中式管理方式监控物理机上虚拟机的启动和退出:当主机上的任一虚拟机启动时,虚拟机服务模块向新启动的虚拟机通告共享存储空间和虚拟机一个在主机上唯一的虚拟机编号,当有虚拟机退出时,虚拟机服务模块向其它虚拟机通告退出情况;所述虚拟机服务模块还用于集中管理整个系统协议的消息转发;所述虚拟机服务模块还用于负责和另一台主机上的虚拟机服务模块的通信以及和本地物理机上的虚拟机设备中通信模块的通信;所述虚拟机服务模块负责参与维护系统共享存储访问的一致性,包括更改共享存储的页状态,从共享存储空间读出请求页,向共享存储空间写入请求页;其中一台主机上的虚拟机服务模块同时还负责管理系统的锁,负责处理锁请求和锁释放消息;
[0036] (2)所述虚拟机中:
[0037] (2.1)所述虚拟设备是由软件模拟的虚拟设备,包括共享存储映射模块、寄存器模块、通信模块和同步模块;(2.2)所述设备驱动模块用于驱动虚拟设备;(2.3)所述用户编程接口模块用于为用户提供一个统一共享存储空间的访问接口,访问接口通过对虚拟设备寄存器的读写操作来传递应用层的访问请求,该编程接口实现了一种基于锁的编程语义;
[0038] (3)所述虚拟设备中:
[0039] (3.1)所述共享存储映射模块用于将主机上监控模块提供的共享存储空间映射至虚拟设备的存储空间,供上层应用程序使用;(3.2)所述寄存器模块用于探测应用层通过编程接口发送的请求,主要包括应对系统的初始化参数设置和读取请求,对共享存储空间的访问请求,锁释放和锁申请请求;(3.3)所述通信模块负责与主机上的虚拟机服务模块的通信流程,用于接收和发送系统消息,所述通信模块还负责处理寄存器模块探测到的来自应用层的消息的处理以及负责来自主机上虚拟机服务模块的消息的处理,保证对共享存储访问的一致性和正确性;(3.4)所述同步模块负责系统的同步机制,所述同步机制包括异步中断机制和全局等待机制。
[0040] 如图1所示为本发明一种实施方案的简易系统示意图。共享存储系统由两个主机组成,分别标记为主机A 7和主机B 10,两台主机通过网络连接起来。
[0041] 本实施例的主机A 7和主机B 10上各两台虚拟机;本实施例的主机A 7和主机B 10共同提供共享存储空间,主机A 7提供低地址共享存储空间6,主机B 10提供高地址共享存储空间9;主机A 7上启动虚拟机服务模块11,虚拟机服务模块11负责集中式管理本主机上所有虚拟机,负责消息转发,负责维护共享一致性,负责锁管理。主机B 10上启动虚拟机服务模块12,虚拟机模块12无需负责锁管理。
[0042] 本实施例的虚拟机5的组成部分包括:虚拟设备4,处于内核模块的设备驱动3,供用户调用的应用程序接口2以及运行在应用层的云计算程序1。特别说明,所有虚拟机都具有上述组件。
[0043] 图2为系统在初始阶段存储组织示意图。系统的整体的存储空间是由主机A 23和主机B 27共同提供的。主机A 23上的共享存储空间22和主机B 27上的共享存储空间26大小是一样的,也就是整个系统的共享存储空间的大小,但是它们的共享页状态不一样。共享页状态不但在初始阶段不同,而且当图1中的应用层1对共享存储进行读写操作后,共享存储空间22和共享存储空间26的页状态会发生相应的变化,图6具体阐明了共享页的状态转换过程。
[0044] 所述两台主机的组织方式均采用全地址本地缓存,避免页面替换引起的系统性能震荡。所述共享存储组织在逻辑上,主机A 23上的虚拟机21和主机B 27上的虚拟机25都存储了所有的共享页面,共享页没有固定的宿主结点。所述存储组织既可以避免页面替换处理,减少系统的通信量,防止系统震荡情况也可以保证共享存储空间地址对所有虚拟机都是一致的,减少地址转换带来的开销。
[0045] 图3为系统通信结构示意图。所述系统通信结构中涉及到两种组件,一种是虚拟机设备,包括主机A 35上的虚拟机设备31和主机B 35上的虚拟设备36。另一种是虚拟机服务模块,包括主机A 34上的虚拟机服务模块32和主机B 35上的虚拟机服务模块33。由于虚拟机服务模块采用集中式模式管理本地主机上的所有虚拟机,所有虚拟机的消息必须经过虚拟机服务模块集中转发和处理。虚拟机设备31和虚拟设备36主要负责发起访问请求和处理请求回复,维护共享信息。虚拟机服务模块32和虚拟机服务模块33在所述通信结构中主要负责转发消息和处理消息。例如,主机A 34上的虚拟设备发起请求某个数据页,该请求消息首先会被发送到主机A 34上的虚拟机设备模块32,由它来负责集中管理,直接处理或者进行转发。同一主机上的虚拟设备和虚拟机服务模块之间的通信属于本地进程间的通信,无需通过网络。虚拟机服务模块32和虚拟机服务模块33之间地图通信需要经过网络。所述系统通信结构是图7所示的协议执行流程的基础。
[0046] 图4为本发明中虚拟设备层探测应用层请求的过程示意图。所述虚拟设备中的寄存器模块采用异步探测模式,能及时探测到应用层的相关请求,同时不影响虚拟机的性能。图4中的应用编程接口41用于应用层和虚拟设备层之间的交互。这个探测过程具有如下步骤:
[0047] <4-1>应用层调用应用编程接口41;
[0048] <4-2>应用编程向设备的寄存器文件42进行读写操作;
[0049] <4-3>设备驱动43将寄存器文件的读写操作转换成对虚拟设备寄存器的读写操作;
[0050] <4-4>虚拟设备44探测到寄存器的读写操作,触发对应的处理流程,对应的处理流程如图5所示。
[0051] 图5用于阐明所述面向虚拟集群的共享存储系统的数据迁移流程,锁申请流程,锁释放流程。
[0052] <5-1>当图1中的应用层访问试图访问无效页面时,就会触发数据迁移流程,主要步骤如下:
[0053] P1:表示虚拟机设备53因访问页而引发的失效,发起读/写页请求,该请求会转发至主机B的虚拟服务模块52;
[0054] P2:表示本机B的虚拟服务模块52将所述请求转发至主机A上的虚拟服务模块51。
[0055] P3:表示主机A上的虚拟服务模块51接收到读/写页请求。虚拟服务模块51更改相应的页状态,如果是读页请求,则将页状态改为共享,如果是写页请求则将页状态改为无效。然后发送读/写请求回复消息,该消息携带对应页的最新数据。该消息被转发至主机B上的虚拟服务模块;
[0056] P4:表示主机B接收到读/写请求回复时进行的处理。先将页数据拷贝到对应的地址,然后更改页状态。如果是读请求回复消息,则将页状态改为共享,如果是写请求回复消息,则将页状态改为独占,并且为主机B上的其它虚拟机记录该页的状态已更改。最后将该消息截断页数据后发送给目的虚拟机设备53;
[0057] P5:表示虚拟机设备53接收到读/写请求回复消失进行的处理。如果是读请求回复消息,则将页权限设置为可读,如果是写请求回复消息则将页权限设置成可读,可写;
[0058] 特别说明,上述<5-1>说明的数据迁移流程都是由主机B上的虚拟机触发的,如果是主机A上触发的流程,则该数据迁移流程是对称的。
[0059] <5-2>如图1中的应用层1访问共享存储空间前,会发起读/写锁请求,该请求经过图4所示的传递过程,最后会被虚拟机设备层检测到,触发了锁申请流程:
[0060] P1:表示虚拟机设备53探测到应用层的锁申请。虚拟机设备53向向主机B上的虚拟机服务模块52发送该消息;
[0061] P2:表示虚拟机服务模块52接收到锁申请的处理过程。因为锁管理器不在主机B上,所以将该消息转发至主机A;
[0062] P3:表示主机A上的虚拟机服务模块51接收到锁请求,依据锁的类型进行处理。P3的锁处理过程如图7所示;
[0063] P4:表示主机B上的虚拟机服务模块52接收到锁请求回复消息时的处理。首先将消息中携带的页ID对应状态修改为无效,因为这些页已经被另一主机修改了。并为主机B上的所有虚拟机记录该页状态已被更改。然后向目的虚拟设备发送锁申请回复消息,该消息附带目的虚拟机距上次获取锁到此刻状态已被更改的页;
[0064] P5:表示虚拟机设备53接收到锁申请回复的处理。首先查看消息附带状态已变更的页,并根据它的最新状态设置相应的访问权限。
[0065] 特别说明,上述<5-2>锁申请流程说明的是主机B上的某个虚拟机发起锁请求。如果是主机A上的某个虚拟机发起锁请求,情况类似,唯一不同的是,中间少了一次转发过程。因为锁管理器在主机A上,不需要转发。
[0066] <5-3>如图1中的应用层1访问共享存储空间结束后,应当进行锁释放,锁释放指令经过图4所示的过程后会被虚拟机设备层53检测到。如果是读锁释放,则将该消息转发到锁管理器即可,不需要其他额外消息和处理过程。接下来说明本发明的写锁释放流程:
[0067] P1:表示虚拟机设备53检测到写锁释放时,向虚拟机服务模块52发送锁释放消息,该消息中附带该虚拟设备记录的那些已被该虚拟设备修改的共享页,记为write-notice;
[0068] P2:表示主机B上虚拟机服务模块52接收到锁释放消息时,为主机B上其它虚拟机记录这些页状态已经修改,表明这些页已经从共享变成了独占。最后发送锁释放消息至主机A;
[0069] P3:表示主机A上的虚拟机服务模块51接收到锁释放消息时,将write-notice页加入相应的write-notice集合中。然后查看锁等待队列中是否有请求,如果有,则触发锁释放处理,如果没有,则将锁状态设置为空闲。锁释放处理流程和锁申请流程<5-2>中的P3部分是一样的。如果锁释放处理被触发,则对应的有锁申请流程中P4,P5过程;
[0070] 在锁释放流程<5-3>的P3过程中,当锁等待队列中有多个请求时,系统优先回复和锁释放消息来自同一主机的请求。因为锁释放消息的源主机上的数据在此刻一定是最新的,集中将该主机上的写操作执行完毕,再由另一主机执行写操作,这样可以避免页面在两个主机之间多次无谓的迁移。为了实现这个优化,系统维护的锁等待队列是由两个队列组成的,一个存放来自主机A的锁请求Qa,另一个来及主机B的锁请求Qb。
[0071] 图6为本发明中所述虚拟机服务模块的锁请求处理流程。所述虚拟机服务模块中的锁管理模块,当处理锁释放消息时,采用最近释放原则,即如果锁请求的源虚拟机和最近释放锁的虚拟机在同一主机上,那么该锁请求可优先获取锁,有效避免共享页面在两台主机之间无谓的迁移,所述虚拟机服务模块中的锁管理模块,采用读锁写锁分离机制,实现共享存储空间的串行写和并行读。系统的锁类型分为读锁和写锁,系统能够同时满足多个读锁请求,在任一时刻只能满足一个写锁请求。从而实现系统的并行读和串行写。主要步骤如下。
[0072] 步骤S601:接收到锁申请请求。
[0073] 步骤S602:如果是读锁请求,转步骤S603;如何是写锁请求,转步骤S604。
[0074] 步骤S603:发送锁申请回复消息,该消息中同样的该消息中携带被另一主机修改的页ID。
[0075] 步骤S604:如果写锁空闲,转步骤S606;如果写锁处于忙状态,转[0076] 步骤S605。
[0077] 步骤S605:将该锁请求消息放入等待队列。
[0078] 步骤S606:设置写锁为忙状态,转步骤S603。
[0079] 图7说明了所述面向虚拟集群的共享存储系统中共享页状态之间的转换,以及虚拟机获知状态更改的时刻。其中Ti表示一个状态转换过程。
[0080] T1:表示页状态从独占62转换成无效63,该转变过程由虚拟机服务模块。当虚拟机服务模块接收到写共享页请求时时会触发该转变。虚拟机设备获知该转变是在它得到锁请求回复后。
[0081] T2:表示页面从状态无效63转换成独占62,该转变过程由虚拟机服务模块控制。当虚拟机服务模块接收到写页请求回复消失时会触发该转变。虚拟机设备可在两种情况下获知该变换,锁申请回复或者收到写页请求回复消息。T2的发生一定是写操作导致的,因此此时只有一个进程对共享区间进行写操作。除了发起写页请求的那个虚拟机是在接收到写页请求回复时得知该变换,其它虚拟机是在访问前的获取锁得知该变换。
[0082] T3:表示页面状态从共享61转换成无效63,该转变过程由虚拟机服务模块控制,当虚拟机服务模块接收到锁申请回复时,如果锁申请回复消息中附带write-notice则会导致该状态的转换。虚拟机设备获知该状态的变换在获取锁时。
[0083] T4:表示页面状态从无效63转换成共享61。该状态由虚拟机服务模块控制控制,当虚拟机服务模块控制接收到读页请求回复消息时,触发该转变。虚拟设备在三种情况下可以获知该转变。获取锁回复,收到读页请求回复以及读页失效。前两种情况是显而易见的,第三种情况跟系统的并发读请求有关。例如,在某一时刻,主机B上的某页处于无效状态,并且主机上的虚拟机v1和v2同时对该页发起读访问。在v1和v2获取锁以后,v1和v2对该页的访问权限都是不可读写。v1率先取回了该页的最新数据,该页现在的状态是共享,那么当v2读页失效时,它会查看该页的状态,获知该页的状态已经是共享,直接更改访问权限即可,不必再次触发读页请求。
[0084] T5:表示页面状态从独占62转换成共享61,该转变由虚拟机服务模块控制控制控制,当虚拟机服务模块控制控制接收到读页请求时会触发该变换。虚拟设备获知该变换在获取锁时刻。这个过程对于读访问可能会延迟获知,这意味着在进行读访问时,虚拟设备并不知道T5的发生。但这并不影响系统的正确性,因为无论是独占还是共享对读访问而言是没有影响的。对于写访问,该过程一定是及时获知的,因为写访问一定是在读访问结束后进行的,所以在写访问之前的锁申请回复时,就得知T5的转变。
[0085] T6:表示页面状态从共享61转换成独占62,该转变由写访问失效的虚拟设备控制,当对某个处于共享状态的页面进行写操作时会触发T6。虚拟机获取该转变是在锁申请回复时。
[0086] T7:表示页面状态从无效63转换成未决64,该过程由读访问失效的虚拟设备控制,这个转变过程发生在对某个无效共享页进行读请求时,到接收到读访问请求回复时一直是这个状态。其它虚拟机获知这个状态的转变是在它页刚好对该页进行了读访问,然后一直等待直到状态变成共享。
[0087] T8:表示页面状态从未决64转换成共享61,该过程由虚拟机服务模块控制控制,当它接收到读页请求时会触发T8。
[0088] 实际上T7和T8组成了T4,由于T7和T8维持很短暂,所以虚拟设备只有在特殊情况下才会刚好获知T7。
[0089] 所述虚拟设备中包含有应用层进程编号和虚拟机编号的映射表,将应用层进程的编号和对应的虚拟机编号联系起来,从而为应用层屏蔽了底层的具体消息转发流程。图8所示为系统在初始化阶段构建应用层进程编号和虚拟机编号的映射表的示意图。图中应用层的进程3个进程81、82、83。进程编号是通过读取配置文件获取的。图中有3台虚拟机84、85、86。虚拟机编号的是由虚拟机服务模块分配的。当应用进程进入初始化阶段,向设备层传递进程号,设备层接收到进程号后,在映射表中添加对应表项,并且向其他虚拟机设备广播该表项。其他虚拟机收到广播的映射表项后,将该表项记录到本地映射表中。最后,所有设备都成功构建了进程编号和虚拟机编号的映射表。当设备层探测到来自应用层的消息时,通过查找映射表项,转发消息。从而为应用层屏蔽了底层的具体消息转发流程。