CN116401004A - 数据共享方法、设备、***及存储介质 - Google Patents

数据共享方法、设备、***及存储介质 Download PDF

Info

Publication number
CN116401004A
CN116401004A CN202310219577.0A CN202310219577A CN116401004A CN 116401004 A CN116401004 A CN 116401004A CN 202310219577 A CN202310219577 A CN 202310219577A CN 116401004 A CN116401004 A CN 116401004A
Authority
CN
China
Prior art keywords
data
shared
slot
shared data
virtual machines
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310219577.0A
Other languages
English (en)
Inventor
向凌风
陆庆达
吴结生
王磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Alibaba China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN202310219577.0A priority Critical patent/CN116401004A/zh
Publication of CN116401004A publication Critical patent/CN116401004A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/176Support for shared access to files; File sharing support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供一种数据共享方法、设备、***及存储介质。在本申请实施例中,在主机上为具有数据共享关系的虚拟机分配共享内存窗口,通过本地的共享内存窗口存储多个虚拟机之间的共享数据,实现共享数据的本地访问,缩短共享数据的访问路径,提高共享数据的访问性能;另外,虚拟机对共享内存窗口可读不可写,并在主机上增设目标进程模块,共享数据的写入由目标进程模块统一负责,可避免多个虚拟机同时对共享内存窗口进行写操作可能造成的数据错误问题,而且共享数据的任何修改可被各虚拟机立即观察到,对各虚拟机来说能够做到共享数据的一致性,而且无需经过网络传输进行同步,可进一步提高共享数据的访问性能。

Description

数据共享方法、设备、***及存储介质
技术领域
本申请涉及云存储技术领域,尤其涉及一种数据共享方法、设备、***及存储介质。
背景技术
在云计算场景中,为了减小数据丢失的风险,通过将数据分散到不同存储节点上进行存储,并通过文件***对这些数据进行管理,以提供可靠和高效的数据访问。在文件***中,将数据划分为文件和元数据,元数据是对文件进行相关描述的***数据,诸如访问权限、文件拥有者以及文件数据的分布信息等。用户需要操作一个文件,需要访问它的元数据,确定文件的位置或相关属性进而完成对应的文件操作。
在云计算场景中,虚拟机(Virtual Machine,VM)之间共享一些数据,例如文件的元数据,这些元数据存储在远端服务器上,VM需要到远端服务器获取元数据,当VM对元数据进行了修改,这种修改需要写回远端服务器,再通过远端服务器向其它VM进行同步,这可以保证元数据的一致性但会导致元数据的访问性能下降。如何在VM之间保证共享数据的一致性,又能保证共享数据的访问性能是亟需解决的技术问题。
发明内容
本申请的多个方面提供一种数据共享方法、设备、***及存储介质,用以在VM之间保证共享数据一致性的情况下,缩短共享数据的访问路径,提高共享数据的访问性能。
第一方面,本申请实施例还提供一种数据共享方法,应用于数据共享***,所述数据共享***包括部署在同一主机上的目标进程模块和具有数据共享关系的多个虚拟机,所述方法包括:所述目标进程模块从所述主机的物理空间中分配共享内存窗口,所述共享内存窗口用于存储所述多个虚拟机之间的共享数据,且面向所述多个虚拟机具有只读属性;所述多个虚拟机从所述共享内存窗口中读取所需的第一共享数据,并根据所述第一共享数据执行相应操作;所述目标进程模块将第二共享数据写入所述共享内存窗口中,以供所述多个虚拟机共享所述第二共享数据。
第二方面,本申请实施例提供一种主机,所述主机上部署有目标进程模块和具有数据共享关系的多个虚拟机,所述主机包括:存储器和处理器;所述存储器,用于存储所述目标进程模块和所述多个虚拟机对应的程序代码;所述处理器与所述存储器耦合,用于执行所述目标进程模块对应的程序代码,以用于实现本申请第一方面提供的数据共享方法中的步骤。
第三方面,本申请实施例提供一种数据共享***,部署在同一主机上的目标进程模块和具有数据共享关系的多个虚拟机;所述目标进程模块,用于实现第一方面提供的方法中所述目标进程模块执行的步骤,所述多个虚拟机,用于实现第一方面提供的方法中所述虚拟机执行的步骤。
第四方面,本申请实施例还提供一种文件元数据共享***,包括:部署在同一主机上的目标进程模块、主机文件***以及具有数据共享关系的多个虚拟机,所述多个虚拟机中部署有客户文件***;所述目标进程模块,用于从所述主机的物理空间中分配共享内存窗口,所述共享内存窗口用于存储所述多个虚拟机之间共享的文件元数据,且面向所述多个虚拟机具有只读属性;所述客户文件***,用于响应其所属虚拟机中上层应用发起的文件元数据读取操作,从所述共享内存窗口中读取第一文件元数据并返回给所述上层应用;所述目标进程模块还用于:响应所述主机文件***发起的文件元数据数据写入操作,将第二文件元数据写入所述共享内存窗口中,以供所述多个虚拟机共享所述第二文件元数据。
第五方面,本申请实施例提供一种存储有计算机程序的计算机可读存储介质,当所述计算机程序被处理器执行时,致使所述处理器能够实现本申请第一方面提供的数据共享方法中的步骤。
在本申请实施例中,针对部署在同一主机上具有数据共享关系的多个虚拟机,在主机上为这些虚拟机分配共享内存窗口,通过本地的共享内存窗口存储多个虚拟机之间的共享数据,实现共享数据的本地访问,缩短共享数据的访问路径,提高共享数据的访问性能;另外,共享内存窗口对这些虚拟机具有只读属性,即虚拟机对共享内存窗口可读不可写,并在主机上增设目标进程模块,共享数据的写入由目标进程模块统一负责,可避免多个虚拟机同时对共享内存窗口进行写操作可能造成的数据错误问题,而且基于共享内存窗口,共享数据的任何修改可被各虚拟机立即观察到,对各虚拟机来说能够做到共享数据的一致性,而且共享数据的一致性的实现无需经过网络传输在不同VM之间进行同步,可进一步提高共享数据的访问性能。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的一种数据共享***的结构示意图;
图2为本申请实施例提供的共享内存窗口被划分为多个内存区域的使用方式示意图;
图3为本申请实施例提供的内存区域被换分为多个槽位组和槽位的使用方式示意图;
图4为本申请实施例提供的内存区域包含槽位组、槽位以及位图区的使用方式示意图;
图5为本申请实施例提供的一种用于文件元数据的数据共享***的结构示意图;
图6为本申请实施例提供的一种数据共享方法的流程示意图;
图7a为本申请实施例提供的另一种数据共享方法的流程示意图;
图7b为本申请实施例提供的又一种数据共享方法的流程示意图;
图8为本申请实施例提供的一种数据共享装置的结构示意图;
图9为本申请实施例提供的另一种数据共享装置的结构示意图;
图10为本申请实施例提供的一种主机的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
在云计算场景中,云服务商面向租户提供各种云计算资源,租户可以在云服务商提供的云计算资源上购买或部署自己的虚拟机,通过虚拟机承载自己的各种应用或服务,这些应用或服务在运行过程中产生的各种数据被分散存储在不同的存储节点上。从虚拟机的角度来看,可能需要进行数据共享,但是现有数据被分散在不同存储节点上,共享数据的访问路径较长,而且为了保证共享数据的一致性,不同虚拟机之间还需要对共享数据进行同步,导致共享数据的访问性能较差。云计算场景面临着如何在共享数据的访问性能和一致性之间进行均衡的技术问题。
针对上述技术问题,在本申请实施例中,以主机为单位提供解决方案,针对部署在同一主机上具有数据共享关系的多个虚拟机,在主机上为这些虚拟机分配共享内存窗口,通过本地的共享内存窗口存储多个虚拟机之间的共享数据,实现共享数据的本地访问,缩短共享数据的访问路径,提高共享数据的访问性能;与此同时,共享内存窗口对这些虚拟机具有只读属性,即虚拟机对共享内存窗口可读不可写,并在主机上增设目标进程模块,共享数据的写入由目标进程模块统一负责,可避免多个虚拟机同时对共享内存窗口进行写操作可能造成的数据错误问题,而且基于共享内存窗口,共享数据的任何修改可被各虚拟机立即观察到,对各虚拟机来说能够做到共享数据的一致性,再者共享数据的一致性的实现无需经过网络传输在不同VM之间进行同步,可进一步提高共享数据的访问性能。
进一步,在提高共享数据的访问性能的基础上,可提高基于共享数据的后续操作的效率,降低后续操作的时延。尤其是,在共享数据是文件元数据的情况下,在缩短文件元数据的访问路径,提高文件元数据的访问速度的情况下,有利于提高基于文件元数据的文件操作的效率,降低文件操作的时延。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1为本申请实施例提供的一种数据共享***100的结构示意图。如图1所示,该数据共享***100包括:部署在同一主机10上的目标进程模块11和具有数据共享关系的多个虚拟机12。在本实施例中,主机10可以是一台或多台,在图1中,以一台主机10为例进行图示。在主机10为多台的情况下,至少部分主机10上部署有目标进程模块11和具有数据共享关系的多个虚拟机12。本申请实施例重点关注部署有目标进程模块11和具有数据共享关系的多个虚拟机12的主机10。本实施例的主机10可以是任何具有存储、计算和通信能力的物理设备,例如可以是传统服务器、服务器阵列或服务器集群等服务器设备,还可以是手机、笔记本电脑、台式电脑等各种终端设备,还可以是各种基站、网关设备等网络设备。
在本实施例中,虚拟机12之间的数据共享关系是指虚拟机12之间能够进行数据共享,简单来说,虚拟机12之间能够使用相同的数据,这些可被虚拟机12共同使用的数据简称为共享数据。从数据共享关系的角度来看,具有数据共享关系的虚拟机12可能分布在同一主机10上,也可能分布不同主机10上,对此不做限定。本实施例重点关注部署在同一主机10上具有数据共享关系的虚拟机之间的数据共享过程,对于跨主机的虚拟机之间的数据共享过程对此不做关注,例如对于跨主机的虚拟机之间可以使用标准的消息传递接口(MPI)通信机制,以消息传递或远端内存访问等方式进行相互之间的数据操作。对于部署在同一主机10上的虚拟机12,彼此之间是否形成数据共享关系可根据应用需求灵活确定。在一些应用场景,同一租户可以部署多个虚拟机,多个虚拟机提供相同服务,则对于部署在同一主机10上且属于同一租户的多个虚拟机12之间形成数据共享关系。当然,从租户的角度来看,其部署的虚拟机可以分布在不同主机上,且这些分布在不同主机之上的虚拟机之间也可以形成数据共享关系,对此不做关注。在另一些应用场景中,不同租户之间可能满足用户访问控制策略,例如租户A的数据被授权给另一租户B,这种情况下跨租户的虚拟机12之间也可以形成数据共享关系。
在本实施例中,并不限定主机10上存在的数据共享关系的数量,也不限定具有数据共享关系的虚拟机12的数量,具体可视主机10的物理资源和处理能力而定。例如,对于同一主机10,其上可以存在一组或多组具有数据共享关系的虚拟机12,不同组的虚拟机12具有不同的数据共享关系,例如同一主机10上可以同时存在第一租户的多个虚拟机12和第二租户的多个虚拟机12,每个租户的虚拟机形成一种数据共享关系。对具有同一数据共享关系的虚拟机12的数量,可以是2个、3个、5个或10个等,对此也不做限定。另外,不同主机10上存在的数据共享关系的数量以及具有数据共享关系的虚拟机12的数量可以相同,也可以不同,对此均不做限定。
在本实施例中,如图1所示,以同一主机10为单位,对部署在同一主机10上部署的具有同一种数据共享关系的多个虚拟机12,在该主机10上为这些虚拟机分配共享内存窗口(shared memory window),通过本地的共享内存窗口存储多个虚拟机之间的共享数据,实现共享数据的本地访问,缩短共享数据的访问路径,提高共享数据的访问性能。进一步,在主机10上增设目标进程模块11,由目标进程模块11对共享内存窗口进程维护和管理。在本实施例中,目标进程模块11可以是运行在主机10上的进程,例如守护进程(daemonprocess),但并不限于此。其中,可由目标进程模块11从主机10的物理空间中为具有同一种数据共享关系的多个虚拟机12分配共享内存窗口,以用于存储多个虚拟机12之间的共享数据。
进一步,为了避免多个虚拟机12同时对共享内存窗口进行写操作造成共享数据的错误问题,在进行共享内存窗口分配的过程中,对共享内存窗口的读写属性进行了约束,共享内存窗口面向多个虚拟机12具有只读属性,即对多个虚拟机12来说,只能对共享内存窗口进行读操作,而不能对共享内存窗口进行写操作,简单来说,共享内存窗口对虚拟机12实现了只能读不可写的约束,由于虚拟机不能对共享内存窗口进行写操作,也就解决了多个虚拟机12同时对共享内存窗口进行写操作造成共享数据的错误问题。
但是,虚拟机12之间的共享数据是动态变化的,当新的共享数据产生的时候,需要写入共享内存窗口中,以便在多个虚拟机之间进行共享。在本申请实施例中,由目标进程模块11负责向共享内存窗口中写入共享数据,这样,能够确保新的共享数据能够及时被写入共享内存窗口,与此同时还能解决多个虚拟机12同时对共享内存窗口进行写操作造成共享数据的错误问题。
基于上述,对任一虚拟机12来说,在需要共享内存窗口中的共享数据时,可以直接从共享内存窗口中读取所需的共享数据,并根据所读取的共享数据执行相应操作。另外,在多个虚拟机之间产生需要写入共享内存窗口的新的共享数据的情况下,由目标进程模块11将该新的共享数据写入共享内存窗口中,以供多个虚拟机12共享该新的共享数据。为了便于描述和区分,将虚拟机12需要从共享内存窗口中读取的共享数据记为第一共享数据,对不同虚拟机12来说,需要读取的第一共享数据可能是不同的;将需要写入共享内存窗口中的共享数据记为第二共享数据。其中,第二共享数据的产生端可以将第二共享数据提供给目标进程模块11,例如可以通过但不限于:远程过程调用(Remote Procedure Call,RPC)的方式将第二共享数据提供给目标进程模块11,以供目标进程模块11将第二共享数据写入共享内存窗口中。其中,根据应用场景的不同,第二共享数据的产生端会有所不同,以图5所示应用场景为例,第二共享数据具体为第二文件元数据,其对应的产生端为主机文件***。
在此说明,在本申请实施例中,并不限定虚拟机12从共享内存窗口中读取第一共享数据与目标进程模块11向共享内存窗口中写入第二共享数据的先后顺序。如果虚拟机12需要第一共享数据的需求在前,则可以先从共享内存窗口中读取第一共享数据;然后,在产生第二共享数据的情况下,再由目标进程模块11将第二共享数据写入共享内存窗口。其中,第二共享数据的产生可以与根据第一共享数据执行相应操作的过程或结果有关,也可以与根据第一共享数据执行相应操作的过程和结果无关。如果先产生第二共享数据,由目标进程模块11先将第二共享数据写入共享内存窗口中;然后,虚拟机需要第一共享数据时,可以从共享内存窗口中读取第一共享数据;其中,第一共享数据可以是先行写入的第二共享数据,也可以是共享内存窗口中除第二共享数据之外的其它共享数据。当然,虚拟机12从共享内存窗口中读取第一共享数据与目标进程模块11向共享内存窗口中写入第二共享数据也可以并行执行。
另外,根据应用场景的不同,具有数据共享关系的虚拟机12之间的共享数据会有所不同,相应地,虚拟机12需要第一共享数据的场景和方式、产生第二共享数据的场景和方式以及根据第一共享数据所执行的相应操作也会有所不同,对此不做限定。例如,以虚拟化环境中的文件管理场景为例,各虚拟机12之间的共享数据可以是文件元数据;文件元数据是用于对文件进行属性描述的数据,例如包括但不限于文件的类型、文件的所有者、文件的大小、文件最近一次修改的时间等等;相应地,虚拟机在打开、删除、移动或重命名某个文件时,都需要该文件的元数据,并可发起文件元数据读取操作,以请求从共享内存窗口中读取该文件元数据,在成功读取到该文件元数据的情况下,可以根据所读取的文件元数据执行对应的文件访问操作,例如打开、删除、移动或重命名对应的文件。相应地,在执行文件访问操作的过程中,随着对文件的访问,文件的属性信息会发生相应变化,因此会产生新的文件元数据,于是可以发起文件元数据写入操作,由目标进程模块11感知该文件元数据写入操作,并将新的文件元数据写入共享内存窗口中。
无论是何种共享数据的应用场景,在本实施例中,以主机为单位提供解决方案,针对部署在同一主机上具有数据共享关系的多个虚拟机,在主机上为这些虚拟机分配共享内存窗口,通过本地的共享内存窗口存储多个虚拟机之间的共享数据,实现共享数据的本地访问,缩短共享数据的访问路径,提高共享数据的访问性能;与此同时,共享内存窗口对这些虚拟机具有只读属性,即虚拟机对共享内存窗口可读不可写,并在主机上增设目标进程模块,共享数据的写入由目标进程模块统一负责,可避免多个虚拟机同时对共享内存窗口进行写操作可能造成的数据错误问题,而且基于共享内存窗口,共享数据的任何修改可被各虚拟机立即观察到,对各虚拟机来说能够做到共享数据的一致性,再者共享数据的一致性的实现无需经过网络传输在不同VM之间进行同步,可进一步提高共享数据的访问性能。
在本申请实施例中,并不限定目标进程模块11为具有数据共享关系的多个虚拟机12分配共享内存窗口的实现方式。在本实施例中,共享内存窗口的分配包括共享内存窗口的申请和共享内存窗口的暴露。关于共享内存窗口的申请:目标进程模块11可以调用内存分配命令,向主机10的操作***(Operating System,OS)申请共享内存窗口。例如,目标进程模块11作为一个正常运行的进程,它可以响应启动虚拟机的指令,确定需要为这些具有共享数据关系的虚拟机申请共享内存窗口,然后,通过一些标准的内核访问接口,例如可移植操作***接口(Portable Operating System Interface,POSIX)的应用程序接口(Application Programming Interface,API)访问主机10的OS,向OS的相关单元申请共享内存窗口,由OS的相关单元从主机10的物理空间中为多个虚拟机12申请具有只读属性的共享内存窗口,也就是说,OS提供的API接口可以设置共享内存窗口的访问权限为只读,如果在访问权限为只读的共享内存窗口中进行写操作会报错,导致虚拟机崩溃(crash),通过这种报错机制约束虚拟机对共享内存窗口只读不写。在本实施例中,并不限定共享内存窗口的大小,可以是固定大小,也可以由目标进程模块11确定共享内存窗口的大小。
关于共享内存窗口的暴露:在主机10上还部署有为多个虚拟机12提供虚拟化服务的虚拟化管理模块,在图1中未示出,虚拟化管理模块负责虚拟机12的创建,在创建虚拟机12的过程中为虚拟机12虚拟化所需的硬件资源并预留一定大小的物理地址空间,该物理地址空间作为外设组件互联标准(Peripheral Component Interconnect,PCI)设备挂载在虚拟机上,为了便于虚拟机在启动后能够访问该物理地址空间,在PCI设备配置空间中增加一个基地址寄存器(Base Address Register,BAR),将该物理地址空间的地址设置在BAR中。在本实施例中,预留的物理地址空间用于供虚拟机缓存共享数据。在本实施例中,目标进程模块11在申请到共享内存窗口的情况下,还将共享内存窗口的物理地址提供给虚拟机管理模块;由虚拟化管理模块在多个虚拟机启动时,根据共享内存窗口的物理地址,将多个虚拟机各自预留的物理地址空间映射为共享内存窗口,使得虚拟机能够直接访问共享内存窗口,进而从共享内存窗口中读取所需的第一共享数据,完成对共享内存窗口的暴露。进一步,通过在预留的物理地址空间的头部区域预定很小的空间,用来存放共享内存窗口的描述信息,该描述信息用于描述共享内存窗口中存储了哪些共享数据,这些共享数据在共享内存窗口中的位置偏移,例如在共享内存窗口中的地址偏移量D1到D2是某个可读的共享数据,以便于虚拟机能够从共享内存窗口中读取相应共享数据,D1和D2表示共享内存窗口中的地址偏移量。
以共享数据是下文中提到的文件元数据为例,在文件元数据中包括索引节点(inode)数据、索引节点的牺牲缓存(inode victim cache)数据和目录项(dentry)数据为例,则共享内存窗口的描述信息可以包括该共享内存窗口里面地址偏移量从A1(如0x00000000 00000000)到A3(如0x0000 0000 3F00 0000)是索引节点数据,地址偏移量从B1到B3是索引节点的牺牲缓存数据,地址偏移量从C1到C3是目录项数据。进一步,在索引节点数据包括槽位组和位图区的情况下,上述描述信息中还可以具体包括共享内存窗口里面地址偏移量从A1到A2是索引节点数据中可读的数据,地址偏移量从A2到A3是索引节点数据中的位图区,inode victim和dentry同理。其中,A1、A2、A3、B1、B3、C1和C3等表示共享内存空间中的地址偏移量,例如0x0000 0000 0000 0000和0x0000 0000 3F00 0000是用16进制,64位整数表示的地址偏移量,是对地址偏移量A1和地址偏移量A2的示例。关于各类文件元数据、槽位组和位图区等描述可参见下述实施例,在此暂不详述。
在本申请实施例中,并不限定虚拟化管理模块的实现方式,例如可以是但不限于:虚拟机监测器(hypervisor)或者是hypervisor中的快速模拟器(Quick EMUlator,QEMU)和基于内核的虚拟机(Kernel-based Virtual Machine,KVM)的组合。其中,QEMU负责虚拟机的创建以及相关工作,KVM负责预留的物理地址空间到共享内存窗口的映射。
在本实施例中,并不限定对共享内存储窗口的使用方式。在一可选实施例中,具有数据共享关系的多个虚拟机之间的共享数据具有多种类型,基于此,可以按照共享数据的类型,将共享内存窗口划分为多个内存区域,不同内存区域用于存储不同类型的共享数据。如图2所示,为共享内存窗口被划分为多个内存区域的状态示意图。以共享数据是文件元数据为例,假设文件元数据包括索引节点数据,索引节点的牺牲缓存数据以及目录项数据三类元数据,则可以将共享内存窗口划分为三个内存区域,记为内存区域A、内存区域B和内存区域C,如图2所示。其中,内存区域A用于存储索引节点数据,内存区域B用于存储索引节点的牺牲缓存数据,内存区域C用于存储目录项数据。其中,索引节点数据是一种数据结构,表示相应的文件状态,索引节点数据中记录有文件名,文件版本号、文件大小,文件的访问权限,文件磁盘的位置,何时创建/修改,是文件还是目录等,索引节点数据是由索引节点编号(inode编号)索引的。目录项数据是一种内核数据结构,它负责将文件名映射到对应的inode编号,目录项数据中记录有文件名与inode编号的对应关系,以及其上一层级的inode编号(简称为父inode编号)。基于目录项数据,使得文件操作能够基于文件的inode编号,而不依赖于文件的存储路径。索引节点的牺牲缓存数据是指存储在牺牲缓存(victim cache)中的数据,牺牲缓存是一个相对较小的缓存空间,用于在索引节点数据必须从其内存区域中被替换时,存储被替换的索引节点数据,这样虚拟机可以通过索引节点的牺牲缓存数据和内存区域中的索引节点数据检查本地是否缓存有最新版本的文件数据。
在共享内存窗口被划分为多个内存区域的情况下,虚拟机需要从共享内存窗口中读取第一共享数据时,可以根据共享数据读取请求,确定第一共享数据对应的描述信息,该描述信息包括第一共享数据的类型和标识信息;根据第一共享数据的类型,从多个内存区域中确定与第一共享数据的类型适配的第一内存区域;根据第一共享数据的标识信息,从第一内存区域中读取第一共享数据。根据第一共享数据的类型的不同,第一内存区域也会有所不同。以第一共享数据是索引节点数据为例,第一共享数据的类型是指索引节点数据,而并非是目录项数据或索引节点的牺牲缓存数据,第一共享数据的标识信息是索引节点数据中的inode编号,相应地,第一内存区域是图2所示的内存区域A。以第一共享数据是索引节点的牺牲缓存数据为例,第一共享数据的类型是指索引节点的牺牲缓存数据,而并非是目录项数据或索引节点数据,第一共享数据的标识信息是索引节点的牺牲缓存数据中的inode编号,相应地,第一内存区域是图2所示的内存区域C。以第一共享数据是目录项数据为例,第一共享数据的类型是指目录项数据,而并非是索引节点数据或索引节点的牺牲缓存数据,第一共享数据的标识信息是目录项数据中的inode编号,相应地,第一内存区域是图2所示的内存区域B。
相应地,在共享内存窗口被划分为多个内存区域的情况下,目标进程模块11向共享内存窗口中写入第二共享数据时,可以根据共享数据写入请求,确定第二共享数据对应的描述信息,该描述信息包括第二共享数据的类型和标识信息;根据第二共享数据的类型,从多个内存区域中确定与第二共享数据的类型适配的第二内存区域;将第二共享数据写入第二内存区域中读取第二共享数据。根据第二共享数据的类型的不同,第二内存区域也会有所不同。以第二共享数据是索引节点数据为例,第二共享数据的类型是指索引节点数据,而并非是目录项数据或索引节点的牺牲缓存数据,第二共享数据的标识信息是索引节点数据中的inode编号,相应地,第二内存区域是图2所示的内存区域A。以第二共享数据是索引节点的牺牲缓存数据为例,第二共享数据的类型是指索引节点的牺牲缓存数据,而并非是目录项数据或索引节点数据,第二共享数据的标识信息是索引节点的牺牲缓存数据中的inode编号,相应地,第二内存区域是图2所示的内存区域C。以第二共享数据是目录项数据为例,第二共享数据的类型是指目录项数据,而并非是索引节点数据或索引节点的牺牲缓存数据,第二共享数据的标识信息是目录项数据中的inode编号,相应地,第二内存区域是图2所示的内存区域B。
进一步可选地,本实施例对多个内存区域的大小以及彼此之间的大小关系不做限定。以图2所示的内存区域A、内存区域B和内存区域C为例,考虑到索引节点数据相对较多,则可以配置内存区域A的大小例如为140字节,内存区域B的大小例如15个字节,内存区域C的大小例如50字节等。考虑到各个内存区域的大小是有限的,随着共享数据的不断产生,内存区域会溢出,本实施例中允许对各个内存区域中的共享数据进行替换操作。
进一步可选地,目标进程模块11在每个内存区域进行写操作时,为了提高写入效率,可以采用多线程对同一内存区域进行并行写入。但是,在并行写入的情况下,如果同时对同一位置进行写入就会发生错误,为了避免并行写入发生错误,在本实施例中,针对每个内存区域,进一步将其划分为多个槽位组(slot set),不同槽位组中存储不同的共享数据,不同槽位组之间允许并行写入,也就是同一时刻可以同时对多个槽位组进行写操作,由于是对不同槽位组中进行写操作,可以避免对同一位置同时进行写入造成的写入错误。进一步,每个槽位组包括多个槽位(slot),每个槽位是内存区域中的一小块存储空间,用于存储其所属内存区域对应类型下的一个共享数据。在本实施例中,并不限定内存区域包含的槽位组的数量,也不限定槽位组中包含的槽位数量,可根据应用需求灵活确定。如图3所示,以任一内存区域为例,将其划分为多个槽位组即set_0-set_N,每个槽位组包含4个槽位为例进行图示,N是大于等于1的自然数。
在本实施例中,在将内存区域划分为多个槽位组的情况下,可以采用哈希的方式,将内存区域中的共享数据分散到不同的槽位组中。进一步,可以对各共享数据的标识信息进行哈希计算,将相同哈希结果的共享数据存储在同一槽位组内,并建立槽位组与哈希结果之间的映射关系。基于此,虚拟机需要从共享内存窗口中读取第一共享数据时,可以从共享内存窗口中确定存储有第一共享数据的第一槽位;从第一槽位中读取第一共享数据。其中,第一槽位是第一内存区域中任一槽位组中的槽位,第一内存区域是与第一共享数据的类型适配的内存区域。具体地,可以根据共享数据读取请求,确定第一共享数据对应的描述信息,该描述信息中包括第一共享数据的类型和标识信息;根据第一共享数据的类型,从多个内存区域中确定第一内存区域;然后,根据第一共享数据的标识信息的哈希结果,确定第一共享数据在第一内存区域中所属的第一槽位组;根据第一槽位组中各槽位上存储的共享数据的标识信息,从第一槽位组中确定第一共享数据所在的第一槽位。具体地,可以将第一共享数据的标识信息与第一槽位组中各槽位上存储的共享数据的标识信息进行比对,从而确定第一共享数据所在的第一槽位。
相应地,目标进程模块11向共享内存窗口中写入第二共享数据时,可以从共享内存窗口中确定用于存储第二共享数据的第二槽位;将第二共享数据写入第二槽位中。其中,第二槽位是第二内存区域中任一槽位组中的槽位,第二内存区域是与第二共享数据的类型适配的内存区域。具体地,可以根据共享数据写入请求,确定第二共享数据对应的描述信息,该描述信息包括第二共享数据的类型和标识信息;根据第二共享数据的类型,从多个内存区域中确定与第二共享数据的类型适配的第二内存区域;根据第二共享数据的标识信息的哈希结果,确定第二共享数据在第二内存区域中所属的第二槽位组;根据第二槽位组中各槽位的访问信息,从第二槽位组中确定用于存储第二共享数据的第二槽位。优选地,可以从第二槽位组中选择空闲的槽位作为第二槽位,用来存储第二共享数据;当第二槽位组中各槽位均被占用时,目标进程模块11可以按照一定的旧数据替换(Evicting olderversion)方式将某个槽位中的共享数据替换,实现槽位回收,将回收的槽位作为第二槽位,用来存储第二共享数据。
在本实施例中,并不限定目标进程模块11采用的旧数据替换方式,例如可以记录各个槽位上共享数据的访问频率和访问时间,采用最近最少访问的替换方式,将最近最少访问的共享数据替换;或者,也可以统计各槽位上共享数据的存储时间,将存储时间最早的共享数据替换。除此之外,本申请实施例提供一种简单、高效的旧数据替换方式,以实现槽位回收,该方式可称为时钟算法回收槽位(Clock algorithm reclaiming slots)。如图4所示,每个内存区域除了包括多个槽位组之外,还包括位图区,该位图区包括与其所属内存区域中各槽位组对应的比特组,每个比特组用于记录对应槽位组中各槽位是否被访问过的访问信息,一个比特位对应一个槽位,每个比特位都是共享内存窗口中的一个小存储空间。在本实施例中,每个比特位可以取两个值,记为第一值和第二值,第一值表示该比特位对应的槽位被访问过,即该槽位已经被写入了共享数据(即已被占用),第二值表示该比特位对应的槽位未被访问过或可被替换,即该槽位上尚未写入共享数据(即处于空闲状态)。在本实施例中,并不限定第一值和第二值的取值,如图4所示,第一值可以为1,第二值可以为0,即取值为1的比特位对应的槽位已经被占用,取值为0的比特位对应的槽位未被访问过或者可被替换。
基于上述,在确定第二槽位组的情况下,目标进程模块11可以遍历第二槽位组对应的比特组中记录的各槽位的访问信息,对于遍历到的每个比特位,若该比特位的取值为第一值,将该比特位置为第二值,以表示再次遍历到该比特位时该比特位对应槽位中的共享数据可被替换,并继续遍历后续比特位,直至首次遍历到取值为第二值的目标比特位,将目标比特位对应的槽位作为第二槽位,用于存储第二共享数据。在一种特殊情况下,第二槽位组中的所有槽位都被访问过,此时,第二槽位组对应比特组中各比特位的取值均为第一值,例如1,这就需要从头遍历到最后一个比特位,然后重新从头开始遍历,由于在上一次遍历时各个比特位的取值已经被置为第二值,例如0,所以第一个槽位中的共享数据可以被替换,此时第一个槽位可以作为第二槽位,用来存储第二共享数据。
在本申请实施例中,并不限定共享内存窗口中存储共享数据的方式,凡是能够成功存储共享数据的方式均适用于本申请实施例。在一可选实施例中,为了便于能够同时对共享内存窗口中的同一数据进行读写操作,在共享内存窗口中存储共享数据时采用以下结构:
针对每个共享数据,分配两个数据存储单元和一个版本号存储单元,两个数据存储单元用于存储同一共享数据,版本号存储单元用于存储临时版本号,该临时版本号具有奇偶性(even/odd),且该临时版本号的奇偶性用于标识这两个数据存储单元中当前对读操作和写操作分别生效的数据存储单元;其中,当需要从共享内存窗口中读取共享数据时,需要从“对读操作生效的数据存储单元”中读取,当需要向共享内存储窗口中写入共享数据时,需要向“对写操作生效的数据存储单元”中写入,以支持同一共享数据的同时读写操作。另外,临时版本号的奇偶性可随着槽位中写操作的发生而变化,以保证每次写操作完成后能够让最新写入的共享数据对读操作生效,以便虚拟机能够读取最新的共享数据。
虚拟机从共享内存窗口中读取第一共享数据时,首先,可以确定存储第一共享数据的存储位置,在该存储位置上包括两个数据存储单元和一个版本号存储单元;从版本号存储单元中读取临时版本号,根据所读取的临时版本号的奇偶性,确定该存储位置包含的两个数据存储单元中对读操作生效的第一数据存储单元;从第一数据存储单元中读取中间态共享数据,在读取完成后,将所读取的临时版本号与该存储位置包含的版本号存储单元中的临时版本号进行比对;若两者相同,将中间态共享数据作为第一共享数据;若两者不一致,按照前述步骤重新执行从第一槽位中读取第一共享数据的操作。相应地,目标进程模块向共享内存中写入第二共享数据时,首先,可以确定用于存储第二共享数据的存储位置,在该存储位置上包括两个数据存储单元和一个版本号存储单元;从版本号存储单元中读取临时版本号,根据所读取的临时版本号的奇偶性,确定该存储位置包含的两个数据存储单元中对写操作生效的第二数据存储单元;将第二共享数据写入第二数据存储单元,并在写入完成后,更改临时版本号的奇偶性,以将第二数据存储单元变更为对读操作生效。在本申请实施例中,并不关注临时版本号的取值,而是关注其奇偶性。
在此说明,采用两个数据存储单元和一个版本号存储单元对共享数据进行存储的方式,可以不依赖于对共享内存窗口的划分,则可以采用遍历或轮询等方式来确定存储有第一共享数据的存储位置或用于存储第二共享数据的存储位置,对此不做限定。在一优选实施例中,可以将采用两个数据存储单元和一个版本号存储单元对共享数据进行存储的方式,与共享内存窗口划分出的槽位相结合,在该结合方案中,每个槽位中包括两个数据存储单元和一个版本号存储单元,两个数据存储单元用于存储同一共享数据,版本号存储单元用于存储临时版本号,该临时版本号具有奇偶性,且该临时版本号的奇偶性用于标识这两个数据存储单元中当前对读操作和写操作分别生效的数据存储单元。
基于上述,虚拟机从共享内存窗口中读取第一共享数据时,可以按照前文描述的方式确定第一槽位;然后按照下述方式从第一槽位中读取第一共享数据,具体地:从第一槽位中读取临时版本号,根据所读取的临时版本号的奇偶性,确定第一槽位包含的两个数据存储单元中对读操作生效的第一数据存储单元;从第一数据存储单元中读取中间态共享数据,在读取完成后,将所读取的临时版本号与第一槽位中的临时版本号进行比对;若两者相同,说明在读取第一共享数据过程中目标进程模块11未对第一共享数据进行过修改,所以可以将该中间态共享数据作为第一共享数据;若两者不一致,说明在读取第一共享数据过程中目标进程模块11对第一共享数据进行过修改,所读取的中间态共享数据不是最新版本的数据,因此需要按照前面的步骤重新执行从第一槽位中读取第一共享数据的操作。
相应地,目标进程模块向共享内存中写入第二共享数据时,可以按照前文描述的方式确定第二槽位;然后按照下述方式将第二共享数据写入第二槽位中,具体地:根据第二槽位中临时版本号的奇偶性,确定第二槽位包含的两个数据存储单元中对写操作生效的第二数据存储单元;将第二共享数据写入第二数据存储单元,并在写入完成后,更改临时版本号的奇偶性,以将第二数据存储单元变更为对读操作生效。
在本实施例中,并不限定更改临时版本号的奇偶性的方式。在一可选实施例中,在每次写入完成后,可以将临时版本号加1,以此不断改变临时版本号的奇偶性。在另一可选实施例中,也可以预先设定两个数值,一个奇数,例如1,一个偶数,例如2,然后,在每次写入完成后,将临时版本号在这两个数值之间进行切换,以此不断更改临时版本号的奇偶性。
另外,在本实施例中,也不限定“临时版本号的奇偶性”与“两个数据存储单元对写操作生效和对读操作生效”之间的对应关系。为了便于描述,将两个数据存储单元记为数据存储单元D1和数据存储单元D2。在一可选实施例中,临时版本号为奇数时,表示数据存储单元D1中的共享数据对写操作生效,数据存储单元D2中的共享数据对读操作生效;则当临时版本号变为偶数时,表示数据存储单元D1中的共享数据对读操作生效,数据存储单元D2中的共享数据对写操作生效。或者,在另一可选实施例中,临时版本号为偶数时,表示数据存储单元D1中的共享数据对写操作生效,数据存储单元D2中的共享数据对读操作生效;则当临时版本号变为奇数时,表示数据存储单元D1中的共享数据对读操作生效,数据存储单元D2中的共享数据对写操作生效。
在本申请各实施例中,并不限定在虚拟机12之间共享数据的具体实现方式,在一些应用场景中,可以将虚拟机12作为共享数据的使用者,在这些虚拟机12之间进行数据共享;在另一些应用场景中,可以在虚拟机12提供的运行环境中部署上层应用,将这些部署在虚拟机12中的上层应用作为共享数据的使用者,在这些上层应用之间进行数据共享。在部署在虚拟机12中的上层应用之间共享数据的场景中,如图1所示,虚拟机12中除了部署有上层应用之外,还包括数据共享管理模块121,由该数据共享管理模块121负责响应虚拟机12中部署的上层应用发起的共享数据读取请求,从共享内存窗口中读取第一共享数据,并根据第一共享数据执行相应操作。在一可选实施例中,数据共享管理模块121根据第一共享数据执行相应操作具体为:将第一共享数据返回给上层应用,以供上层应用对第一共享数据进行处理或者根据第一共享数据进行后续操作。在本实施例中,并不限定上层应用的实现方式,例如可以是各种视频类应用、邮件类应用、即时通讯类应用、图像处理应用等。
本申请实施例提供的数据共享方案适用于各种应用场景,下面以云计算场景中的文件元数据共享为例,对本申请实施例的技术方案进行详细说明。
图5为本申请实施例提供的一种文件元数据共享***200的结构示意图。在该***200中包括:部署在同一主机20上的目标进程模块21、主机文件***(host file system)22以及具有数据共享关系的多个虚拟机23,多个虚拟机23中部署有客户文件***(guestfile system)24。在图5中,以多台主机20为例进行图示。关于虚拟机23之间的数据共享关系等相关描述可参见图1所示实施例中的描述,在此不再赘述。
在本实施例中,虚拟机23作为一种运行环境,可以承载租户的各种上层应用,这些上层应用在运行过程会产生数据,也会访问其它上层应用产生的数据或其它一些数据。在本实施例中,以文件***的方式对各种数据进行组织和管理。在虚拟机23中部署有文件***,记为客户文件***24,相应地,主机20具有自己的文件***,记为主机文件***22,该主机文件***22配合各虚拟机23中的客户文件***24为虚拟机23中的上层应用提供文件相关的服务,例如创建文件、删除文件、打开文件、读取文件、对文件进行重命名等。进一步,如图5所示,文件元数据共享***200还包括:多个存储节点25,这些存储节点25分布在不同的位置,负责存储***200中的各文件。
其中,虚拟机23中的上层应用在需要访问文件时,可以向客户文件***24发起文件访问操作,客户文件***24获取相应文件元数据,基于所获取的文件元数据向主机文件***22发起文件访问请求,主机文件***25根据客户文件***24提供的文件元数据,在相应存储节点25上执行文件访问操作,例如创建文件、删除文件、打开文件、读取文件、对文件进行重命名等。其中,文件元数据中包括执行文件访问操作所需的相关信息,例如文件名、文件在磁盘上的位置、文件的类型等。关于文件元数据的描述可参见上文实施例,在此不再赘述。
在本实施例中,具有数据共享关系的虚拟机23之间共享文件元数据,为了缩短虚拟机23对文件元数据的访问路径,同时解决文件元数据在各虚拟机23之间的一致性问题,在本实施例中,以同一主机20为单位,对部署在同一主机20上部署的需要进行文件元数据共享的多个虚拟机12,在该主机20上为这些虚拟机23分配共享内存窗口(shared memorywindow),通过本地的共享内存窗口存储多个虚拟机23之间的共享文件元数据,实现文件元数据的本地访问,缩短文件元数据的访问路径,提高文件元数据的访问性能。
在本实施例中,为了能够为虚拟机23分配共享内存窗口,在主机20上部署了目标进程模块21。目标进程模块21可以是主机20上的守护进程,用于从主机20的物理空间中为多个虚拟机23分配共享内存窗口,共享内存窗口用于存储多个虚拟机23之间共享的文件元数据,对多个虚拟机23全部可见,且面向多个虚拟机23具有只读属性。当然,该共享内存储窗口对目标进程模块21是可读写的。
当任一虚拟机23中的上层应用需要进行文件访问操作时,可以向其所在虚拟机23中的客户文件***24发起文件元数据读取操作,客户文件***24响应其所属虚拟机23中上层应用发起的文件元数据读取操作,从共享内存窗口中读取第一文件元数据并返回给上层应用,以供上层应用根据第一文件元数据通过主机文件***22执行文件访问操作。第一文件元数据是指需要从共享内存窗口中读取的文件元数据,可以是任一文件元数据。在此说明,上层应用在需要查询相关文件元数据的情况下,也可以向其所在虚拟机23中的客户文件***24发起文件元数据读取操作,并不限于进行文件访问操作。其中,文件元数据读取操作可以是但不限于:获取文件属性值的请求,查找文件目录的请求以及打开文件的请求。对虚拟机中的上层应用来说,共享内存窗口是透明的,例如上层应用在发起获取文件属性值,查找文件目录或者打开文件等请求时,上层应用对客户文件***24从共享内存窗口进行文件元数据相关的读操作是无感知的,对上层应用来说就像这些操作是虚拟机的内核中完成一样。
在执行文件访问操作的过程中,被访问文件的元数据可能发生变化,例如在修改某个文件的名称时,文件元数据中的文件名会变化,又例如,对文件进行修改时,文件元数据中文件最近的修改时间会发生变化,这些变化会产生新的文件元数据,为了让各虚拟机23能够感知到最新文件元数据,需要将新的文件元数据写入共享内存窗口中。为了便于描述,将新产生的文件元数据称为第二文件元数据。在本实施例中,主机文件***22可以在执行文件访问操作的过程中,可以根据文件访问操作的结果确定是否生成新的第二文件元数据,如果确定生成第二文件元数据,根据文件访问操作的执行结果生成第二文件元数据并向目标进程模块21发起文件元数据写入操作;目标进程模块21响应主机文件***22发起的文件元数据数据写入操作,将第二文件元数据写入共享内存窗口中,以供多个虚拟机共享第二文件元数据。其中,主机文件***22可以将第二文件元数据提供给目标进程模块21,可选地,可以通过但不限于:远程过程调用(Remote Procedure Call,RPC)的方式将第二文件元数据提供给目标进程模块21,以供目标进程模块21将第二文件元数据写入共享内存窗口中。
在本实施例中,通过目标进程模块21和共享内存窗口在客户文件***24和主机文件***22提供文件元数据服务,使得在同一主机上跨虚拟机实现了文件元数据的共享,并且实现了文件元数据的短读(short-read)和长写(long-write)。其中,短读是指虚拟机23直接从共享内存窗口中读取所需的第一文件元数据,而不经过目标进程模块21;长写是指向共享内存窗口中写入第二文件元数据时需要通过目标进程模块21写入,而不是由主机文件***22直接向共享内存窗口中写入。其中,长写方式可以避免多个虚拟机同时对共享内存空间进行写操作引起数据错误或安全风险问题。例如,如果一个虚拟机被攻击,此时如果还允许该虚拟机直接往共享内存窗口中写入文件元数据,可能会因为该虚拟机的恶意写入而给其它虚拟机带来不利影响,而采用本实施例提供的长写方式可解决该问题。
在本实施例中,目标进程模块作为一个正常的进程,可以采用主机文件***支持的额接口方式例如POSIX API,访问主机文件***,以确保目标进程模块与主机文件***的兼容性。基于此,目标进程模块可以调用内存分配命令,告知主机文件***为其分配内存空间,目标进程模块将分配到的内存空间作为共享内存窗口暴露给各个虚拟机。具体地,目标进程模块将共享内存窗口的物理地址提供给虚拟机管理模块;由虚拟化管理模块在多个虚拟机启动时,根据共享内存窗口的物理地址,将多个虚拟机各自预留的物理地址空间映射为共享内存窗口,完成对共享内存窗口的暴露。在此说明,对不同虚拟机来说,各自预留的物理地址空间可以相同,也可以不相同,也就是说,对不同虚拟机来说,同一共享内存窗口可以映射到不同的私有内存地址(即预留的物理地址空间)。进一步,在预留的物理地址空间中还可以包括共享内存窗口的描述信息,以方便虚拟机23根据该描述信息从共享内存窗口中读取文件元数据,关于共享内存窗口的描述信息的相关说明可参见前述实施例,在此不再赘述。
在一可选实施例中,目标进程模块在分配到共享内存窗口之后,可以对共享内存窗口执行归零操作,为后续向共享内存储窗口中写入文件元数据提供基础。
在本实施例中,针对共享内存窗口从以下几个维度进行管理和维护,如下所示:
1、共享数据布局(Shared data layout):
在这部分内容中,可以根据文件元数据的类型,假设文件元数据包括索引节点(inode)数据,索引节点的牺牲缓存数据(inode victim cache)以及目录项(dentry)数据三类元数据,将共享内存窗口划分为三个内存区域,如图2中所示的内存区域A、内存区域B和内存区域C。内存区域A用于存储索引节点数据,内存区域B用于存储索引节点的牺牲缓存数据,内存区域C用于存储目录项数据。关于三类文件元数的详细说明,可参见前述实施例,在此不再赘述。
在本实施例中,给出了在内存区域中存储文件元数据时的一种存储结构,即针对每个文件元数据,采用两个数据存储单元和一个版本号存储单元对其进行存储,两个数据存储单元用于存储同一文件元数据,版本号存储单元用于存储临时版本号,该临时版本号具有奇偶性(even/odd),且该临时版本号的奇偶性用于标识这两个数据存储单元中当前对读操作和写操作分别生效的数据存储单元。
本实施例还示例性地给出了索引节点数据、牺牲缓存数据以及目录项数据的数据结构,以及每种数据在内存区域内存储时的存储结构。这些数据结构和存储结构的示意性定义如下:
Figure BDA0004120622480000151
在此说明,上述各存储结构的定义中,临时版本号ver_与文件版本号f_ver不同,临时版本号的奇偶性有意义,而且在每个存储结构中临时版本号的初始值可以不同的。另外,为了便于维护这些数据结构,每个数据结构都被填充以与缓存行的大小对齐。如果文件元数据的大小小于缓存行大小,则将其对齐为2的幂,这样有利于提高从共享内存窗口中读取文件元数据时的读写速度。另外,无论是从共享内存窗口中读文件元数据,还是从共享内存窗口写文件元数据,均遵从上述各文件元数据的数据结构以及各文件元数据在内存区域中的存储结构。
2、共享内存窗口的划分:
为了充分利用共享内存窗口的内存空间,图2所示的内存区域A-B均被划分为一系列的槽位组(slot set),每个槽位组包括多个槽位(slot),用于存储不同的文件元数据,文件元数据可作为槽位中的元素(element)。每个元素都能通过其哈希指纹找到其所属的槽位组,例如,对于索引节点数据和索引节点的牺牲缓存数据这两类文件元数据,可以对其inode编号进行哈希,根据哈希结果映射到对应的槽位组中;对于目录项数据,可以将其父inode编号与文件名一起哈希,根据哈希结果映射到对应的槽位组中。关于槽位组和槽位的示例可参见图3所示。
3、文件元数据的访问(Accessing the metadata):
在本实施例中,共享内存窗口中的文件元数据具有原子更新功能,因此多个客户文件***可以以非阻塞方式同时在共享内存窗口中检索所需的文件元数据。基于上述文件元数据的数据结构、在内存区域中的存储结构以及上述槽位组和槽位,这部分对文件元数据的读写过程进行说明。
文件元数据的读操作:根据文件元数据读取请求,确定待读取的第一文件元数据对应的描述信息,例如,如果第一文件元数据是索引节点数据,其描述信息可以包括inode编号,如果第一文件元数据是索引节点的牺牲缓存数据,其描述信息可以包括inode编号,如果第一文件元数据是目录项数据,其描述信息可以包括父inode编号与文件名。对第一文件元数据对应的描述信息进行哈希,根据哈希结果确定第一文件元数据所在的槽位组,假设是第一槽位组;根据第一槽位组中各槽位上存储的共享数据的标识信息,确定第一文件元数据所在的第一槽位;从第一槽位中读取临时版本号,根据所读取的临时版本号的奇偶性,确定第一槽位包含的两个数据存储单元中对读操作生效的第一数据存储单元;从第一数据存储单元中读取中间态元数据,在读取完成后,将所读取的临时版本号与第一槽位中的临时版本号进行比对;若两者相同,说明在读取第一文件元数据过程中目标进程模块21未对第一文件元数据进行过修改,所以可以将该中间态元数据作为第一文件元数据;若两者不一致,说明在读取第一文件元数据过程中目标进程模块21对第一文件元数据进行过修改,所读取的中间态元数据不是最新版本的数据,因此需要按照前面的步骤重新执行从第一槽位中读取第一文件元数据的操作。
文件元数据的写操作:根据文件元数据写入请求,确定待写入的第二文件元数据对应的描述信息,例如,如果第二文件元数据是索引节点数据,其描述信息可以包括inode编号,如果第二文件元数据是索引节点的牺牲缓存数据,其描述信息可以包括inode编号,如果第二文件元数据是目录项数据,其描述信息可以包括父inode编号与文件名。对第二文件元数据对应的描述信息进行哈希,根据哈希结果确定第二文件元数据所在的槽位组,假设是第二槽位组;根据第二槽位组中各槽位的访问信息,从第二槽位组中确定用于存储第二共享数据的第二槽位;根据第二槽位中的临时版本号,确定第二槽位包含的两个数据存储单元中对写操作生效的第二数据存储单元;将第二共享数据写入第二数据存储单元,并在写入完成后,更改临时版本号的奇偶性,以将第二数据存储单元变更为对读操作生效。
4、删除旧版本(Evicting older version):
如图4所示,每个内存区域除了包括多个槽位组之外,还包括位图区,该位图区包括与其所属内存区域中各槽位组对应的比特组,每个比特组用于记录对应槽位组中各槽位是否被访问过的访问信息,一个比特位对应一个槽位,每个比特位都是共享内存窗口中的一个小存储空间。基于此,可以按照时钟算法回收槽位,基于此,在确定第二槽位时,可以遍历第二槽位组对应的比特组中记录的各槽位的访问信息,对于遍历到的每个比特位,若该比特位的取值为第一值,将该比特位置为第二值,以表示再次遍历到该比特位时该比特位对应槽位中的文件元数据可被替换,并继续遍历后续比特位,直至首次遍历到取值为第二值的目标比特位,将目标比特位对应的槽位作为第二槽位,用于存储第二文件元数据。详细实施过程和说明可参见前述实施例,在此不再赘述。
5、以较短的元数据路径服务文件请求:
在本实施例中,共享内存窗口中的文件元数据负责服务大多数非写请求,包括获取文件属性值的请求,查找文件目录的请求以及打开文件的请求。其中,获取文件属性值的请求可以调用getattr函数实现,查找文件子目录的请求可以调用lookup函数实现,打开文件的请求可以调用open函数实现。getattr函数:用于获取文件、目录或文件夹的属性。lookup函数:根据当前路径的dentry的d_name成员在当前目录的父目录文件(用inode表示)里查找当前目录的inode编号,查找到当前目录的inode编号后,根据此inode编号获得此inode编号对应的索引节点数据,然后将目录项和inode编号绑定,以得到文件的目录。open函数:用于打开或创建文件。其中,getattr函数、lookup函数和open函数是传统文件***中的已有函数,对此不做过多说明。
Open:打开文件是一个特殊的例子,同时需要上述三个函数,是三个操作的结合。客户文件***首先搜索文件路径以确认文件是否存在,并通过共享内存窗口读取文件的相关属性以确定用户是否具有访问权限。之后,客户文件***将上层应用分配一个文件描述符并返回,上层应用可以根据该文件描述符执行文件打开操作。
Lookup:表示需要沿文件路径迭代,并搜索共享内存窗口中的文件元数据,通过检查文件名称和父inode编号来确认文件所属的目录。如果找不到文件所属的目录,将返回“未找到”,并通过将请求发送到目标进程模块(如守护进程)来帮忙检索文件所属的目录。
Getattr:在沿文件目录搜索时,通过在共享内存窗口中搜索该路径下的索引节点数据。如果找不到索引节点数据,并通过将请求发送到目标进程模块(如守护进程)来帮忙检索索引节点数据。
基于此,如图5所示,该***200还包括:主节点26,用于存储和维护各文件的各种文件元数据,例如索引节点数据、目录项数据以及牺牲缓存数据。主节点26上存储完整的文件元数据。可选地,主节点26可以是一远程的服务器。其中,在客户文件***无法从共享内存窗口中查询或检索到所需的文件元数据时,可以请求目标进程模块从主节点26为其获取所需文件元数据。基于此,目标进程模块还用于:在共享内存窗口中未存储第一文件元数据的情况下,从主节点26获取第一文件元数据,将第一元数据写入共享内存窗口中,以供多个虚拟机读取第一元数据;以及在向共享内存窗口中写入第二文件元数据的情况下,向主节点同步第二文件元数据,以使主节点保存第二文件元数据。
在本实施例中,针对同一主机上的虚拟机,通过为其分配共享内存窗口来缓存各虚拟机需要共享的文件元数据,并且可由虚拟机和目标进程模块相互配合通过短读和长写的方式,实现文件元数据的本地访问,缩短文件元数据的访问路径,提高文件元数据的访问性能;另外,共享内存窗口对这些虚拟机具有只读属性,即虚拟机对共享内存窗口可读不可写,并在主机上增设目标进程模块,文件元数据的写入由目标进程模块统一负责,可避免多个虚拟机同时对共享内存窗口进行写操作可能造成的数据错误问题,而且基于共享内存窗口,文件元数据的任何修改可被各虚拟机立即观察到,对各虚拟机来说能够做到文件元数据的一致性,而且无需经过网络传输进行同步,可进一步提高文件元数据的访问性能。
图6为本申请实施例提供的一种数据共享方法的流程示意图。该方法应用于数据共享***,数据共享***包括部署在同一主机上的目标进程模块和具有数据共享关系的多个虚拟机,关于该***的详细描述可参见前述实施例,在此不再赘述。如图6所示,该方法包括:
601、目标进程模块从主机的物理空间中分配共享内存窗口,所述共享内存窗口用于存储部署在主机上的多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性;
602、多个虚拟机从共享内存窗口中读取所需的第一共享数据,并根据第一共享数据执行相应操作;
603、目标进程模块将第二共享数据写入所述共享内存窗口中,以供所述多个虚拟机共享所述第二共享数据。
在此说明,本申请实施例中并不限定步骤602和步骤603的执行顺序,两者可以顺序执行,也可以并行执行,具体视第二共享数据的产生情况以及虚拟机需要第一共享数据的情况而定。
在一可选实施例中,目标进程模块从主机的物理空间中分配共享内存窗口,包括:从主机的物理空间中申请共享内存窗口;将共享内存窗口的物理地址提供给主机上的虚拟机管理模块,以供虚拟化管理模块将多个虚拟机各自预留的物理地址空间映射为共享内存窗口。进一步可选地,目标进程模块可以响应启动多个虚拟机的指令,即在虚拟机启动时,从主机的物理空间中申请共享内存窗口。
在一可选实施例中,上述共享内存窗口被划分为多个内存区域,不同内存区域用于存储不同类型的共享数据;每个内存区域中包括多个槽位组,每个槽位组包括多个槽位,不同槽位用于存储不同的共享数据。
进一步可选地,每个槽位包括两个数据存储单元和一个版本号存储单元,所述两个数据存储单元用于存储同一共享数据,所述版本号存储单元用于存储临时版本号,所述临时版本号的奇偶性用于标识所述两个数据存储单元中当前对读操作和写操作分别生效的数据存储单元,且所述临时版本号的奇偶性随着所述槽位中写操作的发生而变化。
在一可选实施例中,多个虚拟机从共享内存窗口中读取所需的第一共享数据,包括:在需要第一共享数据的情况下,从共享内存窗口中确定存储有第一共享数据的第一槽位;从第一槽位中读取第一共享数据;第一槽位是第一内存区域中任一槽位组中的槽位,第一内存区域是与第一共享数据的类型适配的内存区域。
进一步可选地,从共享内存窗口中确定存储有第一共享数据的第一槽位,包括:根据共享数据读取请求,确定第一共享数据对应的第一描述信息,第一描述信息中包括第一共享数据的类型和标识信息;根据第一共享数据的类型,从多个内存区域中确定第一内存区域;根据第一共享数据的标识信息的哈希结果,确定第一共享数据在第一内存区域中所属的第一槽位组;根据第一槽位组中各槽位上存储的共享数据的标识信息,从第一槽位组中确定第一共享数据所在的第一槽位。
进一步可选地,从第一槽位中读取第一共享数据,包括:从第一槽位中读取临时版本号,根据所读取的临时版本号的奇偶性,确定第一槽位包含的两个数据存储单元中对读操作生效的第一数据存储单元;从第一数据存储单元中读取中间态共享数据,在读取完成后,将所读取的临时版本号与第一槽位中的临时版本号进行比对;若两者相同,将中间态共享数据作为第一共享数据;若两者不一致,重新执行从第一槽位中读取第一共享数据的操作。
相应地,基于上述,目标进程模块将第二共享数据写入共享内存窗口中,包括:在多个虚拟机之间产生第二共享数据的情况下,从共享内存窗口中确定用于存储第二共享数据的第二槽位;将第二共享数据写入第二槽位中;第二槽位是第二内存区域中任一槽位组中的槽位,第二内存区域是与第二共享数据的类型适配的内存区域。
进一步可选地,从共享内存窗口中确定用于存储第二共享数据的第二槽位,包括:根据共享数据写入请求,确定第二共享数据对应的第二描述信息,第二描述信息包括第二共享数据的类型和标识信息;根据第二共享数据的类型,从多个内存区域中确定第二内存区域;根据第二共享数据的标识信息的哈希结果,确定第二共享数据在第二内存区域中所属的第二槽位组;根据第二槽位组中各槽位的访问信息,从第二槽位组中确定用于存储第二共享数据的第二槽位。
在一可选实施例中,任一内存区域还包括位图区,位图区包括与其所属内存区域中各槽位组对应的比特组,一个比特组用于记录与其对应槽位组中各槽位是否被访问过的访问信息。相应地,根据第二槽位组中各槽位的访问信息,从第二槽位组中确定用于存储第二共享数据的第二槽位,包括:遍历与第二槽位组对应比特组中记录的各槽位对应的访问信息,对于遍历到的比特位,若该比特位的取值为第一值,将该比特位置为第二值,并继续遍历后续比特位,直至首次遍历到取值为第二值的目标比特位,将目标比特位对应的槽位作为第二槽位;第一值表示对应比特位的槽位被访问过,第二值表示对应比特位的槽位未被访问过或可被替换。
在一可选实施例中,将第二共享数据写入第二槽位中,包括:根据第二槽位中临时版本号的奇偶性,确定第二槽位包含的两个数据存储单元中对写操作生效的第二数据存储单元;将第二共享数据写入第二数据存储单元,并在写入完成后,更改临时版本号的奇偶性,以将第二数据存储单元变更为对读操作生效。
图7a为本申请实施例提供的另一种数据共享方法的流程示意图。该方法应用于数据共享***,数据共享***包括部署在同一主机上的目标进程模块和具有数据共享关系的多个虚拟机,关于该***的详细描述可参见前述实施例,在此不再赘述。本实施例的方法是从目标进程模块的角度进行的描述,如图7a所示,该方法包括:
701a、从主机的物理空间中分配共享内存窗口,共享内存窗口用于存储多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性,以供多个虚拟机从共享内存窗口中读取所需的第一共享数据;
702a、将第二共享数据写入共享内存窗口中,以供多个虚拟机共享第二共享数据。
关于步骤701a和步骤702a的详细实现,可参见图6所示实施例中的相应步骤,在此不再赘述。
图7b为本申请实施例提供的又一种数据共享方法的流程示意图。该方法应用于数据共享***,数据共享***包括部署在同一主机上的目标进程模块和具有数据共享关系的多个虚拟机,关于该***的详细描述可参见前述实施例,在此不再赘述。本实施例的方法是从任一虚拟机的角度进行的描述,如图7b所示,该方法包括:
701b、从共享内存窗口中读取所需的第一共享数据;其中,共享内存窗口用于存储多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性,共享内存窗口中的共享数据是由目标进程模块写入的;
702b、根据第一共享数据执行相应操作。
关于步骤701b和步骤702b的详细实现,可参见图6所示实施例中的相应步骤,在此不再赘述。关于上述各方法实施例中各步骤的详细实施方式以及有益效果已经在前述实施例中进行了详细描述,此处将不做详细阐述说明。
需要说明的是,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如701a、702a等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图8为本申请实施例提供的一种数据共享装置的结构示意图。该装置可作为上述实施例中的目标进程模块实现,但并不限于此。如图8所示,该装置包括:
分配模块81,用于从主机的物理空间中分配共享内存窗口,共享内存窗口用于存储多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性,以供多个虚拟机从共享内存窗口中读取所需的第一共享数据;
写入模块82,用于将第二共享数据写入共享内存窗口中,以供多个虚拟机共享第二共享数据。
在一可选实施例中,分配模块81具体用于:响应启动多个虚拟机的指令,从主机的物理空间中申请共享内存窗口;将共享内存窗口的物理地址提供给主机上的虚拟机管理模块,以供虚拟化管理模块将多个虚拟机各自预留的物理地址空间映射为共享内存窗口。
在一可选实施例中,上述共享内存窗口被划分为多个内存区域,不同内存区域用于存储不同类型的共享数据;一个内存区域中包括多个槽位组,一个槽位组包括多个槽位,不同槽位用于存储不同的共享数据。
基于上述,写入模块82具体用于:在多个虚拟机之间产生第二共享数据的情况下,从共享内存窗口中确定用于存储第二共享数据的第二槽位;将第二共享数据写入第二槽位中;第二槽位是第二内存区域中任一槽位组中的槽位,第二内存区域是与第二共享数据的类型适配的内存区域。
进一步可选地,写入模块82在确定第二槽位时,具体用于:根据共享数据写入请求,确定第二共享数据对应的第二描述信息,第二描述信息包括第二共享数据的类型和标识信息;根据第二共享数据的类型,从多个内存区域中确定第二内存区域;根据第二共享数据的标识信息的哈希结果,确定第二共享数据在第二内存区域中所属的第二槽位组;根据第二槽位组中各槽位的访问信息,从第二槽位组中确定用于存储第二共享数据的第二槽位。
在一可选实施例中,任一内存区域还包括位图区,位图区包括与其所属内存区域中各槽位组对应的比特组,一个比特组用于记录与其对应槽位组中各槽位是否被访问过的访问信息。相应地,写入模块82在确定第二槽位时,具体用于:遍历与第二槽位组对应比特组中记录的各槽位对应的访问信息,对于遍历到的比特位,若该比特位的取值为第一值,将该比特位置为第二值,并继续遍历后续比特位,直至首次遍历到取值为第二值的目标比特位,将目标比特位对应的槽位作为第二槽位;第一值表示对应比特位的槽位被访问过,第二值表示对应比特位的槽位未被访问过或可被替换。
在一可选实施例中,写入模块82在将第二共享数据写入第二槽位中时,具体用于:根据第二槽位中临时版本号的奇偶性,确定第二槽位包含的两个数据存储单元中对写操作生效的第二数据存储单元;将第二共享数据写入第二数据存储单元,并在写入完成后,更改临时版本号的奇偶性,以将第二数据存储单元变更为对读操作生效。
图9为本申请实施例提供的另一种数据共享装置的结构示意图。该装置可作为上述实施例中的虚拟机中的共享数据管理模块或客户文件***实现,但并不限于此。如图9所示,该装置包括:
读取模块91,用于从共享内存窗口中读取所需的第一共享数据;其中,共享内存窗口用于存储多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性,共享内存窗口中的共享数据是由目标进程模块写入的;执行模块92,用于根据第一共享数据执行相应操作。
在一可选实施例中,共享内存窗口被划分为多个内存区域,不同内存区域用于存储不同类型的共享数据;一个内存区域中包括多个槽位组,一个槽位组包括多个槽位,不同槽位用于存储不同的共享数据。
在一可选实施例中,读取模块91具体用于:在需要第一共享数据的情况下,从共享内存窗口中确定存储有第一共享数据的第一槽位;从第一槽位中读取第一共享数据;第一槽位是第一内存区域中任一槽位组中的槽位,第一内存区域是与第一共享数据的类型适配的内存区域。
进一步可选地,读取模块91在从共享内存窗口中确定第一槽位时,具体用于:根据共享数据读取请求,确定第一共享数据对应的第一描述信息,第一描述信息中包括第一共享数据的类型和标识信息;根据第一共享数据的类型,从多个内存区域中确定第一内存区域;根据第一共享数据的标识信息的哈希结果,确定第一共享数据在第一内存区域中所属的第一槽位组;根据第一槽位组中各槽位上存储的共享数据的标识信息,从第一槽位组中确定第一共享数据所在的第一槽位。
进一步可选地,读取模块91在从第一槽位中读取第一共享数据时,具体用于:从第一槽位中读取临时版本号,根据所读取的临时版本号的奇偶性,确定第一槽位包含的两个数据存储单元中对读操作生效的第一数据存储单元;从第一数据存储单元中读取中间态共享数据,在读取完成后,将所读取的临时版本号与第一槽位中的临时版本号进行比对;若两者相同,将中间态共享数据作为第一共享数据;若两者不一致,重新执行从第一槽位中读取第一共享数据的操作。
除上述数据共享装置之外,本申请实施例还提供一种数据共享装置,该数据共享装置包括:分配模块,用于从主机的物理空间中分配共享内存窗口,共享内存窗口用于存储多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性;读取模块,用于从共享内存窗口中读取所需的第一共享数据;执行模块,用于根据第一共享数据执行相应操作;以及写入模块,用于将第二共享数据写入共享内存窗口中,以供多个虚拟机共享第二共享数据。关于本实施例中各功能模块的详细描述可参见图8和图9所示实施例中相应功能模块的描述,在此不再赘述。
关于上述各装置实施例中各功能模块的详细说明以及有益效果已经在前述实施例中进行了详细描述,此处将不做详细阐述说明。
图10为本申请实施例提供的一种主机的结构示意图。如图10所示,该主机上部署有目标进程模块和具有数据共享关系的多个虚拟机,该主机包括:存储器1001和处理器1002,处理器1002与存储器1001耦合。
存储器1001,用于存储目标进程模块和多个虚拟机对应的程序代码,并可被配置为存储其它各种数据以支持在主机上的操作。这些数据的示例包括用于在主机上操作的任何应用程序或方法的指令,消息,图片,视频等。
在一些实施例中,处理器1002执行存储器1001中目标进程模块对应的程序代码,以用于:从主机的物理空间中分配共享内存窗口,共享内存窗口用于存储多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性,以供多个虚拟机从共享内存窗口中读取所需的第一共享数据;将第二共享数据写入共享内存窗口中,以供多个虚拟机共享第二共享数据。
在一可选实施例中,处理器1002在从主机的物理空间中分配共享内存窗口时,具体用于:响应启动多个虚拟机的指令,从主机的物理空间中申请共享内存窗口;将共享内存窗口的物理地址提供给主机上的虚拟机管理模块,以供虚拟化管理模块将多个虚拟机各自预留的物理地址空间映射为共享内存窗口。
在一可选实施例中,共享内存窗口被划分为多个内存区域,不同内存区域用于存储不同类型的共享数据;一个内存区域中包括多个槽位组,一个槽位组包括多个槽位,不同槽位用于存储不同的共享数据。
在一可选实施例中,处理器1002在将第二共享数据写入共享内存窗口中时,具体用于:在多个虚拟机之间产生第二共享数据的情况下,从共享内存窗口中确定用于存储第二共享数据的第二槽位;将第二共享数据写入第二槽位中;第二槽位是第二内存区域中任一槽位组中的槽位,第二内存区域是与第二共享数据的类型适配的内存区域。
在一可选实施例中,处理器1002在从共享内存窗口中确定第二槽位时,具体用于:根据共享数据写入请求,确定第二共享数据对应的第二描述信息,第二描述信息包括第二共享数据的类型和标识信息;根据第二共享数据的类型,从多个内存区域中确定第二内存区域;根据第二共享数据的标识信息的哈希结果,确定第二共享数据在第二内存区域中所属的第二槽位组;根据第二槽位组中各槽位的访问信息,从第二槽位组中确定用于存储第二共享数据的第二槽位。
在一可选实施例中,任一内存区域还包括位图区,位图区包括与其所属内存区域中各槽位组对应的比特组,一个比特组用于记录与其对应槽位组中各槽位是否被访问过的访问信息。相应地,处理器1002在从第二槽位组中确定第二槽位时,具体用于:遍历与第二槽位组对应比特组中记录的各槽位对应的访问信息,对于遍历到的比特位,若该比特位的取值为第一值,将该比特位置为第二值,并继续遍历后续比特位,直至首次遍历到取值为第二值的目标比特位,将目标比特位对应的槽位作为第二槽位;第一值表示对应比特位的槽位被访问过,第二值表示对应比特位的槽位未被访问过或可被替换。
在一可选实施例中,处理器1002在将第二共享数据写入第二槽位中时,具体用于:根据第二槽位中临时版本号的奇偶性,确定第二槽位包含的两个数据存储单元中对写操作生效的第二数据存储单元;将第二共享数据写入第二数据存储单元,并在写入完成后,更改临时版本号的奇偶性,以将第二数据存储单元变更为对读操作生效。
在另一些实施例中,处理器1002执行存储器1001中虚拟机对应的程序代码,以用于:从共享内存窗口中读取所需的第一共享数据,并根据第一共享数据执行相应操作;其中,共享内存窗口用于存储多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性,共享内存窗口中的共享数据是由目标进程模块写入的。
在一可选实施例中,处理器1002在从共享内存窗口中读取所需的第一共享数据时,具体用于:在需要第一共享数据的情况下,从共享内存窗口中确定存储有第一共享数据的第一槽位;从第一槽位中读取第一共享数据;第一槽位是第一内存区域中任一槽位组中的槽位,第一内存区域是与第一共享数据的类型适配的内存区域。
在一可选实施例中,处理器1002在从共享内存窗口中确定第一槽位时,具体用于:根据共享数据读取请求,确定第一共享数据对应的第一描述信息,第一描述信息中包括第一共享数据的类型和标识信息;根据第一共享数据的类型,从多个内存区域中确定第一内存区域;根据第一共享数据的标识信息的哈希结果,确定第一共享数据在第一内存区域中所属的第一槽位组;根据第一槽位组中各槽位上存储的共享数据的标识信息,从第一槽位组中确定第一共享数据所在的第一槽位。
在一可选实施例中,处理器1002在从第一槽位中读取第一共享数据时,具体用于:从第一槽位中读取临时版本号,根据所读取的临时版本号的奇偶性,确定第一槽位包含的两个数据存储单元中对读操作生效的第一数据存储单元;从第一数据存储单元中读取中间态共享数据,在读取完成后,将所读取的临时版本号与第一槽位中的临时版本号进行比对;若两者相同,将中间态共享数据作为第一共享数据;若两者不一致,重新执行从第一槽位中读取第一共享数据的操作。
在又一些实施例中,处理器1002一方面执行存储器1001中目标进程模块对应的程序代码,以用于:从主机的物理空间中分配共享内存窗口,共享内存窗口用于存储多个虚拟机之间的共享数据,且面向多个虚拟机具有只读属性,以及将第二共享数据写入共享内存窗口中,以供多个虚拟机共享第二共享数据;另一方面执行存储器1001中虚拟机对应的程序代码,以用于:从共享内存窗口中读取虚拟机所需的第一共享数据,并根据第一共享数据执行相应操作。关于各操作的详细实现可参见前述实施例,在此不再赘述。
进一步,如图10所示,该主机还包括:通信组件1003、显示器1004、电源组件1005、音频组件1006等其它组件。图10中仅示意性给出部分组件,并不意味着主机只包括图10所示组件。另外,图10中虚线框内的组件为可选组件,而非必选组件,具体可视主机的产品形态而定。本实施例的主机可以实现为台式电脑、笔记本电脑、智能手机或IOT设备等终端设备,也可以是常规服务器、云服务器或服务器阵列等服务端设备。若本实施例的主机实现为台式电脑、笔记本电脑、智能手机等终端设备,可以包含图10中虚线框内的组件;若本实施例的主机实现为常规服务器、云服务器或服务器阵列等服务端设备,则可以不包含图10中虚线框内的组件。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当计算机程序被处理器执行时,致使处理器能够实现上述各方法实施例中的各步骤。
本申请实施例还提供一种计算机程序产品,包括计算机程序/指令,当计算机程序/指令被处理器执行时,致使处理器能够实现上述各方法实施例中的步骤。
上述存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random-Access Memory,SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read Only Memory,EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM),可编程只读存储器(Programmable Read-Only Memory,PROM),只读存储器(Read-Only Memory,ROM),磁存储器,快闪存储器,磁盘或光盘。
上述通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G/LTE、5G等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理***的广播信号或广播相关信息。在一个示例性实施例中,通信组件还包括近场通信(Near Field Communication,NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(Radio Frequency Identification,RFID)技术,红外数据协会(InfraredData Association,IrDA)技术,超宽带(Ultra Wide Band,UWB)技术,蓝牙(BlueTooth,BT)技术和其他技术来实现。
上述显示器包括屏幕,其屏幕可以包括液晶显示器(Liquid Crystal Display,LCD)和触摸面板(TouchPanel,TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。
上述电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理***,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述音频组件,可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(Microphone,MIC),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(Central ProcessingUnit,CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RandomAccess Memory,RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(Phase-change Random AccessMemory,PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(Digital Video Disc,DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (15)

1.一种数据共享方法,其特征在于,应用于数据共享***,所述数据共享***包括部署在同一主机上的目标进程模块和具有数据共享关系的多个虚拟机,所述方法包括:
所述目标进程模块从所述主机的物理空间中分配共享内存窗口,所述共享内存窗口用于存储所述多个虚拟机之间的共享数据,且面向所述多个虚拟机具有只读属性;
所述多个虚拟机从所述共享内存窗口中读取所需的第一共享数据,并根据所述第一共享数据执行相应操作;
所述目标进程模块将第二共享数据写入所述共享内存窗口中,以供所述多个虚拟机共享所述第二共享数据。
2.根据权利要求1所述的方法,其特征在于,所述目标进程模块从所述主机的物理空间中分配共享内存窗口,包括:
从所述主机的物理空间中申请共享内存窗口,并将所述共享内存窗口的物理地址提供给所述主机上的虚拟机管理模块,以供所述虚拟化管理模块将所述多个虚拟机各自预留的物理地址空间映射为所述共享内存窗口。
3.根据权利要求1所述的方法,其特征在于,所述共享内存窗口被划分为多个内存区域,不同内存区域用于存储不同类型的共享数据;一个内存区域中包括多个槽位组,一个槽位组包括多个槽位,不同槽位用于存储不同的共享数据。
4.根据权利要求3所述的方法,其特征在于,一个槽位包括两个数据存储单元和一个版本号存储单元,所述两个数据存储单元用于存储同一共享数据,所述版本号存储单元用于存储临时版本号,所述临时版本号的奇偶性用于标识所述两个数据存储单元中当前对读操作和写操作分别生效的数据存储单元,且所述临时版本号的奇偶性随着所述槽位中写操作的发生而变化。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述多个虚拟机从所述共享内存窗口中读取所需的第一共享数据,包括:
在需要第一共享数据的情况下,从所述共享内存窗口中确定存储有所述第一共享数据的第一槽位;
从所述第一槽位中读取所述第一共享数据;所述第一槽位是第一内存区域中任一槽位组中的槽位,所述第一内存区域是与所述第一共享数据的类型适配的内存区域。
6.根据权利要求5所述的方法,其特征在于,从所述共享内存窗口中确定存储有所述第一共享数据的第一槽位,包括:
根据共享数据读取请求,确定所述第一共享数据对应的第一描述信息,所述第一描述信息中包括所述第一共享数据的类型和标识信息;
根据所述第一共享数据的类型,从所述多个内存区域中确定所述第一内存区域;
根据所述第一共享数据的标识信息的哈希结果,确定所述第一共享数据在所述第一内存区域中所属的第一槽位组;
根据所述第一槽位组中各槽位上存储的共享数据的标识信息,从所述第一槽位组中确定所述第一共享数据所在的第一槽位。
7.根据权利要求5所述的方法,其特征在于,从所述第一槽位中读取所述第一共享数据,包括:
从所述第一槽位中读取临时版本号,根据所读取的临时版本号的奇偶性,确定所述第一槽位包含的两个数据存储单元中对读操作生效的第一数据存储单元;
从所述第一数据存储单元中读取中间态共享数据,在读取完成后,将所读取的临时版本号与所述第一槽位中的临时版本号进行比对;
若两者相同,将所述中间态共享数据作为所述第一共享数据;若两者不一致,重新执行从所述第一槽位中读取所述第一共享数据的操作。
8.根据权利要求1-4任一项所述的方法,其特征在于,所述目标进程模块将第二共享数据写入所述共享内存窗口中,包括:
在所述多个虚拟机之间产生第二共享数据的情况下,从所述共享内存窗口中确定用于存储所述第二共享数据的第二槽位;
将所述第二共享数据写入所述第二槽位中;所述第二槽位是第二内存区域中任一槽位组中的槽位,所述第二内存区域是与所述第二共享数据的类型适配的内存区域。
9.根据权利要求8所述的方法,其特征在于,从所述共享内存窗口中确定用于存储所述第二共享数据的第二槽位,包括:
根据共享数据写入请求,确定所述第二共享数据对应的第二描述信息,所述第二描述信息包括所述第二共享数据的类型和标识信息;
根据所述第二共享数据的类型,从所述多个内存区域中确定所述第二内存区域;
根据所述第二共享数据的标识信息的哈希结果,确定所述第二共享数据在所述第二内存区域中所属的第二槽位组;
根据所述第二槽位组中各槽位的访问信息,从所述第二槽位组中确定用于存储所述第二共享数据的第二槽位。
10.根据权利要求9所述的方法,其特征在于,任一内存区域还包括位图区,所述位图区包括与其所属内存区域中各槽位组对应的比特组,一个比特组用于记录与其对应槽位组中各槽位是否被访问过的访问信息;
根据所述第二槽位组中各槽位的访问信息,从所述第二槽位组中确定用于存储所述第二共享数据的第二槽位,包括:
遍历与所述第二槽位组对应比特组中记录的各槽位对应的访问信息,对于遍历到的比特位,若该比特位的取值为第一值,将该比特位置为第二值,并继续遍历后续比特位,直至首次遍历到取值为所述第二值的目标比特位,将所述目标比特位对应的槽位作为所述第二槽位;所述第一值表示对应比特位的槽位被访问过,所述第二值表示对应比特位的槽位未被访问过或可被替换。
11.根据权利要求8所述的方法,其特征在于,将所述第二共享数据写入所述第二槽位中,包括:
根据所述第二槽位中临时版本号的奇偶性,确定所述第二槽位包含的两个数据存储单元中对写操作生效的第二数据存储单元;
将所述第二共享数据写入所述第二数据存储单元,并在写入完成后,更改所述临时版本号的奇偶性,以将所述第二数据存储单元变更为对读操作生效。
12.一种主机,其特征在于,所述主机上部署有目标进程模块和具有数据共享关系的多个虚拟机,所述主机包括:存储器和处理器;
所述存储器,用于存储所述目标进程模块和所述多个虚拟机对应的程序代码;所述处理器与所述存储器耦合,用于执行所述目标进程模块对应的程序代码,以用于执行权利要求1-11中任一项所述方法中的步骤。
13.一种数据共享***,其特征在于,包括:部署在同一主机上的目标进程模块和具有数据共享关系的多个虚拟机;所述目标进程模块,用于实现权利要求1-11任一项所述方法中所述目标进程模块执行的步骤,所述多个虚拟机,用于实现权利要求1-11任一项所述方法中所述虚拟机执行的步骤。
14.一种文件元数据共享***,其特征在于,包括:部署在同一主机上的目标进程模块、主机文件***以及具有数据共享关系的多个虚拟机,所述多个虚拟机中部署有客户文件***;
所述目标进程模块,用于从所述主机的物理空间中分配共享内存窗口,所述共享内存窗口用于存储所述多个虚拟机之间共享的文件元数据,且面向所述多个虚拟机具有只读属性;
所述客户文件***,用于响应其所属虚拟机中上层应用发起的文件元数据读取操作,从所述共享内存窗口中读取第一文件元数据并返回给所述上层应用;
所述目标进程模块还用于:响应所述主机文件***发起的文件元数据数据写入操作,将第二文件元数据写入所述共享内存窗口中,以供所述多个虚拟机共享所述第二文件元数据。
15.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器能够实现权利要求1-11中任一项所述方法中的步骤。
CN202310219577.0A 2023-03-03 2023-03-03 数据共享方法、设备、***及存储介质 Pending CN116401004A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310219577.0A CN116401004A (zh) 2023-03-03 2023-03-03 数据共享方法、设备、***及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310219577.0A CN116401004A (zh) 2023-03-03 2023-03-03 数据共享方法、设备、***及存储介质

Publications (1)

Publication Number Publication Date
CN116401004A true CN116401004A (zh) 2023-07-07

Family

ID=87009350

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310219577.0A Pending CN116401004A (zh) 2023-03-03 2023-03-03 数据共享方法、设备、***及存储介质

Country Status (1)

Country Link
CN (1) CN116401004A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117009114A (zh) * 2023-10-07 2023-11-07 联通(广东)产业互联网有限公司 一种数据共享方法、装置、电子设备及存储介质
CN117056298A (zh) * 2023-08-24 2023-11-14 深圳市海成智联科技有限公司 基于共享内存的跨服务数据通信***
CN117131136A (zh) * 2023-10-26 2023-11-28 新唐信通(北京)科技有限公司 一种研发数据共享方法、***、设备及存储介质
CN118093230A (zh) * 2024-04-22 2024-05-28 深圳华锐分布式技术股份有限公司 基于共享内存的跨进程通信方法、装置、设备及存储介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117056298A (zh) * 2023-08-24 2023-11-14 深圳市海成智联科技有限公司 基于共享内存的跨服务数据通信***
CN117009114A (zh) * 2023-10-07 2023-11-07 联通(广东)产业互联网有限公司 一种数据共享方法、装置、电子设备及存储介质
CN117009114B (zh) * 2023-10-07 2024-05-28 联通(广东)产业互联网有限公司 一种数据共享方法、装置、电子设备及存储介质
CN117131136A (zh) * 2023-10-26 2023-11-28 新唐信通(北京)科技有限公司 一种研发数据共享方法、***、设备及存储介质
CN117131136B (zh) * 2023-10-26 2024-01-19 新唐信通(浙江)科技有限公司 一种研发数据共享方法、***、设备及存储介质
CN118093230A (zh) * 2024-04-22 2024-05-28 深圳华锐分布式技术股份有限公司 基于共享内存的跨进程通信方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US10725976B2 (en) Fast recovery using self-describing replica files in a distributed storage system
CN116401004A (zh) 数据共享方法、设备、***及存储介质
US8306950B2 (en) Managing data access requests after persistent snapshots
EP2863310B1 (en) Data processing method and apparatus, and shared storage device
US10154112B1 (en) Cloud-to-cloud data migration via cache
US20160364424A1 (en) Partition-based index management in hadoop-like data stores
US9742860B2 (en) Bi-temporal key value cache system
CN103412822B (zh) 操作非易失性内存和数据操作的方法和相关装置
US10057273B1 (en) System and method for ensuring per tenant mutual exclusion of data and administrative entities with low latency and high scale
US20170154092A1 (en) Optimized content object storage service for large scale content
CN107408132B (zh) 跨越多个类型的存储器移动分层数据对象的方法和***
CN110955488A (zh) 一种持久性内存的虚拟化方法及***
US11853284B2 (en) In-place updates with concurrent reads in a decomposed state
US11157456B2 (en) Replication of data in a distributed file system using an arbiter
CN116225782A (zh) 处理快照的方法及***
US10776045B2 (en) Multiple data storage management with reduced latency
US10976959B2 (en) Method and system for accessing virtual machine state while virtual machine restoration is underway
CN113590309B (zh) 一种数据处理方法、装置、设备及存储介质
US11853319B1 (en) Caching updates appended to an immutable log for handling reads to the immutable log
CN116107515B (zh) 存储卷挂载与访问方法、设备及存储介质
US20240232404A9 (en) Method and system for automatic data protection for limited access cloud data
US20240236077A9 (en) Method and system for performing authentication and object discovery for on-premises cloud service providers
US20240134754A1 (en) Method and system for generating incremental approximation backups of limited access cloud data
US20240134755A1 (en) Method and system for generating indexing metadata for object level restoration of limited access cloud data
US20230305723A1 (en) In-place conversion of virtual disk formats with vm powered on

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination