CN115080223A - 内存读写指令的执行方法及计算设备 - Google Patents

内存读写指令的执行方法及计算设备 Download PDF

Info

Publication number
CN115080223A
CN115080223A CN202110281668.8A CN202110281668A CN115080223A CN 115080223 A CN115080223 A CN 115080223A CN 202110281668 A CN202110281668 A CN 202110281668A CN 115080223 A CN115080223 A CN 115080223A
Authority
CN
China
Prior art keywords
memory
address
mirror image
memory space
mirror
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
CN202110281668.8A
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202110281668.8A priority Critical patent/CN115080223A/zh
Priority to PCT/CN2021/140505 priority patent/WO2022193768A1/zh
Publication of CN115080223A publication Critical patent/CN115080223A/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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/063Address space extension for I/O modules, e.g. memory mapped I/O
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请提供了一种内存读写指令的执行方法及计算设备,属于计算机领域。本申请在虚拟地址对应的页表项中启用字段携带镜像指示信息,从而指明虚拟地址标识的内存空间已经启用了镜像保护。在收到内存读写指令时,如果发现内存读写指令携带的虚拟地址对应的页表项存在镜像指示信息,则主地址和备地址对应的两个内存空间均进行读写操作,从而支持了动态内存镜像功能,能够一定程度上解决现有内存镜像方案的局限性。

Description

内存读写指令的执行方法及计算设备
技术领域
本申请涉及计算机领域,特别涉及一种内存读写指令的执行方法及计算设备。
背景技术
内存镜像(memory mirror)是一种内存保护技术。已启用内存镜像的内存空间包括主内存空间和镜像内存空间。主内存空间用于供内存控制器读取数据,镜像内存空间用于保存主内存空间中数据的备份。当主内存空间故障时,计算机能够从镜像内存空间恢复数据,从而提升内存稳定性和可用性。
时下,管理员会预先设定启用内存镜像的内存空间、镜像内存空间的尺寸以及基于内存镜像保护的软件模块等参数。计算机启动后,会固定通过预先设定的内存空间实现内存镜像。
然而,上述方案中若预先设定的启用内存镜像的内存空间尺寸过小,容易导致对镜像内存的需求无法满足而导致内存溢出(out of memory,OOM),若预先设定的启用内存镜像的内存空间过大,会导致内存空间的浪费。由此可见,上述方案存在一定程度的局限性。
发明内容
本申请实施例提供了一种内存读写指令的执行方法及计算设备,有助于支持动态内存镜像的功能从而一定程度上解决现有内存镜像方案的局限性。所述技术方案如下。
第一方面,提供了一种内存读写指令的执行方法,所述方法包括:接收内存读写指令,所述内存读写指令携带目标内存空间的虚拟地址;响应于所述虚拟地址对应的页表项包括镜像指示信息,根据所述虚拟地址确定主地址和镜像地址,所述镜像指示信息用于标识所述目标内存空间已启用内存镜像,所述主地址为所述目标内存空间中主内存空间的物理地址,所述镜像地址为所述目标内存空间中镜像内存空间的物理地址;根据所述主地址和所述镜像地址,对所述主内存空间和所述镜像内存空间执行所述内存读写指令对应的操作。
上述方法在虚拟地址对应的页表项中启用字段携带镜像指示信息,从而指明虚拟地址标识的内存空间已经启用了镜像保护。在收到内存读写指令时,如果发现内存读写指令携带的虚拟地址对应的页表项存在镜像指示信息,则主地址和备地址对应的两个内存空间均进行读写操作,从而支持了动态内存镜像功能,能够一定程度上解决现有内存镜像方案的局限性。
可选地,所述镜像内存空间和所述主内存空间位于不同的通道。
通过这种方式,能够利用多个通道并行地对镜像内存空间和主内存空间,从而提升读写性能。
可选地,所述镜像内存空间与所述主内存空间相隔至少一个缓存行尺寸的距离。
通过这种方式,让地址计算的方式尽可能简便,降低实现复杂度。
可选地,所述主地址包括的偏移地址是根据缓存行尺寸以及所述虚拟地址包括的偏移地址确定的。
通过这种方式,根据内存读写指令携带的虚拟地址以及缓存行尺寸即可确定主地址,计算复杂度低。
可选地,所述根据所述主地址和所述镜像地址,对所述主内存空间和所述镜像内存空间执行所述内存读写指令对应的操作,包括:响应于所述主地址对应的ECC空间以及所述镜像地址对应的ECC空间均包括所述镜像指示信息,根据所述主地址和所述镜像地址,对所述主内存空间和所述镜像内存空间执行所述内存读写指令对应的操作。
通过这种方式,有助于避免非镜像内存空间被执行镜像读写操作,确保镜像保护的页只用于镜像读写操作。
可选地,所述接收内存读写指令之前,所述方法还包括:接收指定对象的内存分配请求;响应于所述指定对象的镜像标志置为设定值,为所述指定对象分配所述目标内存空间;其中,所述镜像标志在置为设定值时指示为指定对象分配包括主内存空间和镜像内存空间的内存空间。
通过上述方式,针对指定对象运行时实际请求分配的内存采用镜像保护,避免预设过大的镜像内存导致内存资源浪费,同时避免预设的镜像内存不足导致业务中断。
可选地,所述接收指定对象的内存分配请求之后,所述方法还包括:向所述虚拟地址对应的页表项、所述主地址对应的ECC空间以及所述镜像地址对应的ECC空间分别写入所述镜像指示信息。
通过上述方式,将指定对象对应的页表项以及ECC空间中设置镜像指示信息,便于计算机各硬件识别指定对象的内存受到镜像保护。
可选地,所述接收指定对象的内存分配请求之前,所述方法还包括:响应于内存镜像指令,将所述指定对象的镜像标志修改为所述设定值,所述内存镜像指令指示针对所述指定对象所需的内存空间启用内存镜像。
通过上述方式,便于通过编程接口触发指令来定义对哪个对象启用镜像保护,便于满足自定义需求,提高灵活性。
可选地,所述虚拟地址标识的每一个虚拟页对应于两个相邻的物理页。
可选地,所述方法还包括:响应于所述镜像内存空间发生故障,隔离所述镜像内存空间;为所述虚拟地址重新分配镜像内存空间,将所述主内存空间保存的数据写入至重新分配的镜像内存空间。
通过上述方式,从而降低内存故障对系统的影响,提高可靠性。
第二方面,提供了一种内存读写指令的执行装置,该装置具有实现上述第一方面或第一方面任一种可选方式的功能。该装置包括至少一个单元,至少一个单元用于实现上述第一方面或第一方面任一种可选方式所提供的方法。在一些实施例中,该装置中的单元通过软件实现,装置中的单元是程序模块。在另一些实施例中,该装置中的单元通过硬件或固件实现。第二方面提供的装置的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。
第三方面,提供了一种计算设备,该计算设备包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述程序代码由所述处理器加载并执行以实现上述第一方面或第一方面任一种可选方式所提供的方法。
第四方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该指令在计算机上运行时,使得计算机执行上述第一方面或第一方面任一种可选方式所提供的方法。
第五方面,提供了一种计算机程序产品,所述计算机程序产品包括一个或多个计算机程序指令,当所述计算机程序指令被计算机加载并运行时,使得所述计算机执行上述第一方面或第一方面任一种可选方式所提供的方法。
第六方面,提供了一种芯片,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行该计算机指令,以执行上述第一方面及其第一方面任意可能的实现方式中的方法。
第七方面,提供了一种计算设备,所述计算设备包括内存管理单元(memorymanagement unit,MMU)、内存控制器(memory controller,MC)和内存;所述MMU,用于接收内存读写指令,所述内存读写指令携带目标内存空间的虚拟地址;所述MMU,还用于响应于所述虚拟地址对应的页表项包括镜像指示信息,根据所述虚拟地址确定主地址和镜像地址,所述镜像指示信息用于标识所述目标内存空间已启用内存镜像,所述主地址为所述目标内存空间中主内存空间的物理地址,所述镜像地址为所述目标内存空间中镜像内存空间的物理地址;所述MC用于根据所述主地址和所述镜像地址,对所述内存中的主内存空间和所述内存中的镜像内存空间执行所述内存读写指令对应的操作。
附图说明
图1是本申请实施例提供的一种计算设备的结构示意图;
图2是本申请实施例提供的一种读写内存的示意图;
图3是本申请实施例提供的一种内存读写指令的执行方法的流程图;
图4是本申请实施例提供的一种主地址与镜像地址之间关系的示意图;
图5是本申请实施例提供的一种内存读写指令的执行装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
下面对本申请实施例涉及的一些术语概念做解释说明。
(1)通道(channel)
通道是指内存控制器与存储介质之间的物理通路。内存控制器与存储介质之间可选地具有一个或多个通道。不同通道之间可以串行工作,也可以并行工作。在多个通道并行工作的情况下,能提高内存的带宽和吞吐量。
(2)内存地址交织(channel interleave或interleaved memory)
内存地址交织是指将内存地址均匀分布在一组通道的编址方式。例如,存在2个通道,分别是通道0和通道1,在启用内存地址交织的情况下,如果虚拟地址32属于通道0,那么虚拟地址33属于通道1,虚拟地址34属于通道0,虚拟地址35属于通道1,以此类推。通过启用内存地址交织,能够并行或者轮流使用每个通道进行连续的内存读写,从而减少内存读写的耗时,提高内存读写的效率。
(3)启用内存镜像的内存空间
启用内存镜像的内存空间包括两个独立的物理内存空间。一个物理内存空间充当主内存空间,另外一个物理内存空间充当镜像内存空间。当进程、内核或者其他对象发起对启用内存镜像的内存空间的写数据指令时,数据会同时写入至主内存空间和镜像内存空间,使得数据在内存中存在相同的两份。通常情况下,主内存空间用于进行读写,而镜像内存空间用于保存数据的备份。如果主内存空间出现故障,可从镜像内存空间恢复内存数据。通常情况下,镜像内存空间的容量和主内存空间的容量相同。例如,主内存空间的容量是N个页,镜像内存空间的容量也是N个页。
(4)镜像指示信息(镜像indicator)
镜像指示信息是本实施例提供的用于标识是否启用内存镜像的指示信息。通过镜像指示信息,能够区分要访问的内存空间是启用内存镜像的内存空间还是没有启用内存镜像的内存空间。具体来说,在内存分配流程中,如果分配的内存空间A是启用内存镜像的内存空间,则为内存空间A标记对应的镜像指示信息;在内存读写流程中,当内存管理单元(memory management unit,MMU)检测到镜像指示信息时,MMU会按照本实施例提供的地址计算方式计算主内存空间的物理地址,当内存控制器(memory controller,MC)检测到镜像指示信息时,MC会按照本实施例提供的地址计算方式计算镜像内存空间的物理地址,从而将虚拟地址正确转换为主内存空间的物理地址和镜像内存空间的物理地址。可选地,镜像指示信息占用预留字段中的一个比特位。镜像指示信息占用的一个比特位可称为镜像指示信息字段,该比特位置位(即值为1)表示具有镜像指示信息,该比特位没有置位(即值为0)表示不具有镜像指示信息。
(5)镜像标志(镜像flag)
镜像标志是本实施例提供的用于标识是否分配启用内存镜像的内存空间的标志。例如,当镜像标志置为设定值(如1)时,表示分配包括启用内存镜像的内存空间。当镜像标志未置为设定值时,表示仅分配请求所指定大小的内存空间。例如,进程A发送内存分配请求,该内存分配请求指示为进程A分配一个页的内存空间。如果进程A的镜像标志为1,则为进程A分配两个物理页,一个物理页是主内存空间,另一个物理页是镜像内存空间。如果进程A的镜像标志为0,则为进程A分配一个物理页。
镜像标志例如是内存分配函数的一个输入参数。镜像标志指示执行内存分配函数时分配启用内存镜像的内存空间。例如,内存分配函数是kmalloc函数,镜像标志是kmalloc函数的一种获取空闲页(get free pages,GFP)分配标志(也称内存分配标志或flags参数)。又如,内存分配函数是vmalloc函数,镜像标志是vmalloc函数中的一种虚拟地址空间(virtual memory area,VMA)标志。
(6)缓存行(cache line)
缓存是对内存的内容进行缓存的硬件。缓存行是缓存的基本单位。缓存行尺寸(cache line size)是指一个缓存行的尺寸。计算机在访问内存时,会按照缓存行尺寸为单位,将内存中的数据迁移到缓存中。例如,缓存行尺寸是N个字节,计算机在访问内存时,一次最少迁移内存中N个字节的数据到缓存中。
(7)错误检查和纠正(Error Correcting Code,ECC)空间
ECC空间是指内存中保存ECC技术中校验和的区域。ECC是一种指令纠错技术。ECC的基本原理是,每一次数据写入内存的时候,ECC码使用一种特殊的算法对数据进行计算,其结果称为校验位(check bits)。然后将所有校验位加在一起得到校验和(checksum),校验和与数据一起存放在内存中。当数据从内存中读出时,采用同一算法再次计算校验和,并和前面的计算结果相比较,如果结果相同,说明数据是正确的,反之说明有错误,则从逻辑上分离错误并通知系统。当只出现单比特错误的时候,ECC可以把错误改正过来不影响系统运行。
内存故障轻者导致应用进程异常终止或崩溃,部分业务中断;严重时操作系统(operation system,OS)宕机,全部业务中断。目前,除了采用内存ECC等可靠性、可用性和诊断(Reliability,Availability and Serviceability,RAS)技术来进行故障检测、纠错外,关键业务(Mission Critical)还需要内存镜像技术进一步降低内存故障导致业务中断的可能性。在启动内存镜像的情况下,内存空间按照主内存空间、镜像内存空间的方式组织,并以一个主内存空间和一个镜像内存空间为单位分配给应用。当主内存空间、镜像内存空间中一个内存空间故障时,系统可以从另外一个内存空间恢复数据,从而避免应用或系统宕机。
然而,目前内存镜像技术的成本较高,而且当预先设定的镜像内存空间不足时仍然会OOM,导致业务中断。修改镜像空间必须重新启动(reboot)才能生效,也会中断业务。一些研究尝试使用全镜像模式(full mirror mode)、部分镜像模式(partial mirror mode)、地址范围镜像模式(address range mirroring)等方式实现内存镜像。然而,这几种模式下内存镜像关系是固定的,无法满足软件对关键业务内存模块的动态镜像管理需求。具体地,当预设的镜像内存不能满足内核需要会OOM,预设镜像过大又导致内存浪费;并且,需要OS支持才能完全利用地址范围镜像;并且,需要提供固件-OS(Firmware-OS)接口,OS必须与基本输入输出系统(Basic Input Output System,BIOS)交互确定镜像区域(region)信息;并且,修改镜像区域尺寸(region size)必须重启操作系统才能生效;并且,应用进程不能获得镜像保护。
有鉴于此,本申请实施例提供了一种动态内存镜像方案,仅对OS或关键业务进程实际分配的内存采取镜像保护,在确保内存故障不会导致中断业务的条件下,既能避免预设过大的镜像内存导致昂贵内存资源的浪费,也能避免预设内存镜像空间不足导致镜像保护失效或OOM导致业务中断的严重后果。此外,现有镜像方案也不能解决镜像内存故障后再分配新的镜像空间的问题,导致业务连续性得不到很好保证;而本申请实施例在动态镜像内存故障时,系统可以另外分配新的镜像内存并隔离故障内存,从而保证业务的连续性。
下面对本申请实施例涉及的计算设备的基本硬件结构举例说明。
附图1是本申请实施例提供的一种计算设备的结构示意图。附图1所示的计算设备100用于执行本申请实施例提供的方法。
计算设备100包括处理器101、存储器102以及网络接口103。
处理器101包括CPU、MMU以及MC。CPU包括CPU执行单元以及MMU。
CPU执行单元是指CPU中处理数据或计算机程序指令的硬件单元,例如,CPU执行单元是一个或多个CPU核。在执行镜像内存读写的流程中,CPU执行单元用于生成和发送内存读写指令。
MMU用于将虚拟地址转换为物理地址。具体地,如附图2所示,CPU执行单元发送内存读写指令后,MMU截获内存读写指令,执行地址转换,即将内存读写指令中的虚拟地址转换为物理地址。之后,MMU将地址转换后的指令发送给MC。MMU地址转换的动作也称为翻译。MMU使用页表来实现虚拟地址到物理地址的转换。在本申请实施例中,MMU地址转换得到的物理地址包括主地址或镜像地址中的至少一项。例如,在一些实施例中,如附图2所示,MMU将主地址和镜像地址发送给MC;MC接收MMU发送的主地址和镜像地址,根据主地址和镜像地址对内存执行镜像读写操作。在另一些实施例中,MMU将主地址和虚拟地址发送给MC,MC接收MMU发送的主地址和虚拟地址,MC根据主地址和虚拟地址确定镜像地址。之后,MC根据主地址和镜像地址对内存执行镜像读写操作。MMU通常设置在CPU内部。
页表存储在内存中,页表中的每一行对应于虚拟存储空间的一个页,该行包含了该虚拟内存页对应的物理内存页的地址、该页的访问权限和该页的缓冲特性等。页表中的每一个条目称为一个页表项。
MC用于控制内存,通过MC实现内存与CPU之间的数据交换。具体地,MC用于根据MMU发来的指令携带的物理地址访问内存。在读数据的情况下,MC从内存中物理地址对应的位置获取数据,将数据返回给CPU。在写数据的情况下,MC将数据写入至物理地址对应的位置。当MC接收到MMU发送的内存读写指令时,MC判断内存读写指令是否是镜像读写指令,并判断ECC中镜像指示信息字段是否置位;如果内存读写指令是镜像读写指令且ECC中镜像指示信息字段置位,则MC执行镜像读写操作,即对主内存空间和镜像内存空间同时执行读数据操作或者写数据操作。如果内存读写指令不是镜像读写指令且ECC中镜像指示信息字段置位,则MC拒绝执行内存读写指令,从而避免镜像内存被非法访问。
MC与CPU之间的位置关系包括多种情况。可选地,MC设置在CPU内部,也即是,MC与CPU集成在一起。或者,MC设置在CPU外部,也即是,MC与CPU分离设置。例如,附图2中处理器101中的MC设置在CPU内部,处理器105中的MC设置在CPU外部。
存储器102包括内存。内存包括ECC空间。存储器102例如是只读存储器(read-onlymemory,ROM)或可存储静态信息和指令的其它类型的静态存储设备,又如是随机存取存储器(random access memory,RAM)或者可存储信息和指令的其它类型的动态存储设备,又如是电可擦可编程只读存储器(electrically erasable programmable read-only Memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。
在一些实施例中,计算设备100还包括总线104。可选地,总线104是内存总线或者系统总线。处理器101、存储器102以及网络接口103通过总线104连接。总线104用于在上述组件之间传送信息。
在一些实施例中,计算设备100还包括输入输出接口106。输入输出接口106连接到总线104上。
在一些实施例中,输入输出接口106用于与输入设备连接,接收用户通过输入设备输入的下述方法实施例涉及的命令或数据,例如内存镜像指令。输入设备包括但不限于键盘、触摸屏、麦克风、鼠标或传感设备等等。
在一些实施例中,输入输出接口106还用于与输出设备连接。输入输出接口106通过输出设备输出处理器301执行下述方法实施例产生的中间结果和/或最终结果,例如从内存中读取的数据。输出设备包括但不限于显示器、打印机、投影仪等等。
可选地,处理器101通过读取存储器102中保存的程序代码实现上述实施例中的方法,或者,处理器101通过内部存储的程序代码实现上述实施例中的方法。在处理器101通过读取存储器102中保存的程序代码实现上述实施例中的方法的情况下,存储器102中保存实现本申请实施例提供的方法的程序代码。
处理器101实现上述功能的更多细节请参考前面各个方法实施例中的描述,在这里不再重复。
下面对本申请实施例的方法流程举例说明。
附图3是本申请实施例提供的一种内存读写指令的执行方法的流程图。附图3所示方法包括以下步骤S301至步骤S303。
步骤S301、计算设备接收内存读写指令。
内存读写指令用于指示对目标内存空间进行读数据操作或者写数据操作。目标内存空间是指计算设备的内存中当前需要访问的空间。内存读写指令携带目标内存空间的虚拟地址。例如,内存读写指令包括目的地址字段,目的地址字段的内容包括目标内存空间的虚拟地址。
目标内存空间的虚拟地址包括基地址和偏移地址。虚拟地址中的基地址也称页号,用于标识对应的虚拟页。虚拟地址中的偏移地址也称页偏移,用于标识虚拟页内部的位置。其中,虚拟页也称逻辑页,是与物理页相对的概念。
步骤S302、响应于虚拟地址对应的页表项(page table entry,PTE)包括镜像指示信息,计算设备根据虚拟地址确定主地址和镜像地址。
页表用于记录虚拟地址对应的物理地址,此外页表还包括预留(reserved)字段。
镜像指示信息用于标识目标内存空间已启用内存镜像。页表项中的镜像指示信息位于页表项的预留字段。例如,在页表项的预留字段中启用一个或多个比特位作为镜像指示信息字段。若页表项中的镜像指示信息字段置位(即页表项包括镜像指示信息),表示目标内存空间已启用内存镜像。若页表项中的镜像指示信息字段没有置位(即页表项不包括镜像指示信息),表示目标内存空间没有启用内存镜像。例如,ARM架构的PTE包括上层属性(upper attributes)字段、输出块地址(output block address)字段以及底层属性(lowerattributes)字段,上层属性字段包括供软件使用的保留(reserved for software use)字段,启用供软件使用的保留字段中的一个比特作为镜像指示信息字段。
通过在页表项中启用字段携带镜像指示信息,MMU通过页表项是否携带镜像指示信息能识别虚拟地址是否启用动态镜像,从而解决MMU不支持把虚拟地址翻译成真正的镜像地址的问题。
主地址为目标内存空间中主内存空间的物理地址(Physical Address,PA)。主地址包括基地址以及偏移地址。基地址相当于物理页的页号。例如,参见附图4,附图4中以“Pri+数字”的形式来简化表示具体的主地址,例如附图4中Pri0、Pri1……Pri4095中的每一个均表示具体的主地址。其中,Pri是“Primary(主,指代主内存空间)”的缩写。
镜像地址为目标内存空间中镜像内存空间的物理地址。镜像地址包括基地址以及偏移地址。例如,参见附图4,附图4中以“Sec+数字”的形式来简化表示具体的镜像地址,例如附图4中Sec0、Sec1……Sec4095中的每一个均表示具体的镜像地址。其中,Sec是“Secondary(备,指代镜像内存空间)”的缩写。
在一些实施例中,镜像内存空间与主内存空间相隔一个或多个缓存行尺寸的距离。可选地,镜像内存空间与主内存空间相隔一个缓存行尺寸的距离。
在一些实施例中,主地址与镜像地址相隔至少一个缓存行尺寸的距离。可选地,主地址与镜像地址相隔一个缓存行尺寸的距离。例如,参见附图4,主地址Pri0和备地址Sec0具有镜像关系,主地址Pri63和备地址Sec63具有镜像关系,主地址Pri0和备地址Sec0相隔一个缓存行尺寸的距离,主地址Pri63和备地址Sec63相隔一个缓存行尺寸的距离。通过这种方式,让地址计算的方式尽可能简便,降低实现复杂度。
在一些实施例中,镜像地址与主地址之间的关系满足如下公式1。
Secondary_PA=Primary_PA+CacheLine_Size;公式1
在以上公式1中,Secondary_PA表示镜像地址,Primary_PA表示主地址,CacheLine_Size表示一个缓存行尺寸。例如,参见附图4,当缓存行尺寸为64B时,主地址Pri0在Cache Line0的第一个字节,主地址Pri0对应的镜像地址Sec0在Cache Line1的第一个字节,因此Sec0=Pr0+0x40。通过上述公式1,确保MC能够通过内存读写指令的目的地址字段计算镜像地址。
在一些实施例中,主地址包括的偏移地址是根据缓存行尺寸以及虚拟地址包括的偏移地址确定的。具体来说,在未启用动态内存镜像功能时,虚拟地址通过页表翻译获得的物理地址就是实际的内存地址,即PA=Page_Base_PA+Offset_In_VA。其中,PA表示物理地址,Page_Base_PA表示物理页的基地址,Offset_In_VA表示物理页中的偏移地址。启用动态镜像功能后,虚拟地址通过页表翻译的物理地址(即Page_Base_PA+Offset_in_VA)不再等于实际的主地址(即Page_Base_PA+Offset in Memory)。假设一个页的尺寸为4千字节(Kilobyte,KB),且缓存行尺寸为64字节(byte,B),如附图4所示,实际主地址的偏移地址与虚拟地址的偏移地址(即页表中的偏移)满足如下关系:
Offset_In_Memory=Offset_In_VA+Cache_Line_Size*[INT(Offset_In_VA/Cache_Line_Size)];
其中,Offset_In_Memory表示主地址的偏移地址,Offset_In_VA表示虚拟地址中的偏移地址,Cache_Line_Size表示缓存行尺寸,INT表示取整运算。
根据上述关系可知,主地址的计算公式如下述公式2所示。
Primary_PA=Page_Base_PA+Offset_In_VA+Cache_Line_Size*[INT(Offset_In_VA/Cache_Li ne_Size)];公式2
在上述公式2中,Primary_PA表示主地址,Page_Base_PA表示物理页的基地址,Offset_In_VA表示虚拟地址中的偏移地址,Cache_Line_Size表示缓存行尺寸,INT表示取整运算。通过上述公式2,确保MMU能够把虚拟地址正确翻译到镜像内存的主地址。
在一些实施例中,虚拟地址标识的每一个虚拟页对应于两个相邻的物理页。其中,两个相邻的物理页例如是一个物理页中最后一个位置的地址与另一个物理页中第一个位置的地址相邻。具体来说,OS是以页为单位分配一块地址连续的内存空间。为了实现动态镜像,本实施例以页为单位进行内存镜像,在分配镜像内存时,将以两个相邻连续的物理页为单位分配内存空间。例如,参见附图4,一个页的尺寸是4KB,虚拟页是虚拟地址0至虚拟地址4095标识的一个页,目标内存空间是物理地址0至物理地址4095标识的物理页1、物理地址4096至物理地址8191标识的物理页2。
在一些实施例中,一个物理页包括一个或多个主内存空间以及一个或多个镜像内存空间。例如,参见附图4,物理页1既包括主内存空间(缓存行0主、缓存行2主),又包括镜像内存空间(缓存行1镜像、缓存行3镜像)。
在一些实施例中,一个物理页中主内存空间与镜像内存空间交织分布。一个物理页中互为镜像关系的主内存空间与镜像内存空间相隔一个缓存行尺寸的距离。
步骤S303、计算设备根据主地址和镜像地址,对主内存空间和镜像内存空间执行内存读写指令对应的操作。
在一些实施例中,在启用动态镜像功能的同时,启用内存地址交织。例如,启用双路内存地址交织(2way Channel Interleave)。镜像内存空间和主内存空间位于不同的通道。例如,参见附图4,镜像地址primary0标识的内存空间与主地址primary0标识的内存空间位于不同的通道。
通过这种方式,一方面,由于镜像内存空间和主内存空间这两个内存空间位于不同的通道,镜像内存空间和主内存空间在物理上互相独立,内存控制器能够利用多个通道并行地对镜像内存空间和主内存空间,从而提升读写性能。例如,上述内存读写指令为写指令,主内存空间位于通道0,镜像内存空间位于通道1,内存控制器向通道0中的主内存空间写入数据的同时,向通道1中的镜像内存空间写入数据。显然,相对于通过同一个通道先后访对镜像内存空间和主内存空间来说,读写性能更高。另一方面,由于镜像内存空间和主内存空间能够同时进行数据读写,保证镜像内存空间与主内存空间数据保持同步,避免镜像内存空间和主内存空间保存的数据不一致而导致出错。
在一些实施例中,计算设备确定主地址和备地址之后,判断主地址对应的ECC空间是否包括镜像指示信息,并判断镜像地址对应的ECC空间是否包括镜像指示信息;响应于主地址对应的ECC空间以及镜像地址对应的ECC空间均包括镜像指示信息,计算设备根据主地址和镜像地址,对主内存空间和镜像内存空间执行内存读写指令对应的操作。
可选地,判断ECC空间是否包括镜像指示信息的动作具体由计算设备中的MC执行。具体地,MC接收到内存读写指令时,判断内存读写指令是否是镜像读写指令,如果内存读写指令是镜像读写指令,则MC确定镜像地址,并访问主地址对应的ECC空间以及镜像地址对应的ECC空间,MC判断主地址对应的ECC空间以及镜像地址对应的ECC空间是否均包括镜像指示信息。如果主地址对应的ECC空间以及镜像地址对应的ECC空间均包括镜像指示信息,MC执行镜像读写操作,即对主内存空间和镜像内存空间同时执行读数据操作或写数据操作。如果主地址对应的ECC空间不包括镜像指示信息,或者镜像地址对应的ECC空间不包括镜像指示信息,MC确定对镜像内存访问不合法,MC拒绝执行镜像读写操作。
在一些实施例中,在ECC空间中启用一个或多个比特位作为镜像指示信息字段,以便MC识别启用镜像内存的内存空间。若ECC空间中的镜像指示信息字段置位(即ECC空间包括镜像指示信息),表示目标内存空间已启用内存镜像。若ECC空间中的镜像指示信息字段没有置位(即ECC空间不包括镜像指示信息),表示目标内存空间没有启用内存镜像。例如,参见附图4,主地址Pri0位于缓存行CacheLine0,镜像地址Sec0位于缓存行CacheLine1。若CacheLine0对应的ECC空间、CacheLine1对应的ECC空间均包括镜像指示信息,则允许对主地址Pri0标识的内存空间以及镜像地址Sec0标识的内存空间进行镜像读写操作(比如同时写入数据)。
本实施例提供的方法,在虚拟地址对应的页表项中启用字段携带镜像指示信息,从而指明虚拟地址标识的内存空间已经启用了镜像保护。在收到内存读写指令时,如果发现内存读写指令携带的虚拟地址对应的页表项存在镜像指示信息,则主地址和备地址对应的两个内存空间均进行读写操作,从而支持了动态内存镜像功能,能够一定程度上解决现有内存镜像方案的局限性。
在一些实施例中,通过对MMU和MC来实现上述镜像内存读写的处理流程。具体地,MMU用于对动态镜像内存执行从虚拟地址到物理地址的翻译处理流程。当MMU检测到虚拟地址对应的页表项中镜像指示信息字段为1时,MMU按照上述公式2计算主内存空间的物理地址。
MC执行镜像内存读写的处理流程包括下述步骤1至步骤3。
步骤1、拒绝非“镜像读写”指令。
具体地,MC接收到MMU发送的内存读写指令时,MC检测内存读写指令的目的地址对应的ECC中镜像指示信息字段的内容是否为1。当镜像指示信息字段为1时,如果MC收到的是非“镜像读/写”指令,则MC拒绝执行指令,返回非法访问,从而确保镜像保护的页只能用于镜像保护操作。
其中,被分配为镜像内存的页,其对应的ECC的镜像指示信息为1;由OS的缺页中断函数在分配物理页时发起ECC的镜像指示信息字段置1操作;当物理页被释放时,OS的物理页回收函数发起ECC的镜像指示信息字段清零操作。MC通过ECC的镜像指示信息字段识别物理内存是否启用动态镜像功能,能够区分普通内存读写与镜像内存读写指令,从解决MC不能支持动态内存镜像的问题。
步骤2、MC执行正常镜像读/写指令。
MC收到的“镜像读写”指令中目的地址是MMU通过公式2翻译得到的主地址Pri_PA。MC根据公式1计算镜像地址Sec_PA,并同时对主内存空间和镜像内存空间发起指令规定的操作(读/写),从而确保主地址与镜像地址写的一致性。当镜像地址Sec_PA与主地址Pri_PA不属于同一个MC控制的通道时,收到指令的MC负责与镜像地址Sec_PA归宿的MC交互完成对应的指令操作。
步骤3、如果MC执行内存读写指令遇到错误,则按照下述动态镜像内存故障处理流程中的步骤3、步骤4、步骤5、步骤6、步骤7处理。
以上介绍了镜像内存读写的处理流程,下面对动态镜像内存分配处理流程进行介绍。
在一些实施例中,在接收内存读写指令之前,计算设备接收指定对象的内存分配请求;响应于指定对象的镜像标志置为设定值,计算设备为指定对象分配目标内存空间。
指定对象是指计算机中允许占用内存空间的软件模块。例如,指定对象包括而不限于进程、内核、进程的部分VMA段、内核中的部分模块等。内存分配请求指示为指定对象分配内存空间。在一些实施例中,不同类型的指定对象具有不同的镜像标志。例如,内核的镜像标志与进程的镜像标志不同。
通过上述方式,针对指定对象运行时实际请求分配的内存采用镜像保护,避免预设过大的镜像内存导致内存资源浪费,同时避免预设的镜像内存不足导致业务中断。
在一些实施例中,接收指定对象的内存分配请求之后,计算设备向虚拟地址对应的页表项、主地址对应的ECC空间以及镜像地址对应的ECC空间分别写入镜像指示信息。例如,计算设备在分配镜像内存的过程中,将虚拟地址对应的页表项中的镜像指示信息字段、主地址对应的ECC空间中的镜像指示信息字段以及镜像地址对应的ECC空间中的镜像指示信息字段均置为1。
通过上述方式,将指定对象对应的页表项以及ECC空间中设置镜像指示信息,便于计算机各硬件识别指定对象的内存受到镜像保护。
在一些实施例中,通过修改OS的内存管理模块实现动态镜像内存分配处理流程。具体来说,对OS内存管理模块的内存分配函数修改,在内存分配函数中,增加处理镜像内存分配时对PTE的镜像指示信息置为1的模块,表明该内存空间启用镜像保护。对OS内存管理模块的缺页中断处理函数修改,在缺页中断处理函数中增加镜像内存分配物理页面的模块。缺页中断处理函数在检测到PTE的镜像指示信息为1时,也把实际分配的物理页对应的ECC的镜像指示信息置为1,以便内存控制器识别并按照动态镜像内存的要求进行处理。
示例性地,动态镜像内存分配函数分配虚拟地址的处理流程包括以下步骤1至步骤3。
步骤1、OS为进程分配新的虚拟地址空间。
其中,gfp分配标志新增GFP_MIRROR(内核态)和vma新增标志VM_MIRROR(用户态)。GFP_MIRROR(内核态)是一种GFP分配标志。GFP_MIRROR适用于内核态的进程。VM_MIRROR是一种VMA标志。VM_MIRROR适用于用户态的进程。通过gfp分配标志新增GFP_MIRROR(内核态)和vma新增标志VM_MIRROR(用户态),解决内存分配函数不能支持内存动态镜像的管理的问题,支持动态镜像编程接口。
当malloc等内存分配函数需要新增虚拟地址空间时,通过系统调用brk或do_map函数分配新的虚拟地址空间。
步骤2、OS在进程页表新增加对应虚拟地址的页表项。
其中,以页为单位,在页表中为新增的地址空间分配页表项,此时页表项里记录了页的基地址,对应的物理页基地址为空。
步骤3、OS将新增PTE的镜像指示信息字段置为1。
当镜像指示信息字段为1时,MMU就调用公式2正确地把虚拟地址翻译主地址;同时缺页中断处理函数也因此为此虚拟地址分配两个连续的物理页,第一个物理页的基地址被记录到页表项的物理地址中。
示例性地,动态镜像内存函数分配物理页的处理流程包括以下步骤1至步骤3。
步骤1、OS判断虚拟地址对应页表项的镜像指示信息字段是否为1。
其中,当页表项的镜像指示信息字段为1,表明该虚拟地址对应的是动态内存镜像,则OS分配两个连续的物理页。当页表项的镜像指示信息字段为0,OS按照原流程分配一个物理页。
步骤2、OS为虚拟地址分配两个连续的物理页。
具体地,在空闲的物理页空间寻找两个连续的物理页,并把两个连续物理页中第一个物理页的基地址记录在虚拟地址对应的页表项的物理地址中。如果没有两个连续物理页,则尝试移动一些物理页中保存的数据,从而构造两个连续的物理页,并分配构造出的两个连续物理页。
步骤3、OS把对应ECC的镜像指示信息字段置为1。
OS把新分配的物理页的基地址记录到页表项的物理地址字段。调用底层接口把新分配物理页对应ECC的镜像指示信息字段置为1,确保MC也按照动态镜像内存管理该物理页。此外,将已分配的两个物理页同时标记为保留(Reserved),避免被重复分配。
下面对动态镜像内存物理页面回收处理流程进行介绍。在一些实施例中,向OS内存管理的内存回收处理函数中增加回收镜像内存物理页的模块。具体地,动态镜像内存回收函数处理流程包括下述步骤1至步骤3。
步骤1、判断虚拟地址对应页表项的镜像指示信息字段是否为1。
当页表项的镜像指示信息字段为1,表明该虚拟地址对应的内存空间启用了动态内存镜像,则将物理地址字段对应的两个连续的物理页都回收。当页表项的镜像指示信息字段为0,则按照原来的流程回收页表项中物理地址字段对应的一个物理页。
步骤2、页回收函数将对应ECC的镜像指示信息字段置为0。
具体地,根据虚拟地址获得对应页表项的物理地址字段携带的值。调用底层接口把物理地址对应的两个连续物理页的ECC的镜像指示信息字段置为0,确保MC按照普通内存管理该物理页。
步骤3、页回收函数回收物理地址对应的主页以及镜像页。
页回收函数把虚拟地址对应页表项的物理地址字段清空;将两个物理页放回空闲页面链表等待分配。
下面对动态内存镜像管理的配置和命令的流程进行介绍。在一些实施例中,接收指定对象的内存分配请求之前,方法还包括:响应于内存镜像指令,计算设备将指定对象的镜像标志修改为设定值。其中,内存镜像指令指示针对指定对象所需的内存空间启用内存镜像。内存镜像指令例如由管理员的操作触发。内存镜像指令包括指定对象的标识。例如,在指定对象为进程的情况下,内存镜像指令包括进程的进程号(Process ID,PID)。通过新增内存镜像指令,能够指定哪些对象启用内存镜像保护,并且计算机能够在进程启动或者运行时修改进程的镜像标志,从而满足进程的动态镜像管理需求。
在一些实施例中,配置和命令的流程包括内核镜像保护流程和进程内存镜像保护流程。
内核镜像保护流程是指在现有系统配置文件增加新的配置项,或定义新的配置文件,用于定义内核的那些部分启用动态内存镜像保护,OS启动过程中根据配置来为内核分配镜像保护的物理页,流程包括下述步骤1至步骤3。
步骤1、操作系统启动(OS Boot)并解析配置文件中关于内核镜像保护的配置。
步骤2、根据配置文件,为内核中需要镜像保护的模块分配镜像物理页。
步骤3、运行中为内核分配镜像物理页。
其中,为内核新增内存需求分配镜像物理页;或者,在内存故障时隔离故障页并分配新镜像物理页。
进程内存镜像保护流程包括下述步骤1至步骤3。其中,下述mirrorable命令为上述内存镜像指令。
步骤1、用mirrorable命令启动进程并镜像进程的内存。
MML:#mirroable program;
mirroable设置task_struct->mirrorable为真(True),进程内存启用镜像保护,已经分配的虚拟地址对应的页表项的镜像指示信息字段全部置为1。调用execX()函数启动目标进程,目标继承全部镜像内存设置,后续分配的内存也自动启动镜像保护。
步骤2、进程启动后运行mirrorable命令镜像进程的内存。
MML:#mirroable pid;
mirroable命令先挂起pid进程;修改pid进程task_struct->mirrorable为真(True);把pid进程的全部虚拟地址对应页表项的镜像指示信息字段全部置为1;为pid进程已经分配物理页分配新的镜像物理页,并将现有物理页数据复制到镜像物理页,用镜像物理页物理地址刷新虚拟地址对应的物理地址;释放原先未镜像的物理页;激活pid进程继续运行。
步骤3、通过编程接口管理进程内存镜像
判断当前版本的操作系统是否支持动态内存镜像,并判断CPU和MC是否支持动态内存镜像。如果操作系统、CPU和MC支持动态内存镜像,调用支持镜像内存的函数申请内存空间,相关函数自动完成镜像保护页面虚拟地址对应页表项的镜像指示信息全部置为1;缺页中断处理函数自动分配、回收镜像物理页。
需要说明的是,通过mirroable命令是对进程所有内存模块全部镜像,也可以考虑选择进程的部分VMA段进行镜像保护。如果需要保护特定页面,可通过编程接口,由程序员来完成。
此外,如果OS可以支持双内核(kernel),可以通过mirroable命令启动一个内存镜像保护新内核,然后业务全部交给新内核管理,并释放未镜像保护的旧内核,这样就可以在运行时(Runtime)把内核切换到镜像保护状态。
下面对动态镜像内存物理页面故障处理流程进行介绍。
计算设备在运行过程中,响应于上述镜像内存空间发生故障,隔离镜像内存空间;计算设备为虚拟地址重新分配镜像内存空间,计算设备将主内存空间保存的数据写入至重新分配的镜像内存空间。
例如,计算设备从内存中空闲可用的内存空间中,选择与主内存空间容量相同的内存空间,作为重新分配的镜像内存空间。
此外,计算设备还对故障的镜像内存空间添加标记。标记用于指示镜像内存空间处于故障状态。计算机后续在分配内存时,不会分配已标记的内存空间,从而避免故障的镜像内存空间被分配时引起的问题。动态镜像内存故障处理流程包括下述步骤1至步骤7。
步骤1、系统正常运行时,通过自动巡检内存发现故障,或者在访问内存时遇到故障。
步骤2、计算设备的硬件确定内存中的故障页,触发中断,进入步骤3和步骤4。具体地,当MC执行镜像读写指令遇到不可纠正错误(Uncorrectable Error,UCE)时,通过中断通知OS进行数据恢复和故障页隔离。
步骤3、计算设备从正常页恢复数据。
步骤4、计算设备的OS或虚拟机监视器(Virtual Machine Monitor,VMM)隔离故障页,进入步骤5,并进入步骤6或步骤7。
步骤5、计算设备的OS或VMM重新分配镜像页。
步骤6、如果异常数量低于阈值或者可用内存高于阈值,计算设备产生异常告警。
步骤7、如果异常数量高于阈值或者可用内存低于阈值,计算设备产生故障告警。
下面对本实施例提供的动态镜像内存的接口进行介绍。动态镜像内存的接口包括数据结构定义、用户态接口、内核态接口等方面。通过动态内存镜像的开发应用程序接口(Application Programming Interface,API),能够提供精细化的动态内存管理开发接口。下面从数据结构定义、用户态接口和内核态接口分别介绍本实施例提供的API。
1、数据结构定义
1.1定义了特性配置:CONFIG_ACPI_MIRROR_MEMORY。
1.2定义了管理结构:mirror_info。
1.3定义vm_stat引用计数,新增:NR_FREE_MIRROR_PAGES。
1.4编程接口:gfp分配标志新增GFP_MIRROR(内核态)。
1.5编程接口:vma新增标志VM_MIRROR(用户态)。
1.6非编程接口:task_struct->mirrorable,全局变量mirrorable。
2、用户态接口(编程/非编程)
2.1mmap(MAP_MIRROR)->vma(VM_MIRROR)->alloc_page(GFP_MIRROR)。
2.2malloc(xx)->madvise(MAP_MIRROR)->vma(VM_MIRROR)->alloc_page(GFP_MIRRO R)。
2.3syscall->task_struct->mirrorable。
2.4新增命令mirrorable用于运行时修改镜像配置:/proc/pid/mirrorable。
3、内核态接口(编程/非编程)
3.1alloc_page(GFP_MIRROR);
3.2/proc/sys/vm/mirrorable->全局变量mirrorable。
本实施例通过提供上述动态内存镜像编程接口,可以实现以页为单位的动态内存镜像。
附图5是本申请实施例提供的一种内存读写指令的执行装置的结构示意图。附图5所示的装置500例如实现附图3所示方法中计算设备的功能。
请参考附图5,装置500包括接收单元501、确定单元502和读写单元503。装置500中的各个单元全部或部分地通过软件、硬件、固件或者其任意组合来实现。接收单元501用于支持装置500执行S301。确定单元502用于支持装置500执行S302。读写单元503用于支持装置500执行S303。
可选地,装置500还包括分配单元,分配单元用于支持装置500执行分配内存空间的步骤。
可选地,读写单元503还用于支持装置500执行写入镜像指示信息、将指定对象的镜像标志修改为设定值的步骤。
可选地,装置500还包括隔离单元,隔离单元用于支持装置500执行隔离故障的内存空间的步骤。
附图5所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。附图5中上述各个单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。例如,采用软件实现时,上述确定单元502和读写单元503可以是由附图1中的处理器101或处理器105读取存储器102中存储的程序代码后,生成的软件功能单元来实现。附图5中上述各个单元也可以由计算设备中的不同硬件分别实现,例如确定单元502由附图1中的至少一个处理器101中的一部分处理资源(例如多核处理器中的一个核或两个核)实现,而读写单元503由附图1中处理器101中的其余部分处理资源(例如多核处理器中的其他核),或者采用现场可编程门阵列(field-programmable gate array,FPGA)、或协处理器等可编程器件来完成。接收单元501由附图1中的网络接口103实现。显然上述功能单元也可以采用软件硬件相结合的方式来实现,例如确定单元502由硬件可编程器件实现,而读写单元503是由CPU读取存储器中存储的程序代码后,生成的软件功能单元。
本申请实施例,除非另有说明,“至少一个”的含义是指一个或多个。
上述实施例可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例描述的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
以上,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (23)

1.一种内存读写指令的执行方法,其特征在于,所述方法包括:
接收内存读写指令,所述内存读写指令携带目标内存空间的虚拟地址;
响应于所述虚拟地址对应的页表项包括镜像指示信息,根据所述虚拟地址确定主地址和镜像地址,所述镜像指示信息用于标识所述目标内存空间已启用内存镜像,所述主地址为所述目标内存空间中主内存空间的物理地址,所述镜像地址为所述目标内存空间中镜像内存空间的物理地址;
根据所述主地址和所述镜像地址,对所述主内存空间和所述镜像内存空间执行所述内存读写指令对应的操作。
2.根据权利要求1所述的方法,其特征在于,所述镜像内存空间和所述主内存空间位于不同的通道。
3.根据权利要求1或2所述的方法,其特征在于,所述镜像内存空间与所述主内存空间相隔至少一个缓存行尺寸的距离。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述主地址包括的偏移地址是根据缓存行尺寸以及所述虚拟地址包括的偏移地址确定的。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述根据所述主地址和所述镜像地址,对所述主内存空间和所述镜像内存空间执行所述内存读写指令对应的操作,包括:
响应于所述主地址对应的错误检查和纠正ECC空间以及所述镜像地址对应的ECC空间均包括所述镜像指示信息,根据所述主地址和所述镜像地址,对所述主内存空间和所述镜像内存空间执行所述内存读写指令对应的操作。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述接收内存读写指令之前,所述方法还包括:
接收指定对象的内存分配请求;
响应于所述指定对象的镜像标志置为设定值,为所述指定对象分配所述目标内存空间;
其中,所述镜像标志在置为设定值时指示为指定对象分配包括主内存空间和镜像内存空间的内存空间。
7.根据权利要求6所述的方法,其特征在于,所述接收指定对象的内存分配请求之后,所述方法还包括:
向所述虚拟地址对应的页表项、所述主地址对应的ECC空间以及所述镜像地址对应的ECC空间分别写入所述镜像指示信息。
8.根据权利要求6或7所述的方法,其特征在于,所述接收指定对象的内存分配请求之前,所述方法还包括:
响应于内存镜像指令,将所述指定对象的镜像标志修改为所述设定值,所述内存镜像指令指示针对所述指定对象所需的内存空间启用内存镜像。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述虚拟地址标识的每一个虚拟页对应于两个相邻的物理页。
10.根据权利要求1至9中任一项所述的方法,其特征在于,所述方法还包括:
响应于所述镜像内存空间发生故障,隔离所述镜像内存空间;
为所述虚拟地址重新分配镜像内存空间,将所述主内存空间保存的数据写入至重新分配的镜像内存空间。
11.一种内存读写指令的执行装置,其特征在于,所述装置包括:
接收单元,用于接收内存读写指令,所述内存读写指令携带目标内存空间的虚拟地址;
确定单元,用于响应于所述虚拟地址对应的页表项包括镜像指示信息,根据所述虚拟地址确定主地址和镜像地址,所述镜像指示信息用于标识所述目标内存空间已启用内存镜像,所述主地址为所述目标内存空间中主内存空间的物理地址,所述镜像地址为所述目标内存空间中镜像内存空间的物理地址;
读写单元,用于根据所述主地址和所述镜像地址,对所述主内存空间和所述镜像内存空间执行所述内存读写指令对应的操作。
12.根据权利要求11所述的装置,其特征在于,所述镜像内存空间和所述主内存空间位于不同的通道。
13.根据权利要求11或12所述的装置,其特征在于,所述镜像内存空间与所述主内存空间相隔至少一个缓存行尺寸的距离。
14.根据权利要求11至13中任一项所述的装置,其特征在于,所述主地址包括的偏移地址是根据缓存行尺寸以及所述虚拟地址包括的偏移地址确定的。
15.根据权利要求11至14中任一项所述的装置,其特征在于,所述读写单元,用于响应于所述主地址对应的错误检查和纠正ECC空间以及所述镜像地址对应的ECC空间均包括所述镜像指示信息,根据所述主地址和所述镜像地址,对所述主内存空间和所述镜像内存空间执行所述内存读写指令对应的操作。
16.根据权利要求11至15中任一项所述的装置,其特征在于,所述接收单元,还用于接收指定对象的内存分配请求;
所述装置还包括:分配单元,用于响应于所述指定对象的镜像标志置为设定值,为所述指定对象分配所述目标内存空间;
其中,所述镜像标志在置为设定值时指示为指定对象分配包括主内存空间和镜像内存空间的内存空间。
17.根据权利要求16所述的装置,其特征在于,所述读写单元,还用于向所述虚拟地址对应的页表项、所述主地址对应的ECC空间以及所述镜像地址对应的ECC空间分别写入所述镜像指示信息。
18.根据权利要求16或17所述的装置,其特征在于,所述读写单元,还用于响应于内存镜像指令,将所述指定对象的镜像标志修改为所述设定值,所述内存镜像指令指示针对所述指定对象所需的内存空间启用内存镜像。
19.根据权利要求11至18中任一项所述的装置,其特征在于,所述虚拟地址标识的每一个虚拟页对应于两个相邻的物理页。
20.根据权利要求11至19中任一项所述的装置,其特征在于,
隔离单元,用于响应于所述镜像内存空间发生故障,隔离所述镜像内存空间;
所述装置还包括:分配单元,用于为所述虚拟地址重新分配镜像内存空间,所述读写单元,还用于将所述主内存空间保存的数据写入至重新分配的镜像内存空间。
21.一种计算设备,其特征在于,所述计算设备包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述程序代码由所述处理器加载并执行以实现如权利要求1至权利要求10任一项所述的方法。
22.一种计算设备,其特征在于,所述计算设备包括内存管理单元MMU、内存控制器MC和内存;
所述MMU,用于接收内存读写指令,所述内存读写指令携带目标内存空间的虚拟地址;
所述MMU,还用于响应于所述虚拟地址对应的页表项包括镜像指示信息,根据所述虚拟地址确定主地址和镜像地址,所述镜像指示信息用于标识所述目标内存空间已启用内存镜像,所述主地址为所述目标内存空间中主内存空间的物理地址,所述镜像地址为所述目标内存空间中镜像内存空间的物理地址;
所述MC,用于根据所述主地址和所述镜像地址,对所述内存中的主内存空间和所述内存中的镜像内存空间执行所述内存读写指令对应的操作。
23.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条程序代码,所述程序代码由处理器加载并执行以实现如权利要求1至权利要求10任一项所述的方法。
CN202110281668.8A 2021-03-16 2021-03-16 内存读写指令的执行方法及计算设备 Pending CN115080223A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110281668.8A CN115080223A (zh) 2021-03-16 2021-03-16 内存读写指令的执行方法及计算设备
PCT/CN2021/140505 WO2022193768A1 (zh) 2021-03-16 2021-12-22 内存读写指令的执行方法及计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110281668.8A CN115080223A (zh) 2021-03-16 2021-03-16 内存读写指令的执行方法及计算设备

Publications (1)

Publication Number Publication Date
CN115080223A true CN115080223A (zh) 2022-09-20

Family

ID=83246203

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110281668.8A Pending CN115080223A (zh) 2021-03-16 2021-03-16 内存读写指令的执行方法及计算设备

Country Status (2)

Country Link
CN (1) CN115080223A (zh)
WO (1) WO2022193768A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117670649A (zh) * 2024-01-30 2024-03-08 南京砺算科技有限公司 元数据写入及读取方法、图形处理单元
WO2024113844A1 (zh) * 2022-11-29 2024-06-06 华为技术有限公司 内存访问方法及相关装置

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115373964B (zh) * 2022-10-24 2023-01-20 北京智芯微电子科技有限公司 内存越界检测方法、装置、设备及介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012043246A (ja) * 2010-08-20 2012-03-01 Canon Inc 情報処理装置、情報処理装置の制御方法、及び、プログラム
CN107085535B (zh) * 2017-03-30 2020-10-27 联想(北京)有限公司 一种信息处理方法及电子设备
CN113868151A (zh) * 2019-05-16 2021-12-31 华为技术有限公司 配置镜像内存的方法、装置及计算机存储介质
CN111400096B (zh) * 2020-03-16 2023-05-02 杭州涂鸦信息技术有限公司 基于linux缺页机制的内存镜像方法及其系统和装置
CN112256396B (zh) * 2020-10-23 2022-10-21 海光信息技术股份有限公司 内存管理方法、系统及安全处理装置、数据处理装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024113844A1 (zh) * 2022-11-29 2024-06-06 华为技术有限公司 内存访问方法及相关装置
CN117670649A (zh) * 2024-01-30 2024-03-08 南京砺算科技有限公司 元数据写入及读取方法、图形处理单元

Also Published As

Publication number Publication date
WO2022193768A1 (zh) 2022-09-22

Similar Documents

Publication Publication Date Title
US7644252B2 (en) Multi-processor system and memory accessing method
US9529611B2 (en) Cooperative memory resource management via application-level balloon
CN115080223A (zh) 内存读写指令的执行方法及计算设备
EP2449469B1 (en) Hypervisor-based management of local and remote virtual memory pages
CA2024444C (en) Process using virtual addressing in a non-privileged instruction to control the copying of a page of data in or between multiple media
US9940228B2 (en) Proactive memory reclamation for java virtual machines
US8453015B2 (en) Memory allocation for crash dump
US8719543B2 (en) Systems and methods implementing non-shared page tables for sharing memory resources managed by a main operating system with accelerator devices
JP5484117B2 (ja) ハイパーバイザ及びサーバ装置
KR20210089150A (ko) 호스트 컴퓨팅 디바이스 가상 메모리에 의해 지원되는 가상 머신 메모리의 더 빠른 액세스
JP4783392B2 (ja) 情報処理装置および障害回復方法
US20110161620A1 (en) Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US20140181359A1 (en) Information processing apparatus and method of collecting memory dump
WO2016115661A1 (zh) 内存故障隔离方法和装置
TW201502781A (zh) 解決記憶體存取錯誤時重播記憶體交易
US20040073765A1 (en) Method and system of managing virtualized physical memory in a memory controller and processor system
US7734842B2 (en) Computer-implemented method, apparatus, and computer program product for managing DMA write page faults using a pool of substitute pages
JPWO2008099786A1 (ja) メモリ障害復旧方法、情報処理装置およびプログラム
US9727256B1 (en) Virtual memory management techniques
US10216529B1 (en) Method and system for sharing driver pages
US20170277632A1 (en) Virtual computer system control method and virtual computer system
CN114595164B (zh) 在虚拟化平台中管理tlb高速缓存的方法和装置
US8898413B2 (en) Point-in-time copying of virtual storage
CN115617542A (zh) 内存交换方法、装置、计算机设备及存储介质
JP5531476B2 (ja) 情報処理装置及び情報処理プログラム

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