内存换页方法、系统及存储介质与流程

文档序号:29310821发布日期:2022-03-19 20:02阅读:179来源:国知局
内存换页方法、系统及存储介质与流程

1.本技术涉及计算机技术领域,尤其涉及一种内存换页方法、系统及存储介质。


背景技术:

2.在计算机领域,直通技术(direct pass-through)引入了输入/输出内存管理单元(input/output memory management unit,iommu),通过牺牲设备的共享能力,将设备专用于单个客户机,以达到实现设备全部功能和最优性能的目的。iommu可连接直接内存访问(direct memory access,dma)i/o总线和宿主机的内存。iommu可把直通设备(device)访问的虚拟地址转化成物理地址,实现直通设备对宿主机内存的访问。
3.在一些应用场景下,例如冷热内存页更替场景,需要进行iommu页表更换。在设备直通场景下,对于支持缺页中断(page fault)功能的iommu,可采用page fault方式更换iommu页表。对于不支持缺页中断功能的iommu,无法使用上述方式更换页表。因此,如何对不支持缺页中断的iommu实现页表更换成为本领域亟待解决的技术问题。


技术实现要素:

4.本技术的多个方面提供一种内存换页方法、系统及存储介质,用以对不支持page fault的iommu实现页表更换。
5.本技术实施例提供一种内存换页方法,包括:确定需要页表更新的虚拟机物理地址;从宿主机的iommu存储的页表中,确定所述虚拟机物理地址对应的第一宿主机物理地址;从宿主机内存的空闲物理地址中,确定第二宿主机物理地址;将所述第一宿主机物理地址存储的数据复制至所述第二宿主机物理地址;将所述iommu的页表记录的所述虚拟机物理地址对应的宿主机物理地址更新为所述第二宿主机物理地址。
6.本技术实施例还提供一种计算系统,包括:宿主机和虚拟机管理节点;所述宿主机部署有虚拟机,并挂载有所述虚拟机直通的直通设备;所述宿主机还包括:iommu;所述iommu存储的页表记录有虚拟机的虚拟机物理地址与宿主机物理地址之间的对应关系;所述直通设备基于所述虚拟机的虚拟机物理地址与宿主机物理地址之间的对应关系,访问所述宿主机的内存;所述虚拟机管理节点,用于:确定需要页表更新的虚拟机物理地址;从所述iommu存储的页表中,确定所述虚拟机物理地址对应的第一宿主机物理地址;从宿主机内存的空闲物理地址中,确定第二宿主机物理地址;将所述第一宿主机物理地址存储的数据复制至所述第二宿主机物理地址;将所述iommu的页表记录的所述虚拟机物理地址对应的宿主机物理地址更新为所述第二宿主机物理地址。
7.本技术实施例还提供一种存储有计算机指令的计算机可读存储介质,当所述计算
机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行上述内存换页方法中的步骤。
8.本技术实施例还提供一种计算机程序产品,包括:计算机程序;当所述计算机程序被处理器执行时,致使所述处理器执行上述内存换页方法中的步骤。
9.在本技术实施例中,针对不支持page fault的iommu,vmm可确定需要页面更新的gpa,从宿主机的iommu存储的页表中,确定该gpa对应的第一hpa;并从宿主机内存的空闲物理地址中,确定替换第一hpa的第二hpa;进一步,可将第一hpa存储的数据复制至第二hpa;并将iommu的页表记录的需要更新的gpa对应的hpa更新为第二hpa,对不支持page fault的iommu实现了页表更换。
附图说明
10.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:图1为本技术实施例提供的计算系统的结构示意图;图2和图3为本技术实施例提供的内存换页方法的流程示意图。
具体实施方式
11.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
12.在本技术实施例中,针对不支持page fault的iommu,vmm可确定需要页面更新的gpa,从宿主机的iommu存储的页表中,确定该gpa对应的第一hpa;并从宿主机内存的空闲物理地址中,确定替换第一hpa的第二hpa;进一步,可将第一hpa存储的数据复制至第二hpa;并将iommu的页表记录的需要更新的gpa对应的hpa更新为第二hpa,对不支持page fault的iommu实现了页表更换。
13.以下结合附图,详细说明本技术各实施例提供的技术方案。
14.应注意到:相同的标号在下面的附图以及实施例中表示同一物体,因此,一旦某一物体在一个附图或实施例中被定义,则在随后的附图和实施例中不需要对其进行进一步讨论。
15.图1为本技术实施例提供的计算系统的结构示意图。如图1所示,计算系统包括:宿主机10和虚拟机管理节点(vmm)20。
16.在本实施例中,宿主机10是指具有计算、存储及通信等功能的计算机设备,例如可以是服务端设备。例如,宿主机10可以是单一服务器设备,也可以为云化的服务器阵列等。当然,宿主机10也可以为手机、平板电脑、个人电脑、穿戴设备等终端设备。
17.在本实施例中,宿主机10部署有虚拟机(virtual machine,vm)101。其中,虚拟机101也可称为宿主机10的虚拟机(guest)。vm 101有独立的cpu、内存、网络以及磁盘等。虚拟机101对应的cpu,也可称为虚拟机cpu,即图1所示的vcpu 101a。
18.在本实施例中,vmm 20是指对虚拟机进行管理的逻辑节点,可部署于宿主机10,也
可部署于与宿主机10通信的其它物理机。对于vmm 20部署于宿主机10的实施例,vmm 20可运行于宿主机10的cpu(图1未示出)。vmm 20可对vm 101进行调度任务、负载均衡、状态监测等。
19.在直通(pass through)技术中,vm 101可透过vmm 20,直接访问宿主机10挂载的i/o硬件,这样vm 101的i/o操作路径几乎和无虚拟化环境下的i/o路径相同。其中,i/o硬件即为直通设备102。直通设备102是指宿主机10挂载的i/o硬件设备,可包括:网卡、存储介质等。其中,存储介质可为磁盘、硬盘等可持久存储介质。
20.对于直通设备102,可通过直接内存访问(dma)方式访问宿主机10的内存,即宿主机内存103。 对于dma方式,直通设备102和宿主机内存103之间有一条数据通路,实现直通设备102和宿主机内存103直接的数据传输。在直通设备102和宿主机内存103之间数据传输过程中,不需要宿主机10的cpu 参与。
21.在虚拟化技术中,vm 101上运行的操作系统(guest os)通常不知道它所访问的宿主机的物理内存地址,也可称为宿主机物理地址(host physical address,hpa)。如果要进行dma操作,就有可能破坏内存。因为直通设备102仅可获知虚拟机的物理内存地址,也可称为虚拟机物理地址(guest physical address,gpa),并不知道gpa和hpa之间的映射关系。因此,在直通技术中引入iommu 104。
22.iommu 104可通信连接于直通设备102和宿主机内存103之间。可选地,iommu 104可通过串行接口总线,与直通设备102和宿主机内存103通信连接。串行接口总线可为pci接口总线、pcie接口总线等。iommu 104可保证直通设备102进行dma操作时能够访问宿主机内存103。
23.对于没有iommu 104的宿主机,直通设备102通过dma方式可以访问宿主机10的全部内存地址空间。对于设置有iommu 104的宿主机,虚拟机的cpu 101a可分配直通设备102可访问的gpa,并由vmm 20为gpa分配对应的hpa。iommu 104可维护gpa与hpa之间的映射表,该映射表也可称为页表。页表记录有gpa与hpa之间的映射关系。在直通设备102通过dma方式访问宿主机10的内存时,vmm 20可捕获直通设备102发出的dma请求,并将dma请求透传给iommu 104。iommu 104可从dma请求中获取待访问的gpa;之后,将待访问的gpa在iommu 104存储的页表中进行匹配,以得到待访问的gpa对应的hpa。对于直通设备102来说,可通过待访问的gpa对应的hpa访问宿主机内存103对应的内存空间。
24.在一些应用场景中,iommu 104存储的页表有页表更换需求。例如,某个或某些gpa对应的hpa发生变化时,需要更新iommu 104存储的页表。如,在冷热内存页更替场景中,对于热页若长时间不被使用可转为冷页,分配给dma请求。这是因为对于dma请求,需要连续的内存页,因此需要分配冷页。上述冷页表示该空闲页已经不再高速缓存中,热页表示该空闲页仍然在高速缓存中。
25.对于需要对iommu 104进行页表更换的场景,对于支持page fault的iommu,可采用age fault方式更换iommu页表。vmm 20可在必要时从iommu存储的页表中回收物理内存,即回收hpa对应的内存;并将存储在物理内存中的数据存储在硬盘上的页表文件(paging file)中,这样能保证数据不丢失,同时释放的物理内存页面供其它进程使用。
26.当直通设备102再次需要访问回收的内存时,vmm 20可从paging file中查找数据,分配空闲的物理内存页,并将数据写入物理内存页中,然后将新的物理内存页的hpa映
射到进程需要操作的gpa对应的虚拟空间中,并写入iommu存储的页表中,获得访问所需的数据和内存空间。在ommu存储的页表增加一个物理内存页对应的hpa,这就是一次page fault。
27.对于不支持page fault的iommu,本技术实施例提供一种新的内存换页方式,主要实施方式如下:在本技术实施例中,vmm 20可确定需要页面更新的gpa。在本技术实施例中,不限定vmm 20确定需要页表更新的gpa(a)的具体实施方式。在一些实施例中,vmm 20可获取页表更新请求。其中,页表更新请求包含需要页表更新的gpa(a)。vmm 20获取的页表更新请求可为vm 101对应的用户端提供的页表更新请求。例如,在云计算领域,用户可向云服务端申请虚拟机资源,vm 101为云服务端为用户分配的虚拟机。相应地,用户端即为申请该虚拟机的用户侧的计算设备。或者,页表更新请求也可为云服务端的运维侧设备发送的页表更新请求;等等。
28.进一步,vmm 20可从页表更新请求中,获取需要页表更新的gpa(记为a)。进一步,vmm 20可从iommu 104存储的页表中,确定需要页表更新的gpa(a)对应的hpa,记为pa。具体地,vmm 20可将需要页表更新的gpa(a)在iommu 104存储的页表中进行匹配,以得到需要页表更新的gpa(a)对应的hpa(pa)。
29.由于需要页表更新的gpa(a)对应的hpa是需要被更换的hpa,因此,vmm 20还可从宿主机内存103的空闲物理地址中,确定另一hpa,记为pr。在本技术实施例中,为了便于描述和区分,将需要页表更新的gpa(a)对应的hpa,定义为第一hpa(pa);并将确定出的替换第一hpa的另一hpa,定义为第二hpa(记为pr)。
30.可选地,vmm 20可从宿主机内存103的空闲物理地址中,任选一个空闲的物理地址,作为第二hpa(pr)。或者,vmm 20可按照设定的内存页面置换算法,从宿主机内存103的空闲物理地址中,确定第二hpa(pr)。内存页面置换算法包括但不局限于:最佳置换算法(opt)、先进先出算法(fifo)、最近最少使用算法(lru)、时钟置换算法(clock)或者改进型的时钟置换算法等。
31.其中,最佳置换算法(opt)是指选择的页面以后永不使用的,或者是在最长时间内不再被访问的内存页,并将该内存页对应的hpa,作为第二hpa(pr)。
32.先进先出算法(fifo)是指将调入内存的内存页按照调入的先后顺序排成一个队列,选择最先进入内存的内存页对应的hpa,作为第二hpa(pr)。
33.最近最少使用算法(lru)是指选择出的内存页为最近未使用的内存页;并确定选择出的内存页对应的hpa,为第二hpa(pr)。可选地,可用访问字段记录该内存页自上次被访问以来所经历的时间,当需要页表替换时,从空闲的内存页中,选择对应的时间值最大的内存页,作为最近未使用的内存页。
34.时钟置换算法(clock)是指内存中的内存页通过链接指针,链接成一个循环队列,增加一个字段访问位字段。当某一内存页首次进入内存时,则将该页对应的访问位字段设置为1;当该页随后被访问到时,访问位字段也会被设置为1。该方法中,当需要内存换页时,操作系统扫描缓冲区,以查找访问位字段被置为0的内存页,并将扫描到的第一个被设置为-的内存页对应的hpa,作为第二hpa(pr)。
35.上述实施例列举的确定hpa的方式仅为示例性说明,并不构成限定。
36.在确定出替换第一hpa(pa)的第二hpa(pr)之后,vmm 20可将第一hpa(pa)存储的数据复制至第二hpa(pr);并将iommu 104的页表记录的需要页表更新的gpa(a)对应的hpa更新为第二hpa(pr)。
37.在本实施例提供的计算系统中,针对不支持page fault的iommu,vmm可确定需要页面更新的gpa,从宿主机的iommu存储的页表中,确定该gpa对应的第一hpa;并从宿主机内存的空闲物理地址中,确定替换第一hpa的第二hpa;进一步,可将第一hpa存储的数据复制至第二hpa;并将iommu的页表记录的需要更新的gpa对应的hpa更新为第二hpa,对不支持page fault的iommu实现了页表更换。
38.进一步,在对iommu页表更换之后,还可将iommu 104的页表刷新到输入/输出转译后备缓冲区(input/output translation lookaside buffer,iotlb)。
39.其中,iotlb具有固定数目的空间槽,用于存放将虚拟地址映射至物理地址的页表,即上述iommu 104的页表。其搜索关键字为虚拟机的物理内存地址,其搜索结果为宿主机的物理地址(hpa)。如果dma请求的虚拟机物理地址(gpa)在iotlb中存在,可提高地址翻译速率,之后就可以使用得到的宿主机物理地址(hpa)访问宿主机内存。
40.在直通技术领域中,如图1所示,宿主机10不仅支持直通设备102对宿主机内存的访问,还支持虚拟机的cpu(vcpu 101a)对宿主机内存的访问。vcpu 101a可申请虚拟机的地址空间(virtual address space,vas),即gpa。由于vas不是真正的物理内存空间,操作系统必须将vas映射到物理内存空间,进程才能存储进程上下文(process context)。
41.对于宿主机10可设置内存管理单元(mmu)105。mmu 105维护的页表记录有虚拟机物理地址与宿主机物理地址之间的对应关系。mmu 105可基于页表记录的虚拟机物理地址与宿主机物理地址之间的对应关系,将vcpu 101a访问的gpa转换为hpa,这样,vcpu 101a可访问hpa对应的内存空间。
42.在本技术实施例中,在iommu 104更新页表时,需要同步更新mmu 105的页表。这是因为若对iommu 104更新页表中的hpa进行更新,mmu 105中的页表不同步更新,会导致需要页表更新的gpa(a)在iommu 104的页表和mmu 105中的页表对应不同的hpa;而在iommu 104更新页表中的hpa后,已将原hpa(第一hpa)存储的数据更新到替换后的hpa(第二hpa),原hpa已释放或已存储其它数据,这样会导致mmu 105访问上述需要页面更新的gpa时,仍然会访问第一hpa(pa),导致访问缺页或错误。
43.基于上述分析,在本技术实施例中,vmm 20在确定需要页表更新的gpa(a)之后,还可从mmu 105的页表中,删除需要更新的gpa;并阻塞vcpu 101a对需要页表更新的gpa(a)的访问。
44.由于mmu 105支持page fault,因此,vmm 20可在执行page fault(页表中断)流程时,阻塞vcpu 101a对需要页表更新的gpa(a)的访问。具体地,vmm 20在获取vcpu 101a对需要页表更新的gpa(a)的访问请求时,可利用需要页表更新的gpa(a)查询mmu 105的页表。由于mmu 105的页表中已删除需要页表更新的gpa(a),因此,在mmu 105的页表中不能查询到需要页表更新的gpa(a)对应的hpa,可触发mmu 105的页表中断流程。即在mmu 105的页表中未查询到需要页表更新的gpa(a)对应的hpa的情况下,执行页表中断流程。在本技术实施例中,为了阻塞vcpu 101a对需要页表更新的gpa(a)的访问,可在执行页表中断流程的过程中,对mmu 105的页表更换进行加锁处理,进而阻塞vcpu 101a对需要页表更新的gpa(a)的
访问。如果不对mmu 105的页表更换进行加锁处理,mmu 105执行页表中断流程,将会为mmu 105页表记录的需要更新的gpa重新分配hpa,极易导致同一gpa在mmu 105页表和iommu 104的页表中对应的hpa不一致。
45.进一步,在iommu 104的页表更新完成之后,可在mmu 105的页表中添加上述需要更新的gpa,并将需要更新的gpa对应的hpa更新为第二hpa(pr)。进一步,可恢复vcpu 101a对上述需要更新的gpa的访问。
46.在一些实施例中,在iommu的页表更新过程中,对于需要页表更新的gpa(a)对应的hpa存储的数据可能存在数据更新。用户对需要页表更新的gpa(a)对应的hpa存储的数据的更新,vmm 20是无感知的。因此,vmm 20无法确定该数据更新是发生在iommu的页表更新之后,还是发生在iommu的页表更新过程中。若需要页表更新的gpa(a)对应的hpa存储的数据产生更新,发生在已完成将第一hpa(pa)存储的数据复制至第二hpa(pr)之后,但在将iommu 104的页表记录的需要页表更新的gpa(a)对应的hpa更新为第二hpa(pr)之前,则对需要页表更新的gpa(a)对应的hpa存储的数据的更新,是对第一hpa(pa)存储的数据进行更新的,导致第二hpa(pr)存储的数据为更新前的数据,无法实现数据同步更新。
47.为了解决上述问题,在本技术一些实施例中,还可申请用于临时存储第二hpa(pr)中数据的快照的第三hpa(ps)。具体地,可从宿主机内存的空闲物理地址中,确定第三hpa(ps);并在第一hpa(pa)存储的数据复制至第二hpa(pr)之后,将第二hpa(pr)存储的数据复制至第三hpa(ps),即第三hpa(ps)存储的数据为第二hpa(pr)存储的数据的快照。
48.进一步,可比较第一hpa(pa)存储的数据与第三hpa(ps)存储的数据是否相同。可选地,可以字节为单位,逐字节比较第一hpa(pa)存储的数据与第三hpa(ps)存储的数据是否相同。若第一hpa(pa)存储的数据与第三hpa(ps)存储的数据相同,说明在iommu页表更新过程中,需要页表更新的gpa(a)对应的hpa存储的数据未更新。因此,在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据相同的情况下,可释放第三宿主机物理地址对应的内存空间。进一步,还可在mmu 105的页表中添加上述需要更新的gpa,并将需要更新的gpa对应的hpa更新为第二hpa(pr)。进一步,可恢复vcpu 101a对上述需要更新的gpa的访问。
49.若第一hpa(pa)存储的数据与第二hpa(pr)存储的数据存在不同数据,说明在iommu页表更新过程中,需要页表更新的gpa(a)对应的hpa存储的数据发生更新。由于vmm 20无法感知hpa存储的数据发生更新的时机,因此,本技术实施例中,还需要确定需要页表更新的gpa(a)对应的hpa存储的数据发生更新的时机。若需要页表更新的gpa(a)对应的hpa存储的数据发生更新,发生在iommu 104的页表记录的第一hpa(pa)更新为第二hpa(pr)之后,说明发生数据更新的hpa为第二hpa(pr)。由于iommu 104的页表记录的需要页表更新的gpa(a)对应的hpa已为第二hpa(pr),因此,直通设备102在访问需要页表更新的gpa(a)时,访问的是第二hpa(pr)的内存空间,访问的是更新后的数据,访问准确度较高。
50.相应地,若需要页表更新的gpa(a)对应的hpa存储的数据发生更新,发生在第一hpa(pa)的数据复制至第二hpa(pr)之后,但在iommu 104的页表记录的第一hpa(pa)更新为第二hpa(pr)之前,说明发生数据更新的hpa为第一hpa(pa),而第二hpa(pr)存储的数据为更新前的数据。这样,在iommu 104的页表记录的第一hpa(pa)更新为第二hpa(pr)之后,直通设备102在访问需要页表更新的gpa(a)时,访问的是第二hpa(pr)的内存空间,访问的是更新前的数据,访问准确度较低。
51.基于上述分析,在本技术实施例中,在第一hpa(pa)存储的数据与第二hpa(pr)存储的数据存在不同数据的情况下,可确定数据不同的逻辑地址。其中,逻辑地址是指数据不同的数据在hpa中的相对地址。例如第n个字节的数据不同等。
52.在本实施例中,针对数据不同的第一逻辑地址b,可判断第二hpa(pr)存储的数据处于第一逻辑地址b的数据pr(b),是否与第三hpa(ps)存储的数据处于第一逻辑地址b的数据ps(b)是否相同。若判断结果为否,即pr(b)不等于ps(b),说明发生数据更新的为第二hpa(pr)。由于直通设备102在访问需要页表更新的gpa(a)时,访问的是第二hpa(pr)的内存空间,访问的是更新后的数据,因此,在pr(b)不等于ps(b)的情况下,可释放第三hpa(ps)对应的内存空间。进一步,还可在mmu 105的页表中添加上述需要更新的gpa,并将需要更新的gpa对应的hpa更新为第二hpa(pr)。进一步,可恢复vcpu 101a对上述需要更新的gpa的访问。
53.相应地,在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据的情况下,若pr(b)等于ps(b),由于pa(b)不等于ps(b),说明发生数据更新的为第一hpa(pa),即数据更新发生在第一hpa(pa)的数据复制至第二hpa(pr)之后,但在iommu 104的页表记录的第一hpa(pa)更新为第二hpa(pr)之前。因此,在在第一hpa(pa)存储的数据与第二hpa(pr)存储的数据存在不同数据的情况下,若pr(b)等于ps(b),可将第二hpa(pr)存储的数据中处于第一逻辑地址b的数据更新为第一宿主机物理地址存储的数据中处于第一逻辑地址b的数据,即将pr(b)更新为pa(b)。进一步,可释放第三hpa(ps)对应的内存空间。进一步,还可在mmu 105的页表中添加上述需要更新的gpa,并将需要更新的gpa对应的hpa更新为第二hpa(pr)。进一步,可恢复vcpu 101a对上述需要更新的gpa的访问。
54.上述在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据的情况下,进行的逻辑步骤可由原子指令完成。在原子指令执行过程中,不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。这样,可保证在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据的情况下,执行逻辑步骤不会被打断,可保证在对执行逻辑步骤的过程中,第二hpa(pr)中的数据不会被再次更新。原子指令可保证iommu页表更新时的页表修改时序,在直通设备102的dma写请求并发时,依然可保证第一hpa(pa)存储的数据与第二hpa(pr)存储的数据存在不同数据的情况下,进行的逻辑步骤的原子性。
55.为了确保在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据的情况下,执行的逻辑步骤的准确度,本技术实施例还可限定直通设备102对每个hpa最多只能写一次。这是因为若直通设备102可对hpa写多次,若需要页表更新的gpa(a)对应的hpa存储的数据的更新发生多次,假设gpa(a)对应的hpa存储的数据的更新一次发生在第一hpa(pa)的数据复制至第二hpa(pr)之后,但在iommu 104的页表记录的第一hpa(pa)更新为第二hpa(pr)之前,2次发生在iommu 104的页表记录的第一hpa(pa)更新为第二hpa(pr)之后。其中,发生在第一hpa(pa)的数据复制至第二hpa(pr)之后,但在iommu 104的页表记录的第一hpa(pa)更新为第二hpa(pr)之前的一次数据更新,更新的为第一hpa(pa)的数据;发生在iommu 104的页表记录的第一hpa(pa)更新为第二hpa(pr)之后的2次数据更新,更新的是第二hpa(pr)的数据。假设这3次数据更新,更新的都是逻辑地址c的数据。假设更新后的pa(c)=3;而第二hpa(pr)中逻辑地址c的数据发生2次更新后更新为原数据。例如,第二hpa(pr)中
逻辑地址c的原数据pr(c)=1;第一次更新后pr(c)=2;第二次更新后pr(c)=1。第三hpa(ps)中存储的数据为第二hpa(pr)存储的原数据的快照,即pr(c)=1。这样,ps(c)不等于pa(c),但ps(c)= pr(c),则应该执行将pr(c)更新为pa(c)的步骤。若将pr(c)更新为pa(c),则会导致pr(c)发生错误,因为对第二hpa(pr)的逻辑地址c进行数据更新,比对第一hpa(pa)的逻辑地址c进行数据更新较晚。因此,在本技术实施例中,限定直通设备102对每个hpa最多只能写一次。这样,就可防止出现上述数据更新错误的问题。
56.除了上述系统实施例之外,本技术实施例还提供相应的内存换页方法。下面结合具体实施例进行示例性说明。
57.图2为本技术实施例提供的内存换页方法的流程示意图。如图2所示,内存换页方法包括:s201、确定需要页表更新的gpa(a)。
58.s202、从宿主机的iommu存储的页表中,确定gpa(a)对应的第一hpa。
59.s203、从宿主机内存的空闲物理地址中,确定第二hpa。
60.s204、将第一hpa存储的数据复制至第二hpa。
61.s205、将iommu的页表记录的gpa(a)对应的hpa更新为第二hpa。
62.在本实施例中,对于不支持page fault的iommu,在步骤s201中,可确定需要页面更新的gpa。在本技术实施例中,不限定确定需要页表更新的gpa(a)的具体实施方式。在一些实施例中,可获取页表更新请求。进一步,可从页表更新请求中,获取需要页表更新的gpa(记为a)。
63.进一步,在步骤s202中,可从iommu存储的页表中,确定需要页表更新的gpa(a)对应的第一hpa,记为pa。
64.由于需要页表更新的gpa(a)对应的hpa是需要被更换的hpa,因此,在步骤s203中,还可从宿主机内存的空闲物理地址中,确定第二hpa,记为pr。关于步骤s203的具体实施方式,可参见上述系统实施例的相关内容,在此不再赘述。
65.在确定出替换第一hpa(pa)的第二hpa(pr)之后,在步骤s204中,可将第一hpa(pa)存储的数据复制至第二hpa(pr);并在步骤s205中,将iommu 的页表记录的需要页表更新的gpa(a)对应的hpa更新为第二hpa(pr)。
66.在本实施例中,针对不支持page fault的iommu,vmm可确定需要页面更新的gpa,从宿主机的iommu存储的页表中,确定该gpa对应的第一hpa;并从宿主机内存的空闲物理地址中,确定替换第一hpa的第二hpa;进一步,可将第一hpa存储的数据复制至第二hpa;并将iommu的页表记录的需要更新的gpa对应的hpa更新为第二hpa,对不支持page fault的iommu实现了页表更换。
67.进一步,在对iommu页表更换之后,还可将iommu的页表刷新到iotlb。这样,在直通设备访问宿主机内存时,对于直通设备发出的dma请求,可优先在iotlb中进行匹配。如果dma请求的虚拟机物理地址(gpa)在iotlb中存在,可提高地址翻译速率,之后就可以使用得到的宿主机物理地址(hpa)访问宿主机内存。
68.在直通技术领域中,宿主机不仅支持直通设备对宿主机内存的访问,还支持虚拟机的cpu(vcpu)对宿主机内存的访问。对于宿主机可设置内存管理单元(mmu)。mmu维护的页表记录有虚拟机物理地址与宿主机物理地址之间的对应关系。mmu可基于页表记录的虚拟
机物理地址与宿主机物理地址之间的对应关系,将vcpu访问的gpa转换为hpa,这样,vcpu可访问hpa对应的内存空间。
69.在本技术实施例中,在iommu更新页表时,需要同步更新mmu的页表。因此,在步骤s201之后,还可从mmu的页表中,删除需要更新的gpa;并阻塞vcpu对需要页表更新的gpa(a)的访问。
70.由于mmu支持page fault,因此,可在执行page fault(页表中断)流程时,阻塞vcpu对需要页表更新的gpa(a)的访问。具体地,vmm在获取vcpu对需要页表更新的gpa(a)的访问请求时,可利用需要页表更新的gpa(a)查询mmu的页表。由于mmu的页表中已删除需要页表更新的gpa(a),因此,在mmu的页表中不能查询到需要页表更新的gpa(a)对应的hpa,可触发mmu的页表中断流程。即在mmu的页表中未查询到需要页表更新的gpa(a)对应的hpa的情况下,执行页表中断流程。在本技术实施例中,为了阻塞vcpu对需要页表更新的gpa(a)的访问,可在执行页表中断流程的过程中,对mmu的页表更换进行加锁处理,进而阻塞vcpu对需要页表更新的gpa(a)的访问。
71.进一步,在iommu的页表更新完成之后,可在mmu的页表中添加上述需要更新的gpa,并将需要更新的gpa对应的hpa更新为第二hpa(pr)。进一步,可恢复vcpu对上述需要更新的gpa的访问。
72.在一些实施例中,在iommu的页表更新过程中,对于需要页表更新的gpa(a)对应的hpa存储的数据可能存在数据更新。用户对需要页表更新的gpa(a)对应的hpa存储的数据的更新,vmm是无感知的。因此,vmm 20无法确定该数据更新是发生在iommu的页表更新之后,还是发生在iommu的页表更新过程中。若需要页表更新的gpa(a)对应的hpa存储的数据产生更新,发生在已完成将第一hpa(pa)存储的数据复制至第二hpa(pr)之后,但在将iommu的页表记录的需要页表更新的gpa(a)对应的hpa更新为第二hpa(pr)之前,则对需要页表更新的gpa(a)对应的hpa存储的数据的更新,是对第一hpa(pa)存储的数据进行更新的,导致第二hpa(pr)存储的数据为更新前的数据,无法实现数据同步更新。
73.为了解决上述问题,在本技术一些实施例中,还可申请用于临时存储第二hpa(pr)中数据的快照的第三hpa(ps)。具体地,可从宿主机内存的空闲物理地址中,确定第三hpa(ps);并在第一hpa(pa)存储的数据复制至第二hpa(pr)之后,将第二hpa(pr)存储的数据复制至第三hpa(ps),即第三hpa(ps)存储的数据为第二hpa(pr)存储的数据的快照。
74.进一步,可比较第一hpa(pa)存储的数据与第三hpa(ps)存储的数据是否相同。可选地,可以字节为单位,逐字节比较第一hpa(pa)存储的数据与第三hpa(ps)存储的数据是否相同。若第一hpa(pa)存储的数据与第三hpa(ps)存储的数据相同,说明在iommu页表更新过程中,需要页表更新的gpa(a)对应的hpa存储的数据未更新。因此,在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据相同的情况下,可释放第三宿主机物理地址对应的内存空间。进一步,还可在mmu的页表中添加上述需要更新的gpa,并将需要更新的gpa对应的hpa更新为第二hpa(pr)。进一步,可恢复vcpu对上述需要更新的gpa的访问。
75.若第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据,说明在iommu页表更新过程中,需要页表更新的gpa(a)对应的hpa存储的数据发生更新。在本技术实施例中,在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据的情况下,可确定数据不同的逻辑地址。其中,逻辑地址是指数据不同的数据在hpa中的相对地址。例
如第n个字节的数据不同等。
76.在本实施例中,针对数据不同的第一逻辑地址b,可判断第二hpa(pr)存储的数据处于第一逻辑地址b的数据pr(b),是否与第三hpa(ps)存储的数据处于第一逻辑地址b的数据ps(b)是否相同。若判断结果为否,即pr(b)不等于ps(b),说明发生数据更新的为第二hpa(pr)。由于直通设备102在访问需要页表更新的gpa(a)时,访问的是第二hpa(pr)的内存空间,访问的是更新后的数据,因此,在pr(b)不等于ps(b)的情况下,可释放第三hpa(ps)对应的内存空间。进一步,还可在mmu的页表中添加上述需要更新的gpa,并将需要更新的gpa对应的hpa更新为第二hpa(pr)。进一步,可恢复vcpu对上述需要更新的gpa的访问。
77.相应地,在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据的情况下,若pr(b)等于ps(b),由于pa(b)不等于ps(b),说明发生数据更新的为第一hpa(pa),即数据更新发生在第一hpa(pa)的数据复制至第二hpa(pr)之后,但在iommu的页表记录的第一hpa(pa)更新为第二hpa(pr)之前。因此,在在第一hpa(pa)存储的数据与第二hpa(pr)存储的数据存在不同数据的情况下,若pr(b)等于ps(b),可将第二hpa(pr)存储的数据中处于第一逻辑地址b的数据更新为第一宿主机物理地址存储的数据中处于第一逻辑地址b的数据,即将pr(b)更新为pa(b)。进一步,可释放第三hpa(ps)对应的内存空间。进一步,还可在mmu的页表中添加上述需要更新的gpa,并将需要更新的gpa对应的hpa更新为第二hpa(pr)。进一步,可恢复vcpu对上述需要更新的gpa的访问。
78.为了清楚说明上述内存换页方法的具体实施方式,下面结合图3所示的具体实施例对内存换页方法进行示例性说明。如图3所示,该内存换页方法主要包括:s1、确定需要页表更新的gpa(a)。
79.s2、从宿主机的mmu的页表中,删除需要页表更新的gpa(a)。
80.s3、阻塞虚拟机的cpu对gpa(a)的访问。
81.s4、从宿主机的iommu存储的页表中,确定gpa(a)对应的第一hpa(pa)。
82.s5、从宿主机内存的空闲物理地址中,确定第二hpa(pr)。
83.s6、从宿主机内存的空闲物理地址中,确定第三hpa(ps)。
84.s7、将第一hpa(pa)存储的数据复制至第二hpa(pr),并将第二hpa(pr)存储的数据复制至第三hpa(ps)。
85.s8、将iommu的页表记录的gpa(a)对应的hpa更新为第二hpa(pr);并刷新iotlb。
86.s9、以字节为单位,逐字节比较第一hpa(pa)存储的数据与第三hpa(ps)存储的数据是否相同。若相同,执行步骤s12。若存在数据不同的情况,执行步骤s10。
87.s10、针对数据不同的第一逻辑地址b,判断第二hpa(pr)存储的数据中处于第一逻辑地址b的数据pr(b),是否与第三hpa(ps)存储的数据中处于第一逻辑地址b的数据ps(b)相同。即判断pr(b)与ps(b)是否相同。若判断结果为否,执行步骤s12。若判断结果为是,执行步骤s11。
88.s11、将第二hpa存储的数据中处于第一逻辑地址b的数据pr(b),更新为第一hpa存储的数据中处于第一逻辑地址b的数据pa(b);即pr(b)=pa(b)。接着执行步骤s12。
89.s12、释放第三hpa(ps)对应的内存空间。
90.s13、在mmu的页表中添加gpa(a),并将mmu的页表记录的gpa(a)对应的hpa更新为第二hpa(pr)。
91.上述在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据的情况下,进行的逻辑步骤,即步骤s10和s11可由原子指令完成。具体原因可参见上述系统实施例的相关内容,在此不再赘述。
92.为了确保在第一hpa(pa)存储的数据与第三hpa(ps)存储的数据存在不同数据的情况下,执行的逻辑步骤s10和s11的准确度,本技术实施例还可限定直通设备对每个hpa最多只能写一次。具体原因分析可参见上述系统实施例的相关内容,在此不再赘述。
93.需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤s201和s202的执行主体可以为设备a;又比如,步骤s201的执行主体可以为设备a,步骤s202的执行主体可以为设备b;等等。
94.另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如s201、s202等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。
95.相应地,本技术实施例还提供一种存储有计算机指令的计算机可读存储介质,当计算机指令被一个或多个处理器执行时,致使一个或多个处理器执行上述内存换页方法中的步骤。
96.本技术实施例还提供一种计算机程序产品,包括:计算机程序;当计算机程序被处理器执行时,致使处理器执行上述内存换页方法中的步骤。在本技术实施例中,不限定计算机程序的实现形态。在一些实施例中,计算机程序产品可实现为虚拟机管理程序。可选地,该虚拟机管理程序可运行于虚拟机的宿主机的cpu上。
97.需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
98.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
99.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
100.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
101.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计
算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
102.在一个典型的配置中,计算设备包括一个或多个处理器 (cpu)、输入/输出接口、网络接口和内存。
103.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (ram) 和/或非易失性内存等形式,如只读存储器 (rom) 或闪存(flash ram)。内存是计算机可读介质的示例。
104.计算机的存储介质为可读存储介质,也可称为可读介质。可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (pram)、静态随机存取存储器 (sram)、动态随机存取存储器 (dram)、其他类型的随机存取存储器 (ram)、只读存储器 (rom)、电可擦除可编程只读存储器 (eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器 (cd-rom)、数字多功能光盘 (dvd) 或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
105.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
106.以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1