CN116185902A - 一种表切分方法、系统、电子设备及可读介质 - Google Patents
一种表切分方法、系统、电子设备及可读介质 Download PDFInfo
- Publication number
- CN116185902A CN116185902A CN202310438634.4A CN202310438634A CN116185902A CN 116185902 A CN116185902 A CN 116185902A CN 202310438634 A CN202310438634 A CN 202310438634A CN 116185902 A CN116185902 A CN 116185902A
- Authority
- CN
- China
- Prior art keywords
- page
- page table
- target
- mapping
- address
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请提供了一种表切分方法、系统、电子设备及可读介质,涉及操作系统技术领域。所述方法包括:在目标事件需求的目标地址区域映射所在的第一页表页不是支持第一粒度的情况下,基于第一页表页,将目标地址区域映射进行切分处理,获得第二页表页;所述第二页表页包括与目标地址区域映射对应的至少一个目标页表项,所述目标页表项的第一粒度为支持所述目标事件运行的粒度。在目标事件出现时,可以动态的对不支持目标事件运行的第一页表页进行切分,而其他的页表页可以保持原来的状态,从而降低页表页的数量,既能够实现更大粒度的内核页表,又提升内核页表的兼容性。
Description
技术领域
本申请涉及操作系统技术领域,特别是涉及一种表切分方法、系统、电子设备及可读介质。
背景技术
在操作系统中建立有用于映射虚拟地址和物理地址的内核页表,内核页表能够将线性的虚拟地址(Virtual Address,VA)映射到线性的物理地址(Physical Address,PA),从而系统可以通过内核页表实现从虚拟地址到物理地址的转换,以供系统和系统中的进程通过虚拟地址访问物理地址。内核页表一般由多级的页表页结构成,其中粒度最小的页表页称为页表项。在使用内核页表时,需要先查找到对应的页表页,并依据页表页中记录的虚拟地址与物理地址之间的映射关系进行地址翻译。
在先技术中,在内核页表建立时,可以设置其中的页表页的映射方式,例如页表项粒度的映射方式,在页表项粒度映射方式中,页表页中的每个页表项作为一个映射单元参与地址翻译。有一些较为特殊的处理任务需要为其分配特定粒度的地址区域映射才能正常运行,例如一些需要进行较高级别的权限控制的处理任务,为了兼容这些对页表页的粒度有特定需求的处理任务,生成内核页表时,只能将内核页表中的所有页表页设置为这些处理任务需要的第一粒度,但采用第一粒度的映射方式会提升内核页表中的页表页数量,地址翻译过程中需要查找较多的映射单元才能找到需要的映射关系,导致内核页表的地址翻译效率较差、并且页表缓存区命中率较低。
发明内容
鉴于上述问题,本申请实施例提供一种表切分方法、系统、电子设备及可读介质,以解决内核页表的地址翻译效率较差、兼容性差的问题。
为了解决上述问题,本申请实施例公开了一种表切分方法,包括:
响应于目标事件,确定所述目标事件在内核页表中对应的第一页表页;所述第一页表页包括所述目标事件需求的目标地址区域映射;所述目标地址区域映射为虚拟地址参数和物理地址段之间的映射;
在所述第一页表页的映射方式为目标映射方式的情况下,基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第二页表页;所述第二页表页包括与目标地址区域映射对应的至少一个目标页表项,所述目标页表项的第一粒度为支持所述目标事件运行的粒度。
本申请实施例还公开了一种内核页表切分系统,所述表切分系统配置有至少一个服务模块、地址翻译模块、内核页表存储模块、内核页表切分模块,所述内核页表切分模块中配置有计算机程序,所述计算机程序被所述内核页表管理模块执行时实现上述方法。
相应的,本申请实施例还公开了一种电子设备,包括:
处理器和存储器;
所述处理器上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行上述方法。
相应的,本申请实施例还公开了一个或多个机器可读介质,其上存储有可执行代码,当由一个或多个处理器执行时,使得处理器执行上述方法。
本申请实施例包括以下优点:
本申请实施例中,处理器对于出现的需要第一粒度的第二页表页支持以运行的目标事件,在该目标事件需求的目标地址区域映射所在的第一页表页不是支持第一粒度的情况下,基于第一页表页,将目标地址区域映射进行切分处理,获得第一粒度的第二页表页,从而可以支持该目标事件的运行。上述方式中,在目标事件出现时,可以动态的对不支持目标事件运行的第一页表页进行切分,而其他的页表页可以保持原来的状态,从而可以不用将全部的内核页表构建为第一粒度的页表页,降低了页表页的数量,整体页表页的数量变少,在整体上既能够实现更大粒度的内核页表,支持内核页表中部分页表采用块映射或者连续映射,同时也能满足需求第一粒度的服务运行,在保持页表页具有较高翻译效率、提高页表缓存区命中率的同时,还能提升内核页表的兼容性。
附图说明
图1是本申请一实施例提供的一种应用场景示意图;
图2是本申请一实施例提供的另一种应用场景示意图;
图3是本申请一实施例提供的又一种应用场景示意图;
图4是本申请一实施例提供的再一种应用场景示意图;
图5是本申请一实施例提供的一种表切分方法的步骤流程图;
图6是本申请一实施例提供的一种内核页表结构示意图;
图7是本申请一实施例提供的另一种表切分方法的步骤流程图;
图8是本申请一实施例提供的一种表切分系统的结构示意图;
图9是本申请一实施例提供的一种表切分装置的结构示意图;
图10是本申请另一实施例提供的一种装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
为使本领域技术人员更好地理解本申请,以下对本申请涉及的概念进行说明:
目标事件:需要本申请实施例进行响应的事件,目标事件可以指示需要第一粒度页表项的处理任务产生,从而需要进一步确认需要切分的第一页表页,通过将第一页表页切分为第一粒度以满足目标事件指示的处理任务的运行条件,保证该处理任务正常运行,因此目标事件可以指示切分页表的时机以及页表中需要被切分的具体位置,目标事件可以由技术人员预先根据实际需求设定,示例性地,目标事件可以为某一个服务的启动事件。
内核页表:是指系统内核的页表(page table),是一种操作系统内核管理系统虚拟内存的数据结构。内核页表能够将线性的虚拟地址(Virtual Address,VA)映射到线性的物理地址(Physical Address,PA),从而系统可以通过内核页表实现从虚拟地址到物理地址的转换,以供系统和系统中的进程通过虚拟地址访问物理地址。在操作系统中,进程都可以分配有线性的虚拟地址参数,内核页表是用于管理这些虚拟地址参数到物理地址空间的映射关系。不同的进程的内核空间是共享的,不同进程的内核空间页表页是相同的。
页表页:内核页表将虚拟地址参数划分成一系列页表页,每个页表页映射到物理存储空间的一个连续区域,这些页表页可以包含多级结构,示例性地,一级页表页(PageTable Directory,PTD)、二级页表页(Page Upper Directory,PUD)、三级页表页(PageMiddle Directory,PMD)、四级页表页(Page Table Entry,PTE)等。其中,下一级页表可以为上一级页表的页表项,比如一级页表PTD中的页表项可以为PUD;二级页表PUD中的页表项可以为PMD,比如在在ARM64架构的Linux操作系统中,PUD可以有1024项PMD;三级页表PMD中的页表项可以为PTE,比如在在ARM64架构的Linux操作系统中,PMD可以有1024项PTE。
其中,一级页表页管理整个虚拟地址参数,是最顶层的页表,而二级页表页和三级页表页则是中间层的页表,用于管理更小的虚拟地址参数,一个PTD包含可以多个二级页表页,一个二级页表页可以包含多个三级页表页,每个三级页表页可以包含多个四级页表页。其中,每个PTE可以对应一个4KB物理页,一个页表项用于映射一个4KB的内存地址空间,页表项中不仅存储了虚拟地址与物理地址的映射关系,还存储有其管理的页面状态(示例性地是否被分配、是否可读写等)。本申请实施例中,内核页表可以有两个层级(PTD和PUD)、三个层级(PTD、PUD和PMD)、或者四个层级(PTD、PUD、PMD和PTE),本申请实施例不对其加以限制。
第一页表页:目标事件需求的目标地址区域映射所在的内核页表页,在本申请实施例中,第一页表页在其映射方式为目标映射方式的情况下,第一页表页为待切分的页表页。
第二页表页:该页表页中具有第一粒度的目标页表项,该页表项具有目标地址区域映射。
第三页表页:在第一页表页为块映射的情况下,为了进行切分而重新分配的页表页。
目标页表项:第二页表中的项目。
页表缓存区: Translation Lookaside Buffer,TLB。在进行地址翻译(查找虚拟地址对应的物理地址)时,首先会从页表缓存区中遍历页表页,并在其中查找虚拟地址所对应的物理地址。
第一粒度:支持目标事件运行的目标页表项的映射空间大小,例如,在ARM64架构的Linux操作系统中,第一粒度可以为PTE页表项的粒度,即PTE粒度。其中,不同层级的页表页所映射的虚拟地址范围不同,其粒度也不同,页表页的粒度与该页表页映射的虚拟地址范围正相关。在不同指令集架构和不同操作系统,相同层级的页表页所映射的虚拟地址参数大小也会存在区别,例如,在ARM64架构的Linux操作系统中,每个二级页表页PUD可以映射1GB的内存地址空间,每个三级页表页PMD可以映射2MB的内存地址空间,每个四级页表页PTE可以映射4KB的内存地址空间。
目标事件:内核一些特殊服务产生的事件,该目标事件需要第一粒度的页表页支持运行。
块映射:一种将虚拟地址映射到物理地址的方式,在块映射(Block Mapping)中,虚拟地址参数被划分为一系列大小相等的块,每个块都映射到物理地址空间的一个连续区域。可以通过将虚拟地址参数划分成块来降低页表项的数量,从而提高虚拟内存管理的效率。
连续映射:一种将虚拟地址映射到物理地址的方式,在连续映射(ContiguousMapping)中,虚拟地址参数的每个地址都映射到物理地址空间的一个固定位置,示例性地,虚拟地址 0x1000对应的物理地址是0x10000。连续映射通常可以用于直接内存访问(Direct Memory Access,DMA)和设备驱动程序,可以使设备访问物理内存变得更快。
崩溃内核:崩溃内核(Crash kernel)是一种特殊的内核,用于在内核崩溃时(kernel panic)进行故障排查和分析。在发生kernel panic时,操作系统会调用崩溃内核运行,收集系统发生异常的内存数据,并生成vmcore文件,从而可以通过对vmcore文件进行后续分析,了解kernel panic发生的原因。
非连续性内存映射区:非连续性内存映射区是非连续性内存管理分配的虚拟地址映射区,其中,非连续性内存管理(Virtual Memory Allocator,Vamlloc)是一种动态分配虚拟内存的机制,可以使用Vmalloc来创建一个非连续的虚拟内存空间,进程可以在这个非连续的虚拟内存空间的指针来访问并使用。
内存栅栏;内存栅栏(Kernel Electric Fence,KFENCE)是一种低开销的在Linux内核中检测内存错误的机制。其可以通过创建自己的专有的检测内存池(kfence pool),在内存边界处插入电子栅栏(fence page)来检测和捕获内存错误,示例性地越界访问、内存泄漏、重复释放等内存错误。
停机机制:也可称为Stop Machine机制,停机机制可以由一个处理器核心发起,停止其余所有处理器核心的运行。停机机制适用于需要对内核进行更新或者修改的场景,示例性地,在更新内核时、热插拔设备时,可以采用停机机制定制处理器核心的运行,在操作完成后恢复处理器核心的运行,以避免内核错误。
下面对本申请涉及的应用场景进行说明。
操作系统内核通常会建立一个映射虚拟地址和内存的物理地址的内核页表,通过内核页表对物理地址进行统一管理,程序或进程只需要对虚拟地址操作(例如读取、删除等),再由系统内核通过内核页表将程序对虚拟地址的操作映射到物理地址上,从而更好地管理物理地址。
内核页表由多个级别的页表页构成,每个页表页设置于一个物理页内,该页表页内记录了多个页表项,每个页表项如果有下一级的页表页,则该页表项指向下一级的页表页的物理页。在本申请实施例中,每个页表页可以占据4KB(kilobyte,千字节)的物理内存空间,在64位操作系统中,每个页表页中可以记录1024个页表项。最低粒度的页表项则指向一个物理页,比如本申请实施例中,一个PTE则可以指向一个4KB的物理页。这些页表页中最常用的一部分页表页会被存储于页表缓存区(Translation Lookaside Buffer,TLB)中,在进行地址翻译(查找虚拟地址对应的物理地址)时,首先会从页表缓存区中遍历页表页,并在其中查找虚拟地址所对应的物理地址。当页表中的页表项较多时,地址翻译过程中的页表缓存区命中率会下降,导致地址翻译性能较差。
因此,为了提升地址翻译的效率,可以在内核页表较下级的页表页(例如PUD和PMD)中采用目标映射方式(例如块映射或连续映射的方式),以避免在内核页表中设置映射范围较小的PTE,由于越高级别的页表页可以对范围越大的地址空间进行映射,因此可以有效减少页表缓存区中存储的页表条目数量,从而提高地址翻译阶段的页表缓存区命中率。例如,在数据库服务中,在内核页表中采用块映射或连续映射,可以提升内核页表中的地址映射区进行直接存储器访问(Direct Memory Access,DMA)的性能。
但某些特殊处理任务所需的页表页需要采用第一粒度的映射方式才能正常运行,导致采用目标映射方式的内核页表无法支持这些特殊处理任务的运行。在本申请实施例中,在内核页表的页表页被设置为目标映射方式的情况下,为了在保持地址翻译较为高效的同时,支持这些特征处理任务的正常运行,可以将这些特殊任务所需的页表页从目标映射方式调整为第一粒度的映射。其中,这些特殊任务需求第一粒度的页表页的时机可以采用目标事件进行判断,当目标事件发生时,可以确定目标事件对应的处理任务所需的页表页切分为第一粒度,以便该处理任务能够正确执行。
参照图1,示出了本申请的一种应用场景示意图。该应用场景中,系统内核11正在运行,内核页表12中包括1个一级页表页(PTD),该一级页表页包含2个二级页表页(PUD),其中一个二级页表页包含2个三级页表页(PMD)。二级页表页13和三级页表页14的映射方式为目标映射方式,事件15对应的处理任务所需的地址映射关系在二级页表页13中,事件16对应的处理任务所需的地址映射关系在三级页表页14中。
其中,事件16为目标事件,则可以响应于事件16,确定出事件16在内核页表12中对应的第一页表页为三级页表页14,在第一页表页的映射方式为目标映射方式的情况下,将三级页表页14中与事件16对应的目标地址区域映射切分为第一粒度的目标页表项,从而支持需要第一粒度的目标事件正常运行。由于事件15不属于目标事件,则可以不对事件15对应的二级页表页13进行切分,二级页表页13依然保持目标映射方式,从而可以支持不需要第一粒度的事件15运行。
参照图2,示出了本申请的另一种应用场景示意图。该应用场景中,操作系统启动时,会先进入内核初始化阶段,此阶段会对内核页表和崩溃内核进行初始化,在初始化内核页表阶段,可以执行步骤:
M1,获取存储内核页表中待初始化页表页的物理存储地址。
M2,根据该物理存储地址判断是否将待初始化页表页切分初始化为第一粒度。
M3,在待初始化页表页映射的物理地址段中包含物理存储地址的情况下,将待初始化页表页初始化为第一粒度,否则将其初始化为块映射或连续映射。
之后在崩溃内核初始化时,可以对目标事件中的崩溃内核申请预留内存事件进行检测,检测到崩溃内核申请预留内存事件之后,可以执行步骤:
M4,响应于崩溃内核申请预留内存事件,获取崩溃内核申请的预留内存对应的虚拟地址参数,得到目标虚拟地址参数。
确定出目标虚拟地址参数后,可以执行步骤:
M5,将目标虚拟地址参数对应的第一页表页切分为第一粒度。以使内核页表兼容崩溃内核的正常运行。
其中,内核页表的初始化可以包括但不限于为逐级为各个页表页分配物理页地址,构建页表页之间的地址逻辑关系等。
内核初始化结束后,操作系统进入运行阶段,在内核运行阶段中,可以对非连续性内存映射区设置只读、内存栅栏扩展存储池、内存错误恢复等任务处理进程进行检测,并响应于包括非连续性内存映射区设置只读事件、内存栅栏扩展存储池事件、无法恢复的内存错误事件在内的目标事件,在这些目标事件触发的情况下,确定目标事件在内核页表中对应的第一页表页,并动态的将第一页表页中与目标事件对应的目标地址区域映射切分为第一粒度的目标页表项,以使内核页表兼容这些目标事件对应的处理任务。
参照图3,示出了本申请的又一种应用场景示意图。确定一个执行的第一处理器31执行切分任务。
针对第一处理器之外的其他处理器32,执行步骤3.1:通过停机机制暂停除执行切分任务之外的其他处理器的任务处理。
针对内核页表33,执行步骤3.2:遍历内核页表中的各个页表页,确定目标事件对应的第一页表页。再判断第一页表页的映射方式。
针对块映射的第一页表页34,执行步骤3.3:基于第一页表页的粒度分配新的第三页表页,基于第三页表页将目标地址区域映射进行切分,获得第二页表页。从而将块映射的第一页表页中的目标地址区域映射切分为第一粒度。
针对连续映射的第一页表页35,执行步骤3.4:消除第一页表页的连续映射状态,并对第一页表页中的页表项进行映射关系填充,获得所述第二页表页。使第一页表页中的页表项不再组合成为一个大页,从而将块映射的第一页表页中的目标地址区域映射切分为第一粒度。
需要说明的是,第一处理器可以是检测到目标事件的处理器。换而言之,如果有多个处理器,其中某个处理器检测到该目标事件,则该处理器作为第一处理器,剩余处理器则作为前述其他处理器。比如有3个处理器A、B、C,处理器A检测到内存栅栏扩展存储池事件,则处理器A作为第一处理器,处理器B、C作为其他处理器,其他情况以此类推。
参照图4,示出了本申请的再一种应用场景示意图。该应用场景中,可以对目标事件进行监控,其中,目标事件可以包括在操作系统启动的内核初始化阶段中,由崩溃内核申请预留内存41所触发的崩溃内核申请预留内存事件,以及在内核运行阶段中,由非连续性内存映射区设置只读42所触发的非连续性内存映射区设置只读事件、由内存栅栏扩展存储池43所触发的内存栅栏扩展存储池事件、由内存错误恢复44所触发的无法恢复的内存错误事件。在监控到上述目标事件发生后,可以确定目标事件在内核页表中对应的需要切分的页表页,并在需要切分的页表页中定位目标事件需求的目标地址区域映射,之后判断目标地址区域映射的映射方式,如果目标地址区域映射的映射方式为目标映射方式,则进入切分流程,将需要切分的页表页切分为第一粒度。
此外,在初始化内核页表45过程中,可以获取待初始化页表页的物理存储地址,进而判断待初始化页表页是否可以被设置为目标映射方式。若待初始化页表页映射的物理地址段中未包含其物理存储地址,则待初始化页表页满足设置为目标映射方式的条件,可以将待初始化页表页初始化为目标映射方式;若待初始化页表页映射的物理地址段中包含其物理存储地址,则待初始化页表页不满足设置为目标映射方式的条件,可以将待初始化页表页初始化为第一粒度,以使待初始化页表页可以正常运行,因此,对于映射的物理地址段中包含其物理存储地址的待初始化页表页,也可以进入切分流程,直接将其初始化为第一粒度的页表页。
在切分流程中,首先执行步骤4.1:通过停机机制暂停除执行切分任务之外的其他处理器的任务处理。
再执行步骤4.2:遍历内核页表中的页表页,确定需要切分的页表页及其映射方式。
若需要切分的页表页的映射方式为块映射,则执行步骤4.3:基于需要切分的页表页的粒度分配新的第一粒度页表页。
对于新分配的第一粒度页表页,执行步骤4.4:对新分配的第一粒度页表页中的页表项进行映射关系填充。
若需要切分的页表页的映射方式为块映射,则执行步骤4.5:清除需要切分的页表页中的连续映射标志位。
本申请可以应用于ARM64架构的Linux操作系统中,其中,ARM64架构表示基于ARM架构的64位处理器架构,ARM架构是一种基于精简指令集(RISC)的处理器架构;Linux操作系统表示基于Linux内核开发的操作系统,从而本申请可部署在搭载ARM64架构CPU(Central Processing Unit,处理器)和Linux操作系统的任何电子设备中,包括但不限于个人计算机、智能手机、服务器、工控计算机等。
下面对本申请涉及的表切分方法进行详细说明。
参照图5,示出了本申请的一种表切分方法的步骤流程图,该方法可以包括:
步骤101、响应于目标事件,确定所述目标事件在内核页表中对应的第一页表页;所述第一页表页包括所述目标事件需求的目标地址区域映射;所述目标地址区域映射为虚拟地址参数和物理地址段之间的映射。
在本申请实施例中,可以预先设置目标事件,目标事件可以用于指示一个需要第一粒度的页表页的需求的发生,示例性地,目标事件可以是某个需要第一粒度的进程的启动事件,也可以是某个需要第一粒度的页表页的存储请求被发起,本申请实施例对此并不进行具体限定,技术人员可以根据实际需求灵活设置。
目标事件可以直接与页表页具有对应关系,可以通过该对应关系直接确定出目标事件对应的页表页,其中,一个目标事件可以与一个页表页存在对应关系,一个目标事件也可以同时与多个页表页具有对应关系。
目标事件也可以与页表页查找规则具有对应关系,可以通过该对应关系确定目标事件对应的页表页查找规则,从而基于页表页查找规则确定出目标事件对应的第一页表页,其中,一个目标事件可以与一个页表页查找规则存在对应关系,一个目标事件也可以同时与多个页表页查找规则具有对应关系。其中,述第一页表页包括目标事件需求的目标地址区域映射;目标地址区域映射为虚拟地址参数和物理地址段之间的映射。
步骤102、在所述第一页表页的映射方式为目标映射方式的情况下,基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第二页表页;所述第二页表页包括与目标地址区域映射对应的至少一个目标页表项,所述目标页表项的第一粒度为支持所述目标事件运行的粒度。
在本申请实施例中,第一粒度可以为一种或多种粒度,可以将不同目标事件对应的第一页表页中的目标地址区域映射切分为不同的第一粒度,也可以将不同目标事件对应的第一页表页中的目标地址区域映射切分为相同的第一粒度,得到目标地址区域映射对应的第二页表页。本申请实施例对此并不进行具体限定,可以由技术人员根据实际需要灵活设置。其中,第一粒度可以包括系统内核支持的多种粒度,包括但不限于4KB、16KB、32KB等。
在本申请实施例中,可以在确定出目标地址区域映射的第一页表页之后,可以对该页表页整体切分得到第二页表页,该第二页表页中的每项都可以为第一粒度的目标页表项,比如对于一个PMD页表页,可以将该PMD页表页,切分为页表项全部为PTE的PMD页表页。也可以对该页表页的目标地址区域映射相关部分进行切分得到第二页表页,该第二页表页中存在第一粒度的目标页表项,这些目标页表项能够映射目标地址区域映射,比如对于一个PUD页表页,其中只有2M(兆)的目标地址区域映射需要切分为PTE,那么可以将该PUD中该2M目标地址区域切分为PTE页表项,其余部分保持原有映射方式,该种方式可以保留更多的原有映射方式,进一步提高TLB命中率,提高地址翻译效率。
需要说明的是,第二页表页包括与目标地址区域映射对应的至少一个目标页表项可能有多种情况,比如:
第一种,在第一页表页为块映射的情况下,第二页表页的级别比第一粒度的目标页表项级别高至少两级,比如第二页表为PUD,目标页表项为PTE,PUD和PTE中间存在PMD。那么第二页表页中则存在第二页表页到目标页表项之间的中间级别的页表项,然后在该中间级别的页表项对应的页表页下再关联目标页表项,比如在PUD下设置PMD页表项,然后在PMD页表项下再设置PTE页表项。该种情况可以理解为第二页表页包括与目标地址区域映射对应的至少一个目标页表项。
第二种,在第一页表页为块映射的情况下,第二页表页的级别比第一粒度的目标页表项级别高一级。比如第二页表为PMD,PMD下一级为目标页表项为PTE。那么在PMD下直接设置PTE页表项。
第三种,在第一页表页为连续映射的情况下,如果组成第一页表页的粒度为PTE,那么第二页表页为该PTE本身,只需要去掉PTE的连续映射标签即可。
综上,本申请实施例中,第一处理器对于出现的需要第一粒度的第二页表页支持以运行的目标事件,在该目标事件需求的目标地址区域映射所在的第一页表页不是支持第一粒度的情况下,基于第一页表页,将目标地址区域映射进行切分处理,获得第一粒度的第二页表页,从而可以支持该目标事件的运行。第一粒度上述方式中,在目标事件出现时,可以动态的对不支持目标事件运行的第一页表页进行切分,而其他的页表页可以保持原来的状态,从而可以不用将全部的内核页表构建为第一粒度的页表页,第一粒度降低了页表页的数量,整体页表页的数量变少,第一粒度在整体上既能够实现更大粒度的内核页表,支持内核页表中部分页表采用块映射或者连续映射,同时也能满足需求第一粒度的服务运行,在保持页表页具有较高翻译效率、提高页表缓存区命中率的同时,还能提升内核页表的兼容性。
可选的,在本申请一实施例中,步骤101,具体可以包括:
步骤1011、响应于所述目标事件,确定所述目标事件对应的目标虚拟地址参数。
本申请实施例中,可以预先建立目标事件与虚拟地址参数之间的对应关系,通过该对应关系,可以在目标事件触发时,直接匹配到目标事件对应的目标虚拟地址参数,其中,目标虚拟地址参数可以指示目标事件正常运行所申请或依赖的虚拟地址参数,虚拟地址参数在内核页表中被映射至对应的物理地址。
也可以预先建立目标事件与虚拟地址参数查找规则之间的对应关系,通过该对应关系,可以在目标事件触发时,匹配到目标事件对应的虚拟地址参数查找规则,再根据目标事件对应的虚拟地址参数查找规则,获取目标事件对应的目标虚拟地址参数。示例性地,虚拟地址参数查找规则可以包括但不限于从地址存储位置读取虚拟地址参数、基于当前程序运行状态计算虚拟地址参数等,技术人员可以根据目标事件的特性,设置不同的虚拟地址参数查找规则以获取其对应的目标虚拟地址参数,本申请实施例不做具体限定。
在本申请实施例中,目标事件可能由服务触发,这些服务比如崩溃内核申请预留内存、非连续性内存映射区设置只读服务、内存栅栏扩展存储池服务等中的至少一项,第一处理器可以检测这些服务通过调用切分内核态线性区页表的函数获取上述虚拟地址参数。而对于无法恢复的内存错误事件,在内存错误时由内核的预设函数触发,处理器可以检测该预设函数传递的上述虚拟地址参数。
需要说明的是,根据目标事件对内存空间的需求不同,一个目标事件可以对应有一个虚拟地址参数,也可以对应有多个虚拟地址参数,技术人员可以根据实际情况灵活设置,本申请实施例不做具体限定。
可选的,在本申请一实施例中,所述目标事件包括:崩溃内核申请预留内存事件、非连续性内存映射区设置只读事件、内存栅栏扩展存储池事件、无法恢复的内存错误事件中至少一项。
在一种实现场景中,目标事件包括崩溃内核申请预留内存事件。所述响应于所述目标事件,确定所述目标事件对应的目标虚拟地址参数,具体可以包括:
响应于所述崩溃内核申请预留内存事件,获取所述崩溃内核申请的预留内存对应的虚拟地址参数,得到所述目标虚拟地址参数。
为了在操作系统崩溃时存储错误日志,在操作系统启动时会加载崩溃内核,崩溃内核可以向操作系统申请一段内存空间来存储错误日志,便于分析系统故障原因。崩溃内核申请的内存可以称为预留内存,用于存储崩溃时的内存快照,以及系统的状态信息等。
需要说明的是,由于处理器架构和操作系统的区别,在不同的设备上检测崩溃内核申请预留内存事件的具体方式可能存在区别,技术人员可以根据实际情况进行设置,本申请实施例对检测崩溃内核申请预留内存事件的具体方式不做限定。示例性地,在基于ARM64处理器架构的Linux操作系统中,一般通过向内核启动参数文件(/proc/cmdline)传递崩溃内核需要申请的预留内存参数,可以通过检测内核启动参数文件中的预留内存参数,判断是否触发崩溃内核申请预留内存事件,如果在内核启动参数文件检测到预留内存参数,则可以确认崩溃内核申请预留内存事件触发。
确定触发崩溃内核申请预留内存事件之后,可以通过虚拟地址查询指令获取崩溃内核申请的预留内存的地址段,得到目标虚拟地址参数,例如,在Linux系统中,可以通过解析上述预留内存参数得到预留内存的起始虚拟地址和地址长度,从而根据该起始虚拟地址和地址长度确定出预留内存对应的虚拟地址参数,得到崩溃内核申请预留内存事件对应的目标虚拟地址参数。通过崩溃内核申请的预留内存对应的虚拟地址参数,能够获取到崩溃内核申请预留内存事件对应的目标虚拟地址参数,从而可以在后续步骤中将该目标虚拟地址参数所处的页表页切分为第一粒度,确保了崩溃内核在系统崩溃时能够正常存储系统的崩溃日志,避免了内核页表在设置为目标映射方式的情况下不兼容崩溃内核的问题发生。
可选的,在本申请一实施例中,在一种实现场景中,目标事件包括非连续性内存映射区设置只读事件。所述响应于所述目标事件,确定所述目标事件对应的目标虚拟地址参数,具体可以包括:
响应于所述非连续性内存映射区设置只读事件,获取所述非连续性内存映射区对应的虚拟地址参数,得到所述目标虚拟地址参数。
为了保证非连续性内存映射区中保存数据的安全性,可以将非连续性内存映射区设置为只读(read only),在非连续性内存映射区设置只读的情况下,非连续性内存管理要求非连续性内存映射区为第一粒度。
具体的,可以通过检测非连续性内存管理进程发出的设置指令,并对这些设置指令进行解析,如果解析到针对非连续性内存映射区的只读设置指令,则可以确认触发非连续性内存映射区设置只读事件。也可以采用其他方式对非连续性内存映射区设置只读事件进行判断,本申请实施例不做具体限定。
在本申请实施例中,可以使用非连续性内存管理机制相关的地址查询指令,直接查询得到非连续性内存映射区的起始虚拟地址和地址长度,从而得到非连续性内存映射区对应的虚拟地址参数,得到非连续性内存映射区设置只读事件对应的目标虚拟地址参数。通过非连续性内存映射区对应的虚拟地址参数,能够获取到非连续性内存映射区设置只读事件对应的目标虚拟地址参数,可以在后续步骤中将该目标虚拟地址参数所处的页表页切分为第一粒度,确保了非连续性内存映射区设置只读时,非连续性内存管理能够正常运行,避免了内核页表在设置为目标映射方式的情况下,不兼容非连续性内存映射区在只读模式下工作的问题。
可选的,在本申请一实施例中,在一种实现场景中,目标事件包括内存栅栏扩展存储池事件。所述响应于所述目标事件,确定所述目标事件对应的目标虚拟地址参数,具体可以包括:
响应于所述内存栅栏扩展存储池事件,获取经过所述内存栅栏扩展的内存池对应的虚拟地址参数,得到所述目标虚拟地址参数。
内存栅栏工作时,需要为其配备相应的存储池,当执行内存栅栏操作时,需要在存储池中存储相应的内存操作信息。存储池的大小取决于内存栅栏操作的数量和大小。如果存储池不够大,则可能会导致内存栅栏操作失败,并导致系统崩溃,因此,为了确保内存栅栏操作的正确执行,在内存栅栏的工作过程中,经常需要对存储池进行扩展。在本申请实施例中,内存栅栏扩展存储池事件不仅包含从较小的存储池扩大为较大的存储池的情况,还可以包括从无存储池到建立存储池的阶段,即从0扩展存储池的情况。内存栅栏为了通过存储池对内存进行越界分析等操作,需要存储池的对应虚拟地址参数采用第一粒度,因此可以将内存展览扩展存储池事件作为一种目标事件。
示例性地,可以通过检测存储池扩展指令的方式判断是否发生内存栅栏扩展存储池事件,如果检测到内存栅栏的存储池扩展指令,则可以确定发生内存栅栏扩展存储池事件,通过解析存储池扩展指令,可以获取内存栅栏扩展的内存池对应的虚拟地址参数,从而得到内存栅栏扩展存储池事件目标虚拟地址参数,也可以采用其他方式对内存栅栏扩展存储池事件进行判断,并获取经过内存栅栏扩展的内存池对应的虚拟地址参数,本申请实施例不做具体限定。通过获取经过内存栅栏扩展的内存池对应的虚拟地址参数,能够得到内存栅栏扩展存储池事件对应的目标虚拟地址参数,从可以在后续步骤中将该目标虚拟地址参数所处的页表页切分为第一粒度,确保了内存栅栏功能正常运行,避免了内核页表在设置为目标映射方式的情况下,不兼容内存栅栏功能的问题。
可选的,在本申请一实施例中,在一种实现场景中,目标事件包括无法恢复的内存错误事件。所述响应于所述目标事件,确定所述目标事件对应的目标虚拟地址参数,具体可以包括:
响应于所述无法恢复的内存错误事件,获取所述无法恢复的内存错误事件对应的错误内存的虚拟地址参数,得到所述目标虚拟地址参数。
操作系统中一般存在可靠性、可用性和可服务性机制(Reliability、Availability and Serviceability,RAS),RAS机制使系统在遇到各种故障时能够稳定运行,并且能够快速诊断和恢复故障,通过诸如内存保护、硬件错误检测、进程保护、资源管理等功能实现。RAS机制可以识别内存错误,并尝试对内存错误进行修复,其中某些内存错误是RAS机制无法修复的,由于RAS机制需要对无法修复的错误内存对应的虚拟地址进行屏蔽,为了达到较高的屏蔽精度,其需要无法修复的错误内存所在的虚拟地址参数为第一粒度。
具体的,可以通过检测RAS机制的运行状态,检测其对内存错误的修复结果,如果检测到修复失败,则可以确定触发了无法恢复的内存错误事件,并获取该无法恢复的内存错误对应的错误内存的虚拟地址参数,从而得到无法恢复的内存错误事件对应的目标虚拟地址参数。需要说明的是,可以根据实际需要,选择其他获取无法修复的内存错误对应的虚拟地址参数的方式,本申请实施例不做具体限定。通过获取无法恢复的内存错误事件对应的错误内存的虚拟地址参数,能够得到无法恢复的内存错误事件对应的目标虚拟地址参数,从可以在后续步骤中将该目标虚拟地址参数所处的页表页切分为第一粒度,确保了RAS机制能够对无法恢复的错误内存进行正常处理,避免了内核页表在设置为目标映射方式的情况下,不兼容RAS机制的问题。
步骤1012、根据所述目标虚拟地址参数,查询所述内核页表的各级页表页,获得所述第一页表页。
在本申请实施例中,如图1,内核页表有多级页表页,那么可以根据该虚拟地址参数从最高层级的页表页开始遍历页表页中是否有目标虚拟地址参数与内存地址之间的映射,查找该待切分的第一页表页,在本申请实施例中,将最后一级与该目标虚拟地址参数匹配的页表页作为第一页表页,比如图1中,对于事件16,其目标虚拟地址参数逐级匹配,匹配上三级页表页14,则三级页表页14作为该第一页表页。
可选地,在本申请一实施例中,所述目标虚拟地址参数包括:起始虚拟地址;步骤1012包括:
步骤10121,以所述起始虚拟地址,查询所述内核页表的各级页表页。
步骤10122,在一末级页表页匹配上所述起始虚拟地址的情况下,将所述末级页表页作为所述第一页表页。
可以从内核页表中找到映射起始虚拟地址的末级页表页(当前内核页表已有的页表页中的最后一级页表页)作为第一页表页。比如内核页表的最后一级页表页是PUD,则查找到的第一页表页为PUD;比如内核页表的最后一级页表页是PMD,则查找到的第一页表页为PMD;比如内核页表的最后一级页表页是PTE,则查找到的第一页表页为PTE。
映射起始虚拟地址的末级页表页可以表示包含起始虚拟地址的映射关系,但没有下级页表页的任一级页表页。需要说明的是,由于上一级页表页映射的虚拟地址中包含每个下级页表页映射的虚拟地址,因此,在遍历过程中,可以从最上级页表页开始依次向下遍历,首先找到包含起始虚拟地址的最上级页表页,再对该最上级页表页的下级页表页进行遍历,可以在一定程度上提升遍历效率。
参照图6,示出了本申请的一种内核页表结构示意图,如图6所示,内核页表由三级页表构成,包括一级页表页51、二级页表页52、二级页表页53、三级页表页54、三级页表页55,一级页表页可以为PGD页表页、二级页表页可以为PUD页表页、三级页表页可以为PMD页表页。其中,示例的,一级页表页51映射的虚拟地址为[0x00,0x99],二级页表页52映射的虚拟地址为[0x00, 0x49],二级页表页53映射的虚拟地址为[0x50,0x99],三级页表页54映射的虚拟地址为[0x00,0x24],三级页表页55映射的虚拟地址为[0x25,0x49]。若起始虚拟地址为[0x15],将起始虚拟地址与各个页表页映射的虚拟地址进行遍历匹配,最终可以找到映射起始虚拟地址的末级页表页为三级页表页54;若起始虚拟地址为[0x65],将起始虚拟地址与各个页表页映射的虚拟地址参数进行遍历匹配,可以找到映射起始虚拟地址的末级页表页为二级页表页53。
可选地,在本申请一实施例中,所述目标虚拟地址参数包括:地址长度;基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第二页表页,具体可以包括:
步骤A1,基于所述起始虚拟地址和所述地址长度,确定所述第一页表页中的目标地址区域映射。
目标虚拟地址参数可以包括起始虚拟地址和地址长度,其中,地址长度用于表示目标虚拟地址参数的长度,通过上述起始虚拟地址和地址长度,可以计算得到截止虚拟地址,从而可以将映射该起始虚拟地址和该截止虚拟地址之间的虚拟地址段的地址区域映射,确定为目标地址区域映射。
步骤A2,将所述目标地址区域映射进行切分处理,获得第二页表页。
确定出目标事件对应的目标地址区域映射之后,可以仅对目标事件对应的目标地址区域映射进行切分,得到能够满足目标事件运行的第一粒度的第二页表页,避免切分过程对其他进程或服务所需的地址区域映射造成影响,能够在一定程度上提升系统的稳定性。
可选的,在本申请一实施例中,上述步骤102,具体可以包括:
步骤1021、确定所述第一页表页的映射方式。
在本申请实施例中,可以读取第一页表页的映射方式标志位,通过第一页表页的映射方式标志位判断第一页表页的映射方式,第一页表页可以具有指示不同映射方式的多个映射方式标志位,例如,一个第一页表页可以有用于指示其是否为块映射的映射方式标志位,以及用于指示其是否为连续映射的映射方式标志位。此外,不同的级别的第一页表页也可以对应有不同的映射方式标志位。其中,映射方式标志位可以包括块映射标志位和连续映射标志位,块映射标志位用于指示页表页的映射方式是否为块映射,连续映射标志位用于指示页表页的映射方式是否为连续映射。
需要说明的是,通常情况下二级页表页和三级页表页可以被直接设置为块映射;如果要将一个二级页表页设置为连续映射,则需要在其初始化阶段,将该二级页表页切分为多个三级页表页,再将这些三级页表页合并为一个大页,达到将该二级页表页的映射方式设置为连续映射的目的;如果要将一个三级页表页设置为连续映射,则需要在其初始化阶段,将该三级页表页切分为多个页表项,再将这些页表项合并为一个大页,达到将该三级页表页的映射方式设置为连续映射的目的。因此,也可以通过判断第一页表页的下级页表页是否合并为一个大页的方式,确定其是否为连续映射。
示例性地,在Linux系统中,块映射标志位包括PUD_SECT、PMD_SECT,连续映射标志位包括PMD_CONT、PTE_CONT,若第一页表页为二级页表页,可以通过PUD_SECT标志位判断第一页表页的映射方式是否为块映射,可以通过PMD_CONT标志位判断第一页表页包含的三级页表页是否被合并为一个大页,进而确定第一页表页的映射方式是否为连续映射;若第一页表页为三级页表页,可以通过PMD_SECT标志位判断第一页表页的映射方式是否为块映射;可以通过PTE_CONT标志位判断第一页表页包含的页表项是否被合并为一个大页,进而确定第一页表页的映射方式是否为连续映射。其中,如果有连续映射标志位,则意味着合并的大页作为遍历的末级页表页,该大页下面虽然有更低层级的页表页,这些更低层级的页表页并不用来翻译地址。
需要说明的是,对于不同CPU架构和不同的操作系统,可以通过不同的方式确定第一页表页的映射方式,本申请实施例对此并不进行具体限定。
步骤1022,在所述映射方式为目标映射方式的情况下,根据所述目标映射方式所对应的页表切分方式,将所述目标地址区域映射进行切分处理,获得所述第二页表页。
在本申请实施例中,目标映射方式可以有多种,比如块映射、连续映射中的至少一种,而块映射和连续映射的页表页与PTE映射方式冲突,不能支持目标事件的执行,并且不同目标映射方式的架构不同,因此将目标事件需求的标地址区域映射切分为PTE粒度的第二页表页的方式也不同,因此,本申请实施例针对不同的目标映射方式,采用不同切分方式将所述目标地址区域映射进行切分处理,以获得所述第二页表页。
可选地,在本申请一实施例中,步骤1022包括:
步骤10221,在所述映射方式为块映射的情况下,基于所述第一页表页的粒度分配新的第三页表页,并基于所述第三页表页将所述目标地址区域映射进行切分,获得所述第二页表页。
由于块映射和连续映射的页表页结构和架构不同,针对不同映射方式的第一页表页,可以采取不同的切分方式,以取得较好的切分效果。
在第一页表页的映射方式为块映射的情况下,其并没有对应的页表项结构,而页表项结构的建立需要在页表页的初始化过程中完成,因此为了使系统可以在运行过程中动态进行页表页切分,可以基于第一页表页的粒度分配新的第三页表页,并基于所述第三页表页将所述目标地址区域映射进行切分,获得所述第二页表页。
在本申请实施例中,可以通过页表页的块映射标志位确定其是否为块映射,比如对于PUD,块映射标志位为PUD_SECT,在PUD_SECT为1时,认为该PUD为块映射,在PUD_SECT为0时,认为该PUD不为块映射;对于PMD,块映射标志位为PMD_SECT,在PMD_SECT为1时,认为该PMD为块映射,在PMD_SECT为0时,认为该PMD不为块映射。
需要说明的是,第一页表页和第三页表页用于映射相同的虚拟地址参数,以使得对第一页表页的切分不会影响系统的正常运行。
可选的,在本申请一实施例中,上述在重新生成的内核页表的初始化过程中,基于所述第三页表页将所述目标地址区域映射进行切分,获得所述第二页表页的步骤,具体可以包括:
步骤B1,对所述第三页表页初始化,并在所述第三页表页中针对所述目标地址区域映射创建第一粒度的目标页表项,以及针对其他地址区域映射创建块映射的块页表项;其中,所述其他地址区域映射为所述第一页表中除所述目标地址区域映射之外的地址区域映射。
在分配第三页表页之后,可以对第三页表页进行初始化,比如为第三页表页分配一个物理页。在初始化时,还可以在第三页表页中为前述的目标地址区域映射创建下级的页表项结构,在第三页表页中记录指向下级的各个页表项的指针,当然还可以在第三表项中为其他地址区域映射创建块映射的块页表项结构。其中,目标地址区域映射为第一页表页中原有的目标事件需要的虚拟地址和物理地址的区域映射,其他地址区域映射为第一页表中原有的除目标地址区域映射以外的区域;块页表项表示一个映射较大地址区域映射的页表项,块页表项可以不受系统默认的页表项粒度限制,能够使一个较大的地址区域映射表的映射方式表现为块映射。
其中,对于不同CPU架构和不同的操作系统,可以通过不同的方式将第三页表页初始化进行上述的初始化过程,本申请实施例对此并不进行具体限定。示例性地,在Linux操作系统中,可以使用pte_alloc()函数为页表页创建页表项。
需要说明的是,可以为生成的第三页表页分配与第一页表页相同的页表存储空间,以保证生成后的第三页表页可以被系统正确调用。此外,还可以预先记录第一页表页的各项页表参数,并采用相同页表参数生成第三页表页,这些页表参数可以包括但不限于映射的虚拟地址参数、映射的物理地址空间等。在第三页表页的初始化过程中,可以保持其中除目标地址区域映射之外的其他地址区域映射的映射方式不变,若在第三页表页中,第一页表页中除目标地址区域映射之外的其他地址区域映射的映射方式原本为块映射,则依然将这个其他地址区域映射初始化为映射方式为块映射的页表项;若在第三页表页中,第一页表页中除目标地址区域映射之外的其他地址区域映射的映射方式原本为连续映射,则依然将这个其他地址区域映射初始化为映射方式为连续映射的页表项。以使生成后的第三页表页可以在不重新加载系统的情况下替换原有的第一页表页,保证系统可以连续运行。
步骤B2、在初始化完成之后,对所述第三页表页中的页表项进行映射关系填充,获得所述第二页表页。
生成第三页表页并进行初始化后,还可以对生成的第三页表页进行映射关系填充,以使第三页表页中记录所需映射的虚拟地址与物理地址之间的映射关系。具体地,可以使用操作系统的内存管理函数来建立这些映射关系并进行填充。具体的,可以先将第一页表页中的页表项进行清除,然后将TLB中的第一页表页进行清除,再将原有的映射关系填充到第三页表页中的各个页表项中。填充时,目标地址区域映射填充到目标页表项中,其他地址区域填充到目标页表项中,如此,第三页表页中限定的虚拟地址和物理地址的映射关系与第一页表页中原来限定的虚拟地址和物理地址的映射关系相同,而记录该映射关系的页表项产生了变化,使目标地址区域映射在第一粒度的页表项中,而其他地址区域映射还在块映射页表项中,在支持目标事件执行的同时,还能够保持系统的连贯运行。
在本申请实施例中,可以根据第一页表页中的目标地址区域映射的虚拟地址参数、物理地址空间、第二页表页中页表项的大小,确定第二页表页中各个页表项需要映射的虚拟地址参数和物理地址段,并生成该虚拟地址参数和物理地址段之间的映射关系,再将这些映射关系填充至第二页表页中对应的页表项。示例性地,第二页表页将虚拟地址参数[0,99]映射到物理地址空间[500,599],假设第二页表页的每个页表项的大小为50,则该第二页表页包含2个页表项,其中一个页表项中可以填充虚拟地址参数[0,49]至物理地址段[500,549]的映射关系,另一个页表项中可以填充虚拟地址参数[50,99]至物理地址段[550,599]的映射关系。容易理解的,以上仅为示例性原理说明,实际应用中可以按照真实的页表项大小和第二页表页的映射空间大小,对其中的页表项进行映射关系的填充。
通过在生成的第三页表页初始化过程中,将第一页表页中的目标地址区域映射初始化为包含第一粒度目标页表项,且其他地址区域映射初始化为原有映射的页表项,并对所述第二页表页中的页表项进行映射关系填充,可以在不改变内核页表中其他页表页结构的情况下,将第一页表页切分为第一粒度的PTE,避免对块映射的第一页表页进行切分而导致系统无法正常运行的情况发生,有助于提升切分块映射的第一页表页的稳定性。
示例性地,若内核页表包括一个映射虚拟地址参数[0,399]的一级页表页A1,该一级页表页包含映射虚拟地址参数[0,199]的二级页表页B1和映射虚拟地址参数[200,399]的二级页表页B2,其中二级页表页B1包含映射虚拟地址参数[200,299]的三级页表页C1和映射虚拟地址参数[300,399]的三级页表页C2。目标事件为内存栅栏扩展存储池事件,经过查询,内存栅栏扩展的存储池虚拟地址参数[100,150]。虚拟地址参数[100,150]被二级页表页B1映射,由于二级页表页B1已经是末级页表页,可以确定目标事件对应的第一页表页为二级页表页B1。读取到二级页表页B1的PUD_SECT标志位为1,确认二级页表页B1的映射方式为块映射。接着可以生成第三页表页,在初始化第三页表页的过程中,将第一页表页中的目标地址区域映射初始化为第一粒度的目标页表项,将其他地址区域映射初始化为原有映射的页表项,再对第二页表页中的页表项进行映射关系填充,以使第二页表页中各个页表项可以正常发挥作用,完成对二级页表页B1的切分。
作为另一个示例,假设第一页表页为PUD A,该PUD A映射了1G的内存地址且存在块标签,而其中2M的内存地址M为目标事件需要的目标地址区域映射,那么可以新建一个PUD B,并且不为PUD设置块标签,在该PUD B中创建用于记录PTE的PMD页项表,再在该PMD下创建多个PTE页表项,然后清除PUD A中的映射关系以及TLB中的PUD A,然后将该2M内存地址的映射关系填充到该多个PTE页表项中,再在PUDB中创建多个PMD项并打上块标签,然后将剩余的1024M内存地址分别填充到多个用于块映射的PMD中,如此,就得到了一张第二页表页PUD B,然后可以再将PUD B刷新到TLB中。
作为另一个示例,假设第一页表页为PMD C,该PMD C映射了2M的内存地址且存在块标签,由于PMD下一级为PTE,那么可以新建一个PMD D,在该PUD D中创建多个PTE页表项,然后清除PMD C中的映射关系以及TLB中的PMD C,然后将该2M内存地址的映射关系填充到该多个PTE页表项中,就得到了一张第二页表页PMD D,然后可以再将PMD D刷新到TLB中。
可选地,在本申请一实施例中,步骤1022还可以包括:
步骤10222、在所述映射方式为连续映射的情况下,消除所述第一页表页的连续映射状态,并对所述第一页表页中的页表项进行映射关系填充,获得所述第二页表页。
由于块映射和连续映射的页表页结构不同,针对不同映射方式的第一页表页,可以采取不同的切分方式,以取得较好的切分效果。
在第一页表页的映射方式为连续映射的情况下,其已经存在被整合为大页的页表项结构,也就是说,第一页表页在建立时已经包含PTE页表项结构,但这些PTE页表项结构目前处于屏蔽状态,未实际发生作用,因此可以通过消除第一页表页的连续映射状态的方式,解除第一页表页中各个PTE页表项的合并状态,使第一页表页中的各个页表项发挥作用,实现将连续映射的第一页表页中的目标地址区域映射切分为第一粒度的效果,并重新对第一页表页中的页表项的映射关系进行填充,以使系统TLB可以重新加载第一页表页的各个PTE页表项,从而完成将第一页表页切分为第一粒度,并使其正常发挥作用。需要说明的是,在该种方式中,第二页表页即为PTE页表页,第二页表页包括的目标页表项为PTE本身。
对于不同CPU架构和不同的操作系统,可以通过不同的方式消除第一页表页的连续映射状态,本申请实施例对此并不进行具体限定。示例性地,在Linux系统中,可以通过将第一页表页的连续映射标志位(比如PTE_CONT标志位)置零的方式消除第一页表页的连续映射状态。
示例性地,内核页表中包括一个映射虚拟地址参数[0,399]的一级页表页A1,该一级页表页包含映射虚拟地址参数[0,199]的二级页表页B1和映射虚拟地址参数[200,399]的二级页表页B2,其中二级页表页B1包含映射虚拟地址参数[200,299]的三级页表页C1和映射虚拟地址参数[300,399]的三级页表页C2。目标事件为崩溃内核申请预留内存事件,经过查询,崩溃内核申请的预留内存为虚拟地址参数[200,220]。虚拟地址参数[200,220]被三级页表页C1映射,由于三级页表页C1已经是末级页表页,可以确定目标事件对应的第一页表页为三级页表页C1。读取三级页表页C1的PMD_SECT标志位,其PMD_SECT标志位为0,确认三级页表页C1的映射方式不为块映射,继续读取三级页表页C1的PTE_CONT标志位,其PTE_CONT标志位不为0,则确认三级页表页C1的映射方式为连续映射。而后使用标志位设置函数(例如set_pte_at函数)将三级页表页的PTE_CONT标志位设置为0,从而消除第一页表页的连续映射状态,使三级页表页C1的各个页表项生效,再根据三级页表页C1映射的虚拟地址参数和物理地址空间,为三级页表页C1中的每个页表项生成并分配地址映射关系,再对第一页表页中的页表项进行映射关系填充,以使三级页表页C1中的各个页表项可以正常发挥作用,完成对三级页表页C1的切分。
本申请实施例中,对于块映射的第一页表页,可以通过分配新的第三页表页的方式将其切分为第一粒度;对于连续映射的第一页表页,可以通过消除第一页表页的连续映射状态的方式将其切分为第一粒度,能够将不同映射方式的第一页表页均切分为第一粒度,有助于提升本方案对采用不同映射方式的第一页表页的兼容性,具有较广的应用场景。
可选的,在本申请一实施例中,上述对所述第三页表页中的页表项进行映射关系填充以及在对所述第一页表页中的页表项进行映射关系填充之前,具体还可以包括:
步骤C1、将所述第一页表页中的页表项的映射关系清除。
在本申请实施例中,可以遵守break before make准则对第一页表页中的页表项进行映射关系填充。其中,break before make是一种设计准则,是指在向页表项中填充映射关系时,先清除原有的映射关系,再在新的第三页表页写入新的映射关系,而非通过简单的覆盖操作进行映射关系填充,这有助于避免潜在的数据损坏、内存泄漏和系统崩溃等风险。
对于不同CPU架构和不同的操作系统,可以通过不同的方式清除第一页表页中的页表项的映射关系,本申请实施例对此并不进行具体限定。示例性地,在Linux系统中,可以通过pte_clear()函数清除第一页表页中各个页表项的映射关系。
需要说明的是,上述清除第一页表页中页表项的映射关系的方法,也适用于在对第一页表页的页表项进行映射关系填充的情况下,可以对第一页表页的页表项也进行清除。
步骤C2、将页表缓存区中所述第一页表页清除。
页表缓存区可能中会存储有预先抓取的页表页和页表项,对页表项进行填充会对页表项产生更改,导致页表缓存区中预先抓取的页表项无法正常使用,容易造成页表缓存区冲突和缺页异常等问题;还有可能在后续运行过程中,由于加载了新生成的页表项,导致页表缓存区中存在包含同一虚拟地址的旧页表页和新页表项,致使页表缓存区无法正确进行地址翻译,容易引发核心转储错误(core dump)或其他无法预知的数据错误。
在本申请实施例中,可以将页表缓存区中所述第一页表页清除,以使页表缓存区在第三页表页的页表项完成映射关系填充后,重新加载第三页表页中的页表项,消除页表缓存区的预抓取机制(prefetch)引发的缺页异常隐患。
对于不同CPU架构和不同的操作系统,可以通过不同的方式清空页表缓存区,本申请实施例对此并不进行具体限定。示例性地,在Linux系统中,可以通过flush_tlb_all()函数清空页表缓存区。
综上所述,本申请实施例提供的表切分方法,对于块映射的第一页表页,可以通过分配新的第三页表页的方式将其切分为第一粒度;对于连续映射的第一页表页,可以通过消除第一页表页的连续映射状态的方式将其切分为第一粒度,能够将不同映射方式的第一页表页均切分为第一粒度,有助于提升本方案对采用不同映射方式的第一页表页的兼容性,具有较广的应用场景。此外,由于目标事件包括崩溃内核申请预留内存事件、非连续性内存映射区设置只读事件、内存栅栏扩展存储池事件和无法恢复的内存错误事件,通过将各个目标事件对应的第一页表页进行切分,确保了崩溃内核在系统崩溃时能够正常存储系统的崩溃日志,避免了内核页表在设置为目标映射方式的情况下不兼容崩溃内核的问题发生;确保了非连续性内存映射区设置只读时,非连续性内存管理能够正常运行,避免了内核页表在设置为目标映射方式的情况下,不兼容非连续性内存映射区在只读模式下工作的问题;确保了内存栅栏功能正常运行,避免了内核页表在设置为目标映射方式的情况下,不兼容内存栅栏功能的问题;确保了RAS机制能够对无法恢复的错误内存进行正常处理,避免了内核页表在设置为目标映射方式的情况下,不兼容RAS机制的问题。
参照图7,示出了本申请的另一种表切分方法的步骤流程图,该方法包括:
步骤201、获取存储所述内核页表中待初始化页表页的物理存储地址。
通常情况下,在映射方式为块映射或连续映射的页表页中,不能包含存储该页表页的物理存储地址的映射关系。因此,在对内核页表的初始时,可以获取待初始化页表页的物理存储地址,进而判断待初始化页表页是否可以被设置为块映射或连续映射。
在创建内核页表时,会生成待初始化页表页,并未为待初始化页表页分配物理地址段,该物理地址段用于存放对应的待初始化页表页。其中,初始化页表页的物理存储地址可以为存放待初始化页表页的物理地址段,也可以是存放待初始化页表页的物理地址段中的一个物理地址(例如起始物理地址等)。
步骤202、在所述待初始化页表页映射的物理地址段中包含所述物理存储地址的情况下,将所述待初始化页表页初始化为第一粒度。
待初始化页表页映射的物理地址段,表示即将填充到待初始化页表页的映射关系中包含的物理地址段。例如,一个待初始化页表页即将填入虚拟地址参数[0,99]与物理地址段[100,199]的映射关系,则该初始化页表页映射的物理地址段为[100,199]。若待初始化页表页映射的物理地址段中包含物理存储地址,则说明待初始化页表页映射了存储自己的物理地址,不符合块映射或连续映射的设置条件,为了避免内核页表运行时发生错误,可以在内核页表的初始化阶段,将物理地址段中包含其物理存储地址的待初始化页表页直接初始化为第一粒度。
步骤203、在所述待初始化页表页映射的物理地址段中未包含所述物理存储地址的情况下,将所述待初始化页表页初始化为块映射或连续映射。
若待初始化页表页映射的物理地址段中未包含物理存储地址,则说明待初始化页表页没有映射存储自己的物理地址,符合块映射或连续映射的设置条件,为了提高地址翻译效率,可以在内核页表的初始化阶段,将物理地址段中未包含其物理存储地址的待初始化页表页初始化为块映射或连续映射。
需要说明的是,在页表页初始化时可以先对页表页的属性进行判断,如果页表页携带块映射属性,则会将页表页其初始化为块映射;如果页表页未携带块映射属性,则递归初始化页表页中的页表项,即如果初始化页表页中的页表项时带有块映射属性,会将其初始化块映射,如果在初始化当前页表项的时候带有块映射属性且分配的物理地址被包含在该物理地址中,则去掉初始化时当前页表项块映射属性,将其初始化为PTE粒度的页表项。
通过判断待初始化页表页映射的物理地址段中是否包含存储其的物理存储地址,可以确定出待初始化页表页是否符合块映射或连续映射的设置条件,从而将符合条件的待初始化页表页初始化为块映射或连续映射,可以降低使用块映射或连续映射设置的内核页表的异常概率。
示例性地,若需要将一个内核页表中的页表页初始化为块映射方式,在该内核页表的初始化阶段,其中的三级页表页C1和三级页表页C2还未初始化,则三级页表页C1和三级页表页C2均为待初始化页表。其中,三级页表页C1需要映射的物理地址段为[50,99],三级页表页C1的物理存储地址为[30,40],三级页表页C2需要映射的物理地址段为[100,149],三级页表页C2的物理存储地址为[120,130]。由于三级页表页C1映射的物理地址段[50,99]中未包含其物理存储地址[30,40],则可以将三级页表页C1的映射方式初始化为块映射;由于三级页表页C2映射的物理地址段[100,149]中包含其物理存储地址[120,130],则可以将三级页表页C2初始化为第一粒度。
步骤204、响应于目标事件,确定所述目标事件在内核页表中对应的第一页表页;所述第一页表页包括所述目标事件需求的目标地址区域映射;所述目标地址区域映射为虚拟地址参数和物理地址段之间的映射。
步骤205、通过停机机制暂停所述第一处理器之外的其他处理器的任务处理。
在本申请实施例中,将目标地址区域映射进行切分处理可以由第一处理器执行,在切分过程中,内核页表会产生变化,在此期间,如果其他处理器对内核页表进行使用、修改等操作,可能导致无法预期的系统错误,容易导致系统崩溃。其中,其他处理器可以表示用于执行当前切分任务的第一处理器之外的处理器,上述处理器可以包括处理器(CentralProcessing Unit,CPU)、处理器核心(Processor Core)、处理器线程(Processor Thread)等能够独立处理任务的。
具体地,可以由接收到切分处理任务的第一处理器,发出停机指令,并在指令中携带其他处理器的标识信息,从而使其他处理器进入阻塞状态,暂停任务执行。对于不同CPU架构和不同的操作系统,可以通过不同的方式向其他处理器发出停机指令,本申请实施例对此并不进行具体限定。示例性地,在Linux操作系统中,可以通过调用stop_machine()函数创建kstopmachine进程,再由kstopmachine进程调用multi_cpu_stop()函数向其他处理器发出停机指令。
步骤206、在所述第一页表页的映射方式为目标映射方式的情况下,基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第二页表页;所述第二页表页包括与目标地址区域映射对应的至少一个目标页表项,所述目标页表项的第一粒度为支持所述目标事件运行的粒度。
步骤207、恢复所述其他处理器的任务处理。
在将第一页表页切分为第一粒度的任务执行完毕后,可以再由处理切分处理任务的处理器,向其他处理器发出恢复指令,从而使其他处理器退出阻塞状态,继续对任务进行处理。通过在执行切分任务之前暂停其他处理器的处理任务,并在切分完成后恢复其他处理的处理任务,能够避免切分过程中其他处理器使用正在调整的内核页表而导致的操作系统异常问题。
综上,本申请实施例提供的表切分方法,能够在系统运行过程中根据任务需要对相映的第一页表页进行动态切分,不仅能保持系统具有较高的地址翻译效率,还能支持需要第一粒度的地址映射方式的任务正常运行,在一定程度上提高了系统运行效率和系统兼容性。通过判断待初始化页表页映射的物理地址段中是否包含存储其的物理存储地址,可以确定出待初始化页表页是否符合块映射或连续映射的设置条件,从而将符合条件的待初始化页表页初始化为块映射或连续映射,可以降低使用块映射或连续映射设置的内核页表的异常概率,通过在切分之前暂停其他处理器的处理任务,并在切分完成后恢复其他处理的处理任务,能够避免切分过程中其他处理器使用正在调整的内核页表而导致的操作系统异常问题。
参照图8,示出了本申请的一种表切分系统的结构示意图,该表切分系统配置有至少一个服务模块601、地址翻译模块602、内核页表存储模块603、内核页表切分模块604,该内核页表切分模块604中配置有计算机程序(图中未示出),该计算机程序被内核页表管理模块执行时实现上述的表切分方法。
该服务模块601可以触发目标事件,内核页表切分模块604中的该计算机程序在执行时,则检测该目标事件,然后可以响应于目标事件,确定所述目标事件在内核页表中对应的前述第一页表页;在所述第一页表页的映射方式为目标映射方式的情况下,基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得前述的第二页表页。其中,第二页表页则存储在内核页表存储模块中。
该内核页表切分模块604可以为处理器中的部分硬件单元,在该硬件单元中配置有该计算机程序。
该内核页表存储模块603可以存储内核页表,在实际应用中,内核页表存储模块603可以包括内存的一部分,该部分内存存储内核页表,在表切分系统所在设备关闭后,内存断电,这些内核页表则消失,在表切分系统所在设备启动之后,重新生成内核页表。其中,内核页表切分模块获得的第二页表页,会存在于内存中。该内核页表存储模块603还可以包括TLB,供地址翻译模块翻译时快速查找虚拟地址对应的物理地址,因此在该第一页表存在于TLB的情况下,先将TLB中的第一页表清空,然后将第二页表页缓存至TLB以供地址翻译模块602快速进行地址翻译。
该服务模块601还可能是其他不触发目标事件的服务,其发送地址翻译请求,该地址翻译请求就发送到了地址翻译模块602,该地址翻译请求可以有虚拟地址参数。地址翻译模块收到该地址翻译请求之后,就基于虚拟地址参数逐级查找内核页表存储模块603中的各级内核页表,然后如果查找到虚拟地址参数对应的物理地址,再将该物理地址返回,以供服务模块601从该物理地址读取数据或者写数据。
本申请实施例中,在目标事件出现时,可以动态的对不支持目标事件运行的第一页表页进行切分,而其他的页表页可以保持原来的状态,从而可以不用将全部的内核页表构建为第一粒度的页表页,降低了页表页的数量,整体页表页的数量变少,在整体上既能够实现更大粒度的内核页表,支持内核页表中部分页表采用块映射或者连续映射,同时也能满足需求第一粒度的服务运行,在保持页表页具有较高翻译效率、提高页表缓存区命中率的同时,还能提升内核页表的兼容性。
参照图9,示出了本申请的一种表切分装置的结构示意图,该装置包括:
确定模块701,用于响应于目标事件,确定所述目标事件在内核页表中对应的第一页表页;所述第一页表页包括所述目标事件需求的目标地址区域映射;所述目标地址区域映射为虚拟地址参数和物理地址段之间的映射;
切分模块702,用于在所述第一页表页的映射方式为目标映射方式的情况下,基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第二页表页;所述第二页表页包括与目标地址区域映射对应的至少一个目标页表项,所述目标页表项的第一粒度为支持所述目标事件运行的粒度。
可选地,所述确定模块包括:
虚拟地址参数子模块,用于响应于所述目标事件,确定所述目标事件对应的目标虚拟地址参数;
页表页获取子模块,用于根据所述目标虚拟地址参数,查询所述内核页表的各级页表页,获得所述第一页表页
可选地,所述目标虚拟地址参数包括:起始虚拟地址;所述页表页获取子模块还用于:以所述起始虚拟地址,查询所述内核页表的各级页表页;在一末级页表页匹配上所述起始虚拟地址的情况下,将所述末级页表页作为所述第一页表页。
可选地,所述目标虚拟地址参数还包括:地址长度;所述切分模块702还用于基于所述起始虚拟地址和所述地址长度,确定所述第一页表页中的目标地址区域映射。
可选地,所述切分模块702还包括:
映射方式子模块,用于确定所述第一页表页的映射方式;
类型切分子模块,用于在所述映射方式为目标映射方式的情况下,根据所述目标映射方式所对应的页表切分方式,将所述目标地址区域映射进行切分处理,获得所述第二页表页。
可选地,类型切分子模块还包括:
第一切分子模块,用于在所述映射方式为块映射的情况下,基于所述第一页表页的粒度分配新的第三页表页,并基于所述第三页表页将所述目标地址区域映射进行切分,获得所述第二页表页;
第二切分子模块,用于在所述映射方式为连续映射的情况下,消除所述第一页表页的连续映射状态,并对所述第一页表页中的页表项进行映射关系填充,获得所述第二页表页。
可选地,所述第一切分子模块包括:
初始化子模块,用于对所述第三页表页初始化,并在所述第三页表页中针对所述目标地址区域映射创建第一粒度的目标页表项,以及针对其他地址区域映射创建块映射的块页表项;其中,所述其他地址区域映射为所述第一页表中除所述目标地址区域之外的映射地址区域映射;
填充子模块,用于在初始化完成之后,对所述第三页表页中的页表项进行映射关系填充,获得所述第二页表页。
可选地,所述装置还包括:
关系清除子模块,用于将所述第一页表页中的页表项的映射关系清除;
缓存区清空子模块,用于将页表缓存区中所述第一页表页清除。
可选地,所述装置还包括:
获取模块,用于获取存储所述内核页表中待初始化页表页的物理存储地址;
第一初始化模块,用于在所述待初始化页表页映射的物理地址段中包含所述物理存储地址的情况下,将所述待初始化页表页初始化为第一粒度;
第二初始化模块,用于在所述待初始化页表页映射的物理地址段中未包含所述物理存储地址的情况下,将所述待初始化页表页初始化为块映射或连续映射。
可选地,所述装置还包括:
停机模块,用于通过停机机制暂停其他处理器单元的任务处理;
恢复模块,用于恢复所述其他处理器的任务处理。
本申请实施例中,处理器对于出现的需要第一粒度的第二页表页支持以运行的目标事件,在该目标事件需求的目标地址区域映射所在的第一页表页不是支持第一粒度的情况下,基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第一粒度的第二页表页,从而可以支持该目标事件的运行。上述方式中,在目标事件出现时,可以动态的对不支持目标事件运行的第一页表页进行切分,而其他的页表页可以保持原来的状态,从而可以不用将全部的内核页表构建为第一粒度的页表页,降低了页表页的数量,整体页表页的数量变少,在整体上既能够实现更大粒度的内核页表,支持内核页表中部分页表采用块映射或者连续映射,同时也能满足需求第一粒度的服务运行,在保持页表页具有较高翻译效率、提高页表缓存区命中率的同时,还能提升内核页表的兼容性。
对于系统实施例以及装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
图10是本申请实施例提供的一种装置的结构示意图。参见图10,电子设备900可以用于实施上述实施例中提供的表切分方法。该电子设备900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)922(例如,一个或一个以上处理器)和存储器932,一个或一个以上存储应用程序942或数据944的存储介质930(例如一个或一个以上海量存储设备)。其中,存储器932和存储介质930可以是短暂存储的或持久存储的。存储在存储介质930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,处理器922可以设置为与存储介质930通信,在电子设备900上执行存储介质930中的一系列指令操作。
电子设备900还可以包括一个或一个以上电源923,一个或一个以上有线或无线网络接口950,一个或一个以上输入输出接口958,一个或一个以上键盘956,和/或和,一个或一个以上操作系统941。其中,处理器922可以在电子设备900上执行上述表切分方法中的任一操作。
本申请提供一种电子设备,处理器和存储器;所述处理器上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行上述方法。
本申请还提供一个或多个机器可读介质,其上可执行代码,当由一个或多个处理器执行时,使得处理器执行上述方法。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM(Compact DiscRead Only Memory,只读光盘)、光学存储器等)上实施的计算机程序产品的形式。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (14)
1.一种表切分方法,其特征在于,所述方法包括:
响应于目标事件,确定所述目标事件在内核页表中对应的第一页表页;所述第一页表页包括所述目标事件需求的目标地址区域映射;所述目标地址区域映射为虚拟地址参数和物理地址段之间的映射;
在所述第一页表页的映射方式为目标映射方式的情况下,基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第二页表页;所述第二页表页包括与目标地址区域映射对应的至少一个目标页表项,所述目标页表项的第一粒度为支持所述目标事件运行的粒度。
2.根据权利要求1所述的方法,其特征在于,所述响应于目标事件,确定所述目标事件在内核页表中对应的第一页表页,包括:
响应于所述目标事件,确定所述目标事件对应的目标虚拟地址参数;
根据所述目标虚拟地址参数,查询所述内核页表的各级页表页,获得所述第一页表页。
3.根据权利要求2所述的方法,其特征在于,所述目标虚拟地址参数包括:起始虚拟地址;所述根据所述目标虚拟地址参数,查询所述内核页表的各级页表页,获得所述第一页表页,包括:
以所述起始虚拟地址,查询所述内核页表的各级页表页;
在一末级页表页匹配上所述起始虚拟地址的情况下,将所述末级页表页作为所述第一页表页。
4.根据权利要求3所述的方法,其特征在于,所述目标虚拟地址参数还包括:地址长度;所述基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第二页表页,包括:
基于所述起始虚拟地址和所述地址长度,确定所述第一页表页中的目标地址区域映射;
将所述目标地址区域映射进行切分处理,获得第二页表页。
5.根据权利要求1所述的方法,其特征在于,所述在所述第一页表页的映射方式为目标映射方式的情况下,基于所述第一页表页,将所述目标地址区域映射进行切分处理,获得第二页表页,包括:
确定所述第一页表页的映射方式;
在所述映射方式为目标映射方式的情况下,根据所述目标映射方式所对应的页表切分方式,将所述目标地址区域映射进行切分处理,获得所述第二页表页。
6.根据权利要求5所述的方法,其特征在于,所述在所述映射方式为目标映射方式的情况下,根据所述目标映射方式所对应的页表切分方式,将所述目标地址区域映射进行切分处理,获得所述第二页表页,包括:
在所述映射方式为块映射的情况下,基于所述第一页表页的粒度分配新的第三页表页,并基于所述第三页表页将所述目标地址区域映射进行切分,获得所述第二页表页;
在所述映射方式为连续映射的情况下,消除所述第一页表页的连续映射状态,并对所述第一页表页中的页表项进行映射关系填充,获得所述第二页表页。
7.根据权利要求6所述的方法,其特征在于,所述基于所述第三页表页将所述目标地址区域映射进行切分,获得所述第二页表页,包括:
对所述第三页表页初始化,并在所述第三页表页中针对所述目标地址区域映射创建第一粒度的目标页表项,以及针对其他地址区域映射创建块映射的块页表项;其中,所述其他地址区域映射为所述第一页表中除所述目标地址区域映射之外的地址区域映射;
在初始化完成之后,对所述第三页表页中的页表项进行映射关系填充,获得所述第二页表页。
8.根据权利要求7所述的方法,其特征在于,所述对所述第三页表页中的页表项进行映射关系填充之前,还包括:
将所述第一页表页中的页表项的映射关系清除;
将页表缓存区中所述第一页表页清除。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取存储所述内核页表中待初始化页表页的物理存储地址;
在所述待初始化页表页映射的物理地址段中包含所述物理存储地址的情况下,将所述待初始化页表页初始化为第一粒度;
在所述待初始化页表页映射的物理地址段中未包含所述物理存储地址的情况下,将所述待初始化页表页初始化为块映射或连续映射。
10.根据权利要求1所述的方法,其特征在于,所述将所述目标地址区域映射进行切分处理由第一处理器执行,将所述目标地址区域映射进行切分处理,获得第二页表页之前,所述方法还包括:
通过停机机制暂停所述第一处理器之外的其他处理器的任务处理;
所述将所述目标地址区域映射进行切分处理,获得第二页表页之后,所述方法还包括:
恢复所述其他处理器的任务处理。
11.根据权利要求1所述的方法,其特征在于,所述目标事件包括:崩溃内核申请预留内存事件、非连续性内存映射区设置只读事件、内存栅栏扩展存储池事件、无法恢复的内存错误事件中至少一项。
12.一种表切分系统,其特征在于,所述表切分系统配置有至少一个服务模块、地址翻译模块、内核页表存储模块、内核页表切分模块,所述内核页表切分模块中配置有计算机程序,所述计算机程序被所述内核页表管理模块执行时实现如权利要求1至11任一所述的方法。
13.一种电子设备,其特征在于,包括:
处理器和存储器;
所述处理器上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求1至11任一所述的方法。
14.一个或多个机器可读介质,其特征在于,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如权利要求1至11任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310438634.4A CN116185902B (zh) | 2023-04-13 | 2023-04-13 | 一种表切分方法、系统、电子设备及可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310438634.4A CN116185902B (zh) | 2023-04-13 | 2023-04-13 | 一种表切分方法、系统、电子设备及可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116185902A true CN116185902A (zh) | 2023-05-30 |
CN116185902B CN116185902B (zh) | 2023-08-01 |
Family
ID=86444617
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310438634.4A Active CN116185902B (zh) | 2023-04-13 | 2023-04-13 | 一种表切分方法、系统、电子设备及可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116185902B (zh) |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040215918A1 (en) * | 2003-04-24 | 2004-10-28 | International Business Machines Corporation | Method, apparatus and computer program product for dynamically minimizing translation lookaside buffer entries across contiguous memory |
US20070288720A1 (en) * | 2006-06-12 | 2007-12-13 | Udayakumar Cholleti | Physical address mapping framework |
US20140013073A1 (en) * | 2012-07-03 | 2014-01-09 | International Business Machines Corporation | Using large frame pages with variable granularity |
US20140156968A1 (en) * | 2012-12-04 | 2014-06-05 | Ati Technologies Ulc | Flexible page sizes for virtual memory |
CN109002706A (zh) * | 2018-06-08 | 2018-12-14 | 中国科学院计算技术研究所 | 一种基于用户级页表的进程内数据隔离保护方法和系统 |
US20200334169A1 (en) * | 2017-12-27 | 2020-10-22 | Huawei Technologies Co., Ltd. | File page table management technology |
CN111949572A (zh) * | 2020-08-24 | 2020-11-17 | 海光信息技术有限公司 | 页表条目合并方法、装置及电子设备 |
CN112328354A (zh) * | 2019-08-05 | 2021-02-05 | 阿里巴巴集团控股有限公司 | 虚拟机热迁移方法、装置、电子设备及计算机存储介质 |
CN112783599A (zh) * | 2019-11-05 | 2021-05-11 | 阿里巴巴集团控股有限公司 | 虚拟机热迁移方法、装置、终端设备及计算机存储介质 |
CN114416425A (zh) * | 2021-12-17 | 2022-04-29 | 阿里巴巴(中国)有限公司 | 进程拷贝方法以及装置 |
US20220156106A1 (en) * | 2019-08-05 | 2022-05-19 | Alibaba Group Holding Limited | Virtual Machine Hot Migration Method, Apparatus, Electronic Device, and Computer Storage Medium |
CN114860627A (zh) * | 2022-07-06 | 2022-08-05 | 沐曦集成电路(上海)有限公司 | 基于地址信息动态生成页表的方法 |
US20220276968A1 (en) * | 2019-11-22 | 2022-09-01 | Huawei Technologies Co., Ltd. | Method and Apparatus for First Operating System to Access Resource of Second Operating System |
CN115292214A (zh) * | 2022-08-11 | 2022-11-04 | 海光信息技术股份有限公司 | 页表预测方法、存储访问操作方法、电子装置和电子设备 |
CN115587053A (zh) * | 2022-09-06 | 2023-01-10 | Oppo广东移动通信有限公司 | 内存区域确定方法、装置、电子设备及计算机可读介质 |
CN115878510A (zh) * | 2022-12-19 | 2023-03-31 | 成都海光集成电路设计有限公司 | 一种页表的修改方法、验证方法、装置及电子设备 |
-
2023
- 2023-04-13 CN CN202310438634.4A patent/CN116185902B/zh active Active
Patent Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040215918A1 (en) * | 2003-04-24 | 2004-10-28 | International Business Machines Corporation | Method, apparatus and computer program product for dynamically minimizing translation lookaside buffer entries across contiguous memory |
US20070288720A1 (en) * | 2006-06-12 | 2007-12-13 | Udayakumar Cholleti | Physical address mapping framework |
US20140013073A1 (en) * | 2012-07-03 | 2014-01-09 | International Business Machines Corporation | Using large frame pages with variable granularity |
US20140156968A1 (en) * | 2012-12-04 | 2014-06-05 | Ati Technologies Ulc | Flexible page sizes for virtual memory |
US20200334169A1 (en) * | 2017-12-27 | 2020-10-22 | Huawei Technologies Co., Ltd. | File page table management technology |
CN109002706A (zh) * | 2018-06-08 | 2018-12-14 | 中国科学院计算技术研究所 | 一种基于用户级页表的进程内数据隔离保护方法和系统 |
WO2021023052A1 (zh) * | 2019-08-05 | 2021-02-11 | 阿里巴巴集团控股有限公司 | 虚拟机热迁移方法、装置、电子设备及计算机存储介质 |
CN112328354A (zh) * | 2019-08-05 | 2021-02-05 | 阿里巴巴集团控股有限公司 | 虚拟机热迁移方法、装置、电子设备及计算机存储介质 |
US20220156106A1 (en) * | 2019-08-05 | 2022-05-19 | Alibaba Group Holding Limited | Virtual Machine Hot Migration Method, Apparatus, Electronic Device, and Computer Storage Medium |
CN112783599A (zh) * | 2019-11-05 | 2021-05-11 | 阿里巴巴集团控股有限公司 | 虚拟机热迁移方法、装置、终端设备及计算机存储介质 |
US20220276968A1 (en) * | 2019-11-22 | 2022-09-01 | Huawei Technologies Co., Ltd. | Method and Apparatus for First Operating System to Access Resource of Second Operating System |
CN111949572A (zh) * | 2020-08-24 | 2020-11-17 | 海光信息技术有限公司 | 页表条目合并方法、装置及电子设备 |
CN114416425A (zh) * | 2021-12-17 | 2022-04-29 | 阿里巴巴(中国)有限公司 | 进程拷贝方法以及装置 |
CN114860627A (zh) * | 2022-07-06 | 2022-08-05 | 沐曦集成电路(上海)有限公司 | 基于地址信息动态生成页表的方法 |
CN115292214A (zh) * | 2022-08-11 | 2022-11-04 | 海光信息技术股份有限公司 | 页表预测方法、存储访问操作方法、电子装置和电子设备 |
CN115587053A (zh) * | 2022-09-06 | 2023-01-10 | Oppo广东移动通信有限公司 | 内存区域确定方法、装置、电子设备及计算机可读介质 |
CN115878510A (zh) * | 2022-12-19 | 2023-03-31 | 成都海光集成电路设计有限公司 | 一种页表的修改方法、验证方法、装置及电子设备 |
Non-Patent Citations (4)
Title |
---|
SESHADRI,V等: "Page Overlays:an enhanced virtual memory framework to enable fine-grained memory management", 《2015 ACM/IEEE 42ND ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE(ISCA)》 * |
王宏宇;: "ARM MMU中虚拟地址到物理地址转换的研究", 中国电力教育, no. 3 * |
王庆民;刘福岩;连嘉;: "ARM对SDSM操作系统虚地址转换支持研究", 微计算机信息, no. 11 * |
郭帆: "虚拟化环境中资源管理机制的优化研究", 《中国博士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN116185902B (zh) | 2023-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6970990B2 (en) | Virtual mode virtual memory manager method and apparatus | |
US11243706B2 (en) | Fragment management method and fragment management apparatus | |
US8453015B2 (en) | Memory allocation for crash dump | |
US7313683B2 (en) | Computer system and method which boots from a bootup-memory-image stored in nonvolatile memory and copies data within an address range of predetermined width to main memory so that the system boots quickly after initialization | |
US8171255B1 (en) | Optimization of paging cache protection in virtual environment | |
CN104516833A (zh) | 用于多个顺序地址转换的合并的tlb结构 | |
US20100023941A1 (en) | Virtual machine monitor | |
US20100030997A1 (en) | Virtual memory management | |
GB2248327A (en) | Fixed protection key for real storage memory | |
US20030005219A1 (en) | Partitioning cache metadata state | |
EP3502877A1 (en) | Data loading method and device | |
CN110737394B (zh) | 管理缓存的方法、装置和计算机程序产品 | |
US11023141B2 (en) | Resiliency schemes for distributed storage systems | |
WO2014117328A1 (en) | Non-volatile memory write mechanism | |
US6363457B1 (en) | Method and system for non-disruptive addition and deletion of logical devices | |
US20070106868A1 (en) | Method and system for latency-directed block allocation | |
US20060053260A1 (en) | Computing system with memory mirroring and snapshot reliability | |
CN116185902B (zh) | 一种表切分方法、系统、电子设备及可读介质 | |
US11210236B2 (en) | Managing global counters using local delta counters | |
US20210042050A1 (en) | Method and apparatus for rebuilding memory mapping tables | |
US11803469B2 (en) | Storing data in a log-structured format in a two-tier storage system | |
JP2017033375A (ja) | 並列計算システム、マイグレーション方法、及びマイグレーションプログラム | |
US11074003B2 (en) | Storage system and restoration method | |
EP3908931B1 (en) | Translation protection in a data processing apparatus | |
US8756193B2 (en) | System and method for persisting object pointers |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |