CN112667422A - 内存故障处理方法及装置、计算设备、存储介质 - Google Patents
内存故障处理方法及装置、计算设备、存储介质 Download PDFInfo
- Publication number
- CN112667422A CN112667422A CN201910984310.4A CN201910984310A CN112667422A CN 112667422 A CN112667422 A CN 112667422A CN 201910984310 A CN201910984310 A CN 201910984310A CN 112667422 A CN112667422 A CN 112667422A
- Authority
- CN
- China
- Prior art keywords
- memory block
- physical memory
- physical
- virtual address
- fault
- 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
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请公开了一种内存故障处理方法及装置、计算设备、存储介质,属于存储技术领域。该方法包括:申请分配多个虚拟内存块,并记录每个虚拟内存块的虚拟地址,虚拟地址对应物理内存块的物理地址;确定物理内存中出现故障的物理内存块;将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用;在接收到写请求后,不为写请求分配被标记为不可用的虚拟地址。本申请能够对出现故障的物理内存块进行处理,并保证计算设备运行的稳定性。
Description
技术领域
本申请涉及存储技术领域,特别涉及一种内存故障处理方法及装置、计算设备、存储介质。
背景技术
计算设备中,内存是向处理器提供数据缓存的部件,应用程序访问到出现故障的内存时,会导致操作系统停止向应用程序产生响应,进而导致操作系统宕机,影响操作系统运行的稳定性。因此,及时发现并处理内存出现的故障,能够避免应用程序访问到出现故障的内存,进而保障操作系统运行的稳定性。其中,内存包括多个物理内存块,物理内存块可能出现不可纠正错误(uncorrect error,UCE)。
相关技术中,应用程序访问物理内存块失败时,应用程序可以确定该物理内存块出现UCE,此时,应用程序可以向操作系统发送故障通知,操作系统可以根据该故障通知对计算设备进行断电重启,使得在计算设备重启后,实现对该物理内存块的复位。其中,UCE是加载在物理内存块上的电压等受到干扰时,使物理内存块出现的故障,该UCE通常在断电重启后会消失,因此,通过对物理内存块进行复位能够有效处理UCE,使得物理内存块恢复正常,能够避免应用程序访问到出现UCE的物理内存块。
但是,对计算设备进行断电重启会导致计算设备的的运行稳定性较差。
发明内容
本申请提供了一种内存故障处理方法及装置、计算设备、存储介质,可以用于解决相关技术中对内存故障进行处理时影响计算设备的运行稳定性的问题。所述技术方案如下:
第一方面,本申请提供了一种内存故障处理方法,该方法包括:申请分配多个虚拟内存块,并记录每个虚拟内存块的虚拟地址,虚拟地址对应物理内存块的物理地址;确定物理内存中出现故障的物理内存块;将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用;在接收到写请求后,不为写请求分配被标记为不可用的虚拟地址。
本申请实施例提供的内存故障处理方法,通过将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用,在接收到写请求后,不为写请求分配被标记为不可用的虚拟地址,使得应用程序无法将数据写入出现故障的物理内存块。这样一来,一方面能够减少因访问写入出现故障的物理内存块的数据所导致访问失败的几率,减小访问失败对计算设备运行稳定性造成的影响,另一方面,由于该内存故障处理方法是通过将虚拟地址标记为不可用实现的,使得能够在线对物理内存块的故障进行处理,无需对计算设备进行断电重启,有效地保证了计算设备运行的稳定性。
可选的,为保证该应用程序在该物理内存块中存储的数据的可用性,可以对该应用程序在该物理内存块中存储的数据进行数据恢复,并将该数据写入可用的虚拟地址中。
数据恢复的第一种实现方式包括:获取在出现故障的物理内存块出现故障时,目标虚拟地址对应的一个或多个物理地址指示的物理内存块中已存储的数据,并将获取的数据写入未被标记为不可用的虚拟地址中。
数据恢复的第二种实现方式包括:获取在出现故障的物理内存块出现故障时,目标虚拟地址指向的一个或多个物理内存块中已存储的数据在外部存储器中的副本,将副本写入未出现故障的物理内存块中。
在一种可实现方式中,确定物理内存中出现故障的物理内存块的实现过程,可以包括:周期性的访问物理内存中的数据;将物理内存中访问失败的物理内存块,确定为出现故障的物理内存块。
通过访问物理内存中的数据,并根据访问情况确定物理内存块是否出现故障的实现方式,相较于相关技术中通过应用程序访问物理内存块,并确定物理内存块出现故障的实现方式,由于在该确定出现故障的实现过程中,应用程序还未消费该物理内存块中存储的数据,因此,该物理内存块出现的故障不会对应用程序造成影响。并且,在对该故障进行处理后,能够保证系统运行的稳定性。
在另一种可实现方式中,确定出现故障的物理内存块的实现过程,可以包括:接收基本输入输出系统发送的出现故障的物理内存块的物理地址;根据物理地址确定出现故障的物理内存块。其中,基本输入输出系统可以统计物理内存块出现可纠正错误的次数;并在物理内存块在参考个数个统计周期中的每个统计周期内,出现可纠正错误的次数均大于参考次数阈值时,确定物理内存块出现故障,并发送的出现故障的物理内存块的物理地址。
由于内存的同一地址在一段时间内频繁出现CE,该内存地址出现UCE的概率会明显增加,因此,根据出现CE的次数确定物理内存块出现故障,能够实现对故障的有效检测。并且,通过对采用该方式确定的故障进行处理,能够在CE演变成UCE之前对故障进行处理,可以避免故障演变成UCE,有效保证了系统运行的稳定性。
第二方面,提供了一种内存故障处理装置,该装置包括:申请模块,用于申请分配多个虚拟内存块,并记录每个虚拟内存块的虚拟地址,虚拟地址对应物理内存块的物理地址;确定模块,用于确定物理内存中出现故障的物理内存块;标记模块,用于将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用;分配模块,用于在接收到写请求后,不为写请求分配被标记为不可用的虚拟地址。
可选的,该装置还包括:获取模块,用于获取在出现故障的物理内存块出现故障时,目标虚拟地址对应的一个或多个物理地址指示的物理内存块中已存储的数据,目标虚拟地址为出现故障的物理内存块的物理地址对应的虚拟地址;写入模块,用于将获取的数据写入未被标记为不可用的虚拟地址中。
可选的,确定模块,具体用于:周期性的访问物理内存中的数据;将物理内存中访问失败的物理内存块,确定为出现故障的物理内存块。
可选的,确定模块,具体用于:接收基本输入输出系统发送的出现故障的物理内存块的物理地址;根据物理地址确定出现故障的物理内存块。
第三方面,提供了一种计算设备,包括处理器、存储器和内存;在处理器执行存储器存储的计算机程序时,计算设备执行第一方面的内存故障处理方法。
第四方面,提供了一种存储介质,当存储介质中的指令被处理器执行时,实现第一方面的内存故障处理方法。
第五方面,提供了一种包含指令的计算机程序产品,当计算机程序产品在计算设备上运行时,使得计算设备实现第一方面的内存故障处理方法。
上述第二至五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
附图说明
图1是本申请实施例提供的一种内存故障处理方法所涉及的计算设备的结构示意图;
图2是本申请实施例提供的一种MMU向应用程序分配内存的原理示意图;
图3是本申请实施例提供的一种UMM单元向应用程序分配内存的原理示意图;
图4是本申请实施例提供的一种内存故障处理方法的流程图;
图5是本申请实施例提供的一种进行数据恢复的方法流程图;
图6是本申请实施例提供的另一种进行数据恢复的方法流程图;
图7是本申请实施例提供的一种内存故障处理装置的结构示意图;
图8是本申请实施例提供的另一种内存故障处理装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请实施例提供的内存故障处理方法可以由计算设备执行,该计算设备可以为服务器或终端等。如图1所示,该计算设备10可以包括:处理器101、通信接口102、外部存储器103、内存(也称物理内存)104、基本输入输出系统105(basic input output system,BIOS)和总线106。其中,处理器101、通信接口102、外部存储器103、内存104和基本输入输出系统105之间通过总线106相互连接。
外部存储器103用于存储可执行代码或存储执行应用程序时产生的数据等。该外部存储器103中存储的可执行代码可被读取到内存中,并被处理器101运行,以实现该可执行代码对应的功能。类似的,该外部存储器103中存储的数据可被读取到内存中,并被处理器101访问,以根据该数据执行相应的处理。例如,本申请实施例提供的内存故障处理方法可通过运行可执行代码实现,且该内存故障处理方法对应的可执行代码可被存储在外部存储器103中,当该内存故障处理方法对应的可执行代码被读入内存中并被处理器101运行时,可实现该内存故障处理方法的功能。并且,外部存储器103中还可以包括操作系统(operating system,OS)等其他运行进程所需的软件程序。
其中,操作系统是管理计算机硬件与软件资源的程序,同时也是计算机系统的核心与基石。操作系统身负诸如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。在本申请实施例中,操作系统可以为LINUXTM,UNIXTM,WINDOWSTM等。
内存104用于暂时存放处理器101运行时需要的数据,例如计算设备启动时从外部存储器103读入内存的操作系统,及执行应用程序时产生的数据。由于内存104具有较快的读写速度,内存104通常用作外部存储器103与处理器101的缓存,即在计算设备的运行过程中,可以预先将处理器101需要使用的数据从外部存储器103读入内存104中,使得处理器101从内存104中读取所需的数据,以保证处理器101的计算速度。
基本输入输出系统105用于对计算设备内各个组件进行自检和初始化,并作为软件程序与硬件之间的传输媒介,在软件程序和硬件之间传输信息。
通信接口102使用任何收发器一类的装置,用于与其它设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(wireless local area networks,WLAN)等。
其中,总线106可以分为地址总线、数据总线、控制总线等。为便于表示,图1中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器101可以是硬件芯片,该硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logicdevice,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。处理器101也可以是通用处理器,例如,中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。
外部存储器103可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);外部存储器103也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);或者,外部存储器103还可以包括上述种类的存储器的组合。
在本申请实施例提供的内存故障处理方法中,可以由统一内存管理(unifiedmemory management,UMM)单元预先申请分配虚拟内存单元,并记录每个虚拟内存块的虚拟地址,并确定物理内存中出现故障的物理内存块,将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用,在接收到写请求后,不为写请求分配被标记为不可用的虚拟地址,使得应用程序无法将数据写入出现故障的物理内存块。这样一来,一方面能够减少因访问写入出现故障的物理内存块的数据所导致访问失败的几率,减小访问失败对计算设备运行稳定性造成的影响,另一方面,由于该内存故障处理方法是通过将虚拟地址标记为不可用实现的,使得能够在线对物理内存块的故障进行处理,无需对计算设备进行断电重启,有效地保证了计算设备运行的稳定性。
其中,所述UMM单元为存储于内存的应用程序,处理器101执行内存中的应用程序以实现所述UMM单元的功能。
所述计算设备还包括内存管理单元(memory management unit,MMU),该MMU用于建立虚拟内存空间,并在接收到应用程序的写I/O请求时,为所述写I/O请求分配虚拟内存块,MMU为I/O请求分配虚拟内存块的过程如图2所示:为所述I/O请求分配虚拟内存地址,为分配给I/O请求的虚拟内存地址设置空闲的物理内存块,并建立虚拟内存地址与物理内存块的物理地址的映射关系。这样,根据所述映射关系,可以将写I/O请求中的待写数据写入所述物理内存块。
在本发明实施例中,所述UMM单元可以预先向MMU申请分配多个虚拟内存块,UMM单元向MMU申请分配虚拟内存块的过程与I/O应用向MMU申请分配虚拟内存块的过程类似,分配完成后,UMM单元记录MMU所分配的虚拟内存块的虚拟地址,而MMU中记录为UMM分配的多个虚拟内存块的虚拟地址与物理地址的对应关系。
在本发明实施例中,对于一些对时延要求比较高的应用程序,可以在应用程序中设定由UMM单元为其写I/O分配虚拟内存块,这样,应用程序产生的I/O请求会由UMM分配虚拟内存块而不是由MMU分配。如图3所示,在所述UMM单元接收到I/O请求后,会从预先申请的多个虚拟内内存块中为I/O写请求分配虚拟内存块,这样,由于每个虚拟内存块已经预先分配了物理内存,所以可以快速响应所述I/O写请求。
另外,在通过UMM单元为应用程序分配虚拟内存块后,在应用程序释放一个虚拟内存块后,UMM单元不会将该虚拟内存块的虚拟地址返还至MMU,UMM单元还可以继续维护该应用程序与该虚拟内存块的虚拟地址的对应关系,即不将该虚拟地址分配给其他应用程序,这样,应用程序再次向所述UMM申请虚拟内存块时,可以向该应用程序分配该同样的虚拟地址,以使该应用程序写入的数据与上次写入的数据存储在相同的物理内存块中。例如,假设在上一次分配过程中,向应用程序A分配了虚拟地址1,与该虚拟地址1对应的物理地址指示物理内存块1,在再次需要向应用程序A分配虚拟地址时,仍然向应用程序A分配虚拟地址1,使该应用程序A写入的数据继续写入物理内存块1中。
这样一来,该应用程序在本次运行过程中,能够从该相同的物理内存块中读出上次写入的数据,以实现该应用程序进程的迅速拉起,相较于在进程退出时将虚拟地址返还至操作系统的相关技术,有效的提高了拉起进程的速度。并且,该作用在恢复进程的过程中表现的尤其明显。例如,在应用程序的进程异常退出时,通过UMM单元自行回收虚拟地址,并在恢复该应用程序的进程时,向该应用程序分配在进程异常退出之前向该应用程序分配的虚拟地址,使得该应用程序能够从该虚拟地址对应的物理地址所指示的物理内存块中,读取该应用程序进程异常退出前存储在该物理内存块中的数据,并根据该数据快速恢复进程。
需要说明的是,在MMU直接向应用程序分配虚拟地址的相关技术中,应用程序与MMU之间的通信是通过应用程序调用MMU的接口实现的。在本申请实施例中,为实现该UMM单元为应用程序分配内存的功能,可以预先修改应用程序的接口调用程序,使得应用程序申请内存时所调用的接口为UMM单元的接口。
下面对本申请实施例提供的内存故障处理方法的实现过程进行说明。如图4所示,该方法可以包括:
步骤401、UMM单元申请分配多个虚拟内存块,并记录每个虚拟内存块的虚拟地址,其中,虚拟地址对应物理内存块的物理地址。
UMM单元可以在操作系统的初始化过程中,或者,在接收到预设信息后,预先向MMU申请分配多个虚拟内存块,使得UMM单元在接收到应用程序发送的I/O请求后,能够从其预先申请到的虚拟内存中,向应用程序分配虚拟内存。其中,预设信息可以根据应用需求进行配置。例如,该预设信息可以为在完成操作系统的初始化过程后,UMM单元初次接收到的I/O请求。
其中,每个虚拟地址可以与一个或多个物理地址对应,每个物理地址用于指示一个物理内存块。示例的,假设物理内存包括100个物理内存块,在操作系统的初始化过程中,MMU向UMM单元分配了10个虚拟地址,每个虚拟地址与10个物理地址存在映射关系。该映射关系请参考表1,虚拟地址0与物理地址0至9存在映射关系,虚拟地址1与物理地址10至19存在映射关系,虚拟地址2与物理地址20至29存在映射关系,虚拟地址3与物理地址30至39存在映射关系,虚拟地址4与物理地址40至49存在映射关系,虚拟地址5与物理地址50至59存在映射关系,虚拟地址6与物理地址60至69存在映射关系,虚拟地址7与物理地址70至79存在映射关系,虚拟地址8与物理地址80至89存在映射关系,虚拟地址9与物理地址90至99存在映射关系。
表1
虚拟地址0 | 物理地址0至9 |
虚拟地址1 | 物理地址10至19 |
虚拟地址2 | 物理地址20至29 |
虚拟地址3 | 物理地址30至39 |
虚拟地址4 | 物理地址40至49 |
虚拟地址5 | 物理地址50至59 |
虚拟地址6 | 物理地址60至69 |
虚拟地址7 | 物理地址70至79 |
虚拟地址8 | 物理地址80至89 |
虚拟地址9 | 物理地址90至99 |
步骤402、UMM单元确定物理内存中出现故障的物理内存块。
在该步骤402的第一种可实现方式中,UMM单元接收BIOS发送的出现故障的物理内存块的物理地址,并根据该物理地址确定出现故障的物理内存块。
由于当物理内存块频繁出现CE时,该物理内存块出现UCE的概率会增加,且当物理内存块出现UCE时,会导致访问失败,导致应用程序的进程被影响。因此,可以通过计算设备中的BIOS统计每个物理内存块出现CE的次数,并在某个物理内存块出现CE的次数满足预设判断条件时,确定该物理内存块出现故障,然后由BIOS向该UMM单元发送指示该物理内存块出现故障的信息。该消息中携带有出现故障的物理内存块的物理地址,UMM单元接收到该消息时,可以根据该消息中携带的物理地址确定出现故障的物理内存块。
可选的,该预设判断条件可以根据应用需求确定,例如,该预设判断条件可以为当某个物理内存块在参考个数个统计周期中的每个统计周期内,出现CE的次数均大于参考次数阈值时,确定该物理内存块出现故障。该参考个数、统计周期的时长和参考次数阈值均可以根据应用需求设置。例如,参考个数可以为10,统计周期的时长可以为10秒,参考次数阈值可以为100。
其中,CE是指在纠错校验码(error correcting code,ECC)等的影响下,物理内存块输出的数据出现的少量比特(如1比特)的错误。由于操作系统中内存控制器具有ECC纠错功能,可以自行对该CE进行纠正,使得从物理内存块中读取数据的应用程序感知不到该错误,即该错误不会对应用程序产生影响,因此,该错误称为可纠正的错误。
由于处理器中运行有对数据进行校验的校验程序,该校验程序可以根据纠错校验码检查物理内存块输出的数据是否出现少量比特的错误,且在该校验程序每次确定物理内存块输出的数据出现少量比特的错误时,该校验程序均会通过BIOS向运行在处理器中的内存控制器发送纠错命令,以指示内存控制器对该物理内存块输出的数据执行纠错操作,以得到正确的数据。因此,能够通过BIOS监听物理内存块是否出现CE,并统计物理内存块出现CE的次数。其中,在BIOS每次向内存控制器发送指示对某个物理内存块输出的数据执行纠错操作的纠错命令时,BIOS可以确定该物理内存块出现一次CE。
需要说明的是,BIOS向UMM单元发送消息的方式可以包括:BIOS直接或间接向UMM单元发送消息。当BIOS间接向UMM单元发送消息时,BIOS可以先向操作系统发送消息,并通过操作系统向该UMM单元发送该消息。并且,操作系统可以通过中断响应等方式向UMM单元发送消息。
其中,为使BIOS向该UMM单元发送指示物理内存块出现故障的信息,可以预先修改BIOS,为BIOS配置以下功能:统计每个物理内存块出现CE的次数,并在某一物理内存块出现CE的次数满足预设判断条件时,确定该物理内存块出现故障,然后向UMM单元发送指示该物理内存块出现故障的信息。
由于内存的同一物理内存块在一段时间内频繁出现CE,该物理内存块出现UCE的概率会明显增加,因此,根据出现CE的次数确定物理内存块出现故障,能够实现对故障的有效检测。并且,通过对采用该方式确定的出现故障的物理内存块进行处理,能够在CE演变成UCE之前实现对故障的处理,可以避免故障演变成UCE,有效保证了计算设备的运行稳定性。
在该步骤402的第二种可实现方式中,UMM单元接收BIOS发送的指示物理内存块出现CE的消息,统计每个物理内存块出现CE的次数,并在某个物理内存块出现CE的次数满足预设判断条件时,确定该物理内存块出现故障。
相应的,可以预先修改BIOS,使得BIOS每次向内存控制器发送指示对某个物理内存块输出的数据执行纠错操作的纠错命令时,BIOS向UMM单元发送指示该物理内存块出现一次CE的消息。
在该步骤402的第三种可实现方式中,可以通过处理器运行预设的检测程序对物理内存块中存储的数据进行访问,并在检测程序对某个物理内存块访问失败时,检测程序确定该物理内存块出现故障,然后检测程序向该UMM单元发送出现故障的物理内存块的物理地址。UMM单元可以根据该物理地址确定出现故障的物理内存块。
可选的,该检测程序对第一物理内存块的访问方式可以有多种。在一种访问方式中,检测程序可以通过遍历的方式,访问内存中的所有物理内存块,当检测程序遍历到某一物理内存块时,若对该物理内存块的访问失败,可以确定该物理内存块出现故障。在另一种访问方式中,检测程序可以在处理器向该检测程序发送的访问指令的控制下,对该访问指令所指示的物理内存块进行访问,并在访问失败时确定该物理内存块出现故障。
并且,对物理内存块的访问也可以是周期性的访问,或不定时的访问,本申请实施例对此不做具体限定。
通过处理器运行预设的检测程序访问物理内存块,并根据访问情况确定物理内存块出现故障的实现方式,相较于相关技术中在应用程序访问物理内存块失败时才能确定物理内存块出现故障的实现方式,由于在该检测程序访问物理内存块确定故障的实现过程中,应用程序还未消费该物理内存块中存储的数据,因此,该物理内存块出现的故障不会对应用程序造成影响。并且,在对该故障进行处理后,能够保证计算设备的运行稳定性不会因应用程序访问数据失败受到影响。
步骤403、UMM单元发送查询指令至MMU,查询出现故障的物理内存块的虚拟地址。
在本发明实施例中,由于UMM中只记录了为其分配的物理内存块的物理地址对应的虚拟地址,而虚拟地址与物理地址之间的映射关系记录在MMU中,所以,所述UMM需要向所述MMU发送查询指令查询所述第一物理内存块的虚拟地址。
步骤404、UMM将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用。
通过将出现故障的物理内存块的物理地址所对应的虚拟地址(下文简称为出现故障的物理内存块的虚拟地址)标记为不可用,可以使UMM单元在后续向应用程序分配虚拟地址的过程中,不会向应用程序分配该被标记为不可用的虚拟地址,能够减小对物理内存块的访问,减小访问失败的几率,进而减小因访问失败对计算设备运行稳定性造成的影响。
需要说明的是,在将出现故障的物理内存块的虚拟地址标记为不可用时,若该出现故障的物理内存块的虚拟地址未被应用程序占用,该不可用标记会立即生效。也即是,在将该虚拟地址标记为不可用后,虽然该虚拟地址未被占用,即该虚拟地址处于可以被分配给应用程序的状态,但由于该虚拟地址被标记为不可用,UMM单元也不会向应用程序分配该虚拟地址。在将出现故障的物理内存块的虚拟地址标记为不可用时,若该虚拟地址正在被应用程序占用,由于该虚拟地址处于未被占用状态后,该虚拟地址才有可能会被分配给应用程序,因此,该不可用标记在应用程序释放该虚拟地址后才会生效,即在应用程序被释放后,才会根据虚拟地址的标记判断是否能够将该虚拟地址分配给应用程序,并且,由于该虚拟地址被标记为不可用,使得UMM单元不会向应用程序分配该虚拟地址。
其中,UMM单元释放虚拟地址可以是应用程序使用完该虚拟地址主动释放的,也可以是操作系统执行相关操作,使得应用程序被动释放的。例如,该相关操作可以为操作系统强制关闭应用程序正在运行的进程。或者,该相关操作可以为操作系统将应用程序的业务倒换至其他虚拟地址,使得该应用程序将数据写入该其他虚拟地址。
需要说明的是,由于通过虚拟地址写入的数据会被存储在与该虚拟地址对应的物理地址所指示的物理内存块(为便于描述,下文将“虚拟地址对应的物理地址所指示的物理内存块”简称为“虚拟地址指向的物理内存块”)中,因此,在本申请实施例中,还可以将该出现故障的物理内存块的物理地址标记为不可用。
由于物理地址与虚拟地址之间的映射关系是在分配物理内存块的过程中建立的,因此,通过将出现故障的物理内存块的物理地址标记为不可用,能够在再次建立物理地址与虚拟地址之间的映射关系时,例如在UMM单元复位之后,UMM单元需要重新向MMU申请虚拟内存块时,MMU不向UMM单元分配被标记为不可用的物理地址所指示的物理内存块,以进一步减小访问失败的几率。
步骤405、UMM单元在接收到应用程序发送的写请求后,向应用程序分配未被标记为不可用的虚拟地址,以将写请求所携带的数据写入未被标记为不可用的虚拟地址对应的物理地址所指示的物理内存块中。
其中,未被标记为不可用的虚拟地址可以包括:被标记为可用的虚拟地址和未添加标记的虚拟地址。由于被标记为可用的虚拟地址指向的物理内存块未出现故障,当将数据写入未出现故障的物理内存块中时,访问该物理内存块中的数据不会导致访问失败,因此能够保证计算设备的运行稳定性。当将数据写入未添加标记的虚拟地址指向的物理内存块中时,由于在操作系统运行的过程中仍会检测该物理内存块是否出现故障,该物理内存块可能未出现故障,也可能出现故障,因此,即使将数据写入该未添加标记的虚拟地址指向的物理内存块中,对该物理内存块中的数据进行访问也不一定会出现访问失败的情况,也能够减小访问失败的几率,能够在一定程度上保证计算设备的运行稳定性。
示例的,假设UMM单元预先申请的虚拟地址与物理地址之间的映射关系如表1所示,且在步骤402中确定的出现故障的物理内存块为物理地址80指示的物理内存块,根据表1可知虚拟地址8与该物理地址80存在映射关系,在步骤404中,UMM单元将虚拟地址8标记为不可用,则在步骤405中,UMM单元在接收到写请求后,可以将写请求所携带的数据写入除虚拟地址8外的其他虚拟地址指向的物理内存块中,例如,写入物理地址10至19指示的物理内存块中,以减小访问失败的几率。
步骤406、UMM单元对目标虚拟地址对应的一个或多个物理地址指示的物理内存块中已存储的数据进行数据恢复,其中,目标虚拟地址为出现故障的物理内存块的物理地址所对应的虚拟地址。
在确定出现故障的物理内存块后,若应用程序再对该物理内存块中存储的数据进行访问,可能会导致访问失败,此时,为保证该应用程序在该物理内存块中存储的数据的可用性,可以对该应用程序在该物理内存块中存储的数据进行数据恢复,并将该数据写入可用的虚拟地址中。并且,当目标虚拟地址与一个或多个物理地址对应时,将该目标虚拟地址标记为不可用时,会使得无法将数据写入该一个或多个物理地址对应的物理内存块,因此,在进行数据恢复时,可以对该一个或多个物理地址对应内存块中存储的数据进行数据恢复。
并且,对数据进行数据恢复时,可以根据应用需求,选择恢复目标虚拟地址指向的所有物理内存块中存储的数据,也可以选择恢复目标虚拟地址指向的物理内存块中的部分物理内存块中存储的数据。其中,该部分物理内存块可以为在应用程序复位后,不会释放其存储的该应用程序的数据的物理内存块。
示例的,仍以步骤405中的例子为例进行说明,出现故障的物理内存块的物理地址为物理地址80,物理地址80与虚拟地址8存在映射关系,且与虚拟地址8存在映射关系的所有物理地址为物理地址80至89,在该步骤406中,可以对物理地址80至89中的一个或多个物理地址指示的物理内存块中存储的数据进行数据恢复。例如,可以对物理地址80至89中每个物理地址指示的物理内存块存储的数据进行数据恢复。或者,当物理地址80至85所指示的物理内存块为在应用程序复位后,不会释放其存储的该应用程序的数据的物理内存块时,可以选择对物理地址80至85所指示的物理内存块中存储的数据进行数据恢复。
并且,对数据进行数据恢复时,可以根据应用需求选择需要恢复物理内存块在某一时间点存储的数据,例如,可以选择恢复在物理内存块出现故障时,该物理内存块所存储的所有数据。下面以恢复在物理内存块出现故障时所存储的数据为例,对该步骤406的两种实现方式进行说明:
在步骤406的第一种可实现方式中,若物理内存块的故障是在访问该物理内存块失败时确定的,在数据恢复时,待恢复的数据可以为目标虚拟地址指向的物理内存块中存储的数据在外部存储器中的副本。如图5所示,该步骤406的实现过程可以包括:
步骤4061a、UMM单元获取在出现故障的物理内存块出现故障时,目标虚拟地址指向的一个或多个物理内存块中已存储的数据在外部存储器中的副本。
在一种可能的实现方式中,UMM单元可以向应用程序发送携带有目标虚拟地址的数据恢复请求。并且,应用程序在通过目标虚拟地址将数据写入物理内存块中时,会记录数据与该目标虚拟地址的存储映射关系,因此,应用程序可以确定通过该目标虚拟地址写入物理内存块中的数据。同时,由于将物理内存块存储的数据存储到外部存储器中时,计算设备中用于管理存储过程的功能模块会记录该数据在外部存储器中的存储位置。因此,应用程序在确定通过目标虚拟地址写入物理内存块中的数据后,可以向用于管理存储过程的功能模块发送读取该数据的读请求,并通过该用于管理存储过程的功能模块从外部存储器中读取该数据的副本,然后应用程序向UMM单元发送携带有该数据的副本的写请求,以请求将该数据的副本写入未出现故障的物理内存块中。
步骤4062a、UMM单元将副本写入未出现故障的物理内存块中。
在步骤406的第二种可实现方式中,若物理内存块的故障是通过统计CE的次数确定的,在数据恢复时,待恢复的数据可以为目标虚拟地址指向的一个或多个物理内存块中存储的数据在外部存储器中的副本,其实现过程可以相应参考步骤406的第一种可实现方式。或者,由于该CE还未演变成UCE,可以再次对该目标虚拟地址指向的一个或多个物理内存块进行访问,以获取该目标虚拟地址指向的一个或多个物理内存块中存储的数据,因此,待恢复的数据也可以为目标虚拟地址指向的一个或多个物理内存块中存储的数据。下面对待恢复的数据为目标虚拟地址指向的一个或多个物理内存块中存储的数据的实现方式进行说明,如图6所示,该实现过程可以包括:
步骤4061b、UMM单元获取在出现故障的物理内存块出现故障时,目标虚拟地址指向的一个或多个物理内存块中已存储的数据。
UMM单元在确定物理内存块出现故障后,可以确定指向该物理内存块的目标虚拟地址,且UMM单元可以向应用程序发送携带有该目标虚拟地址的数据恢复请求。应用程序可以根据该目标虚拟地址,采用通过目标虚拟地址在内存中读数据的方式,在目标虚拟地址指向的一个或多个物理内存块中,读取该一个或多个物理内存块所存储的数据,然后向UMM单元发送携带有该数据的写请求,以请求将该数据写入未出现故障的物理内存块中。
步骤4062b、UMM单元将数据写入未出现故障的物理内存块中。
需要说明的是,该步骤406的第二种可实现方式的实现过程还可以包括:UMM单元在确定物理内存块出现故障后,可以根据指向该物理内存块的物理地址的目标虚拟地址,向MMU发送指示将通过该目标虚拟地址写入物理内存块中的数据存储到与其他虚拟地址指向的物理内存块中,以将通过该目标虚拟地址写入物理内存块中的数据拷贝至其他虚拟地址指向的物理内存中。并且,在UMM单元每次接收到应用程序访问通过该目标虚拟地址写入的数据时,UMM单元向MMU发送指示读取通过该其他虚拟地址写入物理内存块中的数据的指示,使得在应用程序无感知该数据拷贝过程。
综上所述,本申请实施例提供的内存故障处理方法,通过将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用,并不为写请求分配标记为不可用的虚拟地址,使得无法将数据写入出现故障的物理内存块中,相较于相关技术,一方面有效地减少了因访问写入出现故障的物理内存块的数据所导致访问失败的几率,减小了访问失败对计算设备运行稳定性造成的影响,另一方面,由于该内存故障处理方法是通过将虚拟地址标记为不可用实现的,使得能够在线对物理内存块的故障进行处理,无需对计算设备进行断电重启,有效地保证了计算设备运行的稳定性。
并且,由于UMM单元的功能可以通过存储在存储器中的程序指令实现,因此,通过UMM单元实现该内存故障处理方法,能够无需更改操作系统,使得该内存故障处理方法较易实现。
同时,由于通过UMM单元进行内存管理能够实现内存的高效管理,且使用本申请实施例提供的内存故障处理方法能够有效保证计算设备的运行稳定性,可知能够实现本申请实施例的内存故障处理方法的UMM单元尤其适用于需要实现数据的快速存储,且具有高可靠性的运行要求的应用场景,这样能够有效保证用户的使用体验,例如,银行存储系统或移动运行商的存储系统等。
本申请实施例提供的内存故障处理方法的步骤先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减。任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
本申请实施例提供了一种内存故障处理装置,如图7所示,该装置800可以包括:
申请模块801,用于申请分配多个虚拟内存块,并记录每个虚拟内存块的虚拟地址,虚拟地址对应物理内存块的物理地址。
确定模块802,用于确定物理内存中出现故障的物理内存块。
标记模块803,用于将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用。
分配模块804,用于在接收到写请求后,不为写请求分配被标记为不可用的虚拟地址。
可选的,如图8所示,该装置800还可以包括:
获取模块805,用于获取在出现故障的物理内存块出现故障时,目标虚拟地址对应的一个或多个物理地址指示的物理内存块中已存储的数据,目标虚拟地址为出现故障的物理内存块的物理地址对应的虚拟地址。
写入模块806,用于将获取的数据写入未被标记为不可用的虚拟地址中。
在一种可实现方式中,确定模块802,具体用于:周期性的访问物理内存中的数据;将物理内存中访问失败的物理内存块,确定为出现故障的物理内存块。
在另一种可实现方式中,确定模块802,具体用于:接收基本输入输出系统发送的出现故障的物理内存块的物理地址;根据物理地址确定出现故障的物理内存块。
综上所述,本申请实施例提供的内存故障处理装置,通过标记模块将出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用,分配模块不为写请求分配标记为不可用的虚拟地址,使得无法将数据写入出现故障的物理内存块中,相较于相关技术,一方面有效地减少了因访问写入出现故障的物理内存块的数据所导致访问失败的几率,减小了访问失败对计算设备运行稳定性造成的影响,另一方面,由于该内存故障处理方法是通过将虚拟地址标记为不可用实现的,使得能够在线对物理内存块的故障进行处理,无需对计算设备进行断电重启,有效地保证了计算设备运行的稳定性。
并且,由于UMM单元的功能可以通过存储在存储器中的程序指令实现,因此,通过UMM单元实现该内存故障处理方法,能够无需更改操作系统,使得该内存故障处理方法较易实现。
同时,由于通过UMM单元进行内存管理能够实现内存的高效管理,且使用本申请实施例提供的内存故障处理装置能够有效保证计算设备的运行稳定性,可知能够实现本申请实施例的内存故障处理装置尤其适用于需要实现数据的快速存储,且具有高可靠性的运行要求的应用场景,这样能够有效保证用户的使用体验,例如,银行存储系统或移动运行商的存储系统等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例提供了一种计算设备,该计算设备包括处理器、存储器和内存,在处理器执行存储器存储的计算机程序时,计算设备执行本申请实施例提供的内存故障处理方法。该计算设备的结构请参考图1所示的结构。
本申请实施例提供了一种存储介质,该存储介质为非易失性计算机可读存储介质,当存储介质中的指令被处理器执行时,实现本申请实施例提供的内存故障处理方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当所述计算机程序产品在计算设备上运行时,使得计算设备实现本申请实施例提供的内存故障处理方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种内存故障处理方法,其特征在于,所述方法包括:
申请分配多个虚拟内存块,并记录每个虚拟内存块的虚拟地址,所述虚拟地址对应物理内存块的物理地址;
确定物理内存中出现故障的物理内存块;
将所述出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用;
在接收到写请求后,不为所述写请求分配被标记为不可用的虚拟地址。
2.根据权1所述的方法,其特征在于,在所述确定物理内存中出现故障的物理内存块之后,所述方法还包括:
获取在所述出现故障的物理内存块出现故障时,目标虚拟地址对应的一个或多个物理地址指示的物理内存块中已存储的数据,所述目标虚拟地址为出现故障的物理内存块的物理地址对应的虚拟地址;
将获取的数据写入未被标记为不可用的虚拟地址中。
3.根据权1或2所述的方法,其特征在于,所述确定物理内存中出现故障的物理内存块,包括:
周期性的访问所述物理内存中的数据;
将所述物理内存中访问失败的物理内存块,确定为所述出现故障的物理内存块。
4.根据权1或2所述的方法,其特征在于,所述确定物理内存中出现故障的物理内存块,包括:
接收基本输入输出系统发送的所述出现故障的物理内存块的物理地址;
根据所述物理地址确定所述出现故障的物理内存块。
5.一种内存故障处理装置,其特征在于,所述装置包括:
申请模块,用于申请分配多个虚拟内存块,并记录每个虚拟内存块的虚拟地址,所述虚拟地址对应物理内存块的物理地址;
确定模块,用于确定物理内存中出现故障的物理内存块;
标记模块,用于将所述出现故障的物理内存块的物理地址对应的虚拟地址标记为不可用;
分配模块,用于在接收到写请求后,不为所述写请求分配被标记为不可用的虚拟地址。
6.根据权5所述的装置,其特征在于,所述装置还包括:
获取模块,用于获取在所述出现故障的物理内存块出现故障时,目标虚拟地址对应的一个或多个物理地址指示的物理内存块中已存储的数据,所述目标虚拟地址为出现故障的物理内存块的物理地址对应的虚拟地址;
写入模块,用于将获取的数据写入未被标记为不可用的虚拟地址中。
7.根据权5或6所述的装置,其特征在于,所述确定模块,具体用于:
周期性的访问所述物理内存中的数据;
将所述物理内存中访问失败的物理内存块,确定为所述出现故障的物理内存块。
8.根据权5或6所述的装置,其特征在于,所述确定模块,具体用于:
接收基本输入输出系统发送的所述出现故障的物理内存块的物理地址;
根据所述物理地址确定所述出现故障的物理内存块。
9.一种计算设备,其特征在于,包括处理器、存储器和内存;
在所述处理器执行所述存储器存储的计算机程序时,所述计算设备执行权利要求1至4任一所述的内存故障处理方法。
10.一种存储介质,其特征在于,当所述存储介质中的指令被处理器执行时,实现如权利要求1至4任一所述的内存故障处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910984310.4A CN112667422A (zh) | 2019-10-16 | 2019-10-16 | 内存故障处理方法及装置、计算设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910984310.4A CN112667422A (zh) | 2019-10-16 | 2019-10-16 | 内存故障处理方法及装置、计算设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112667422A true CN112667422A (zh) | 2021-04-16 |
Family
ID=75400497
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910984310.4A Pending CN112667422A (zh) | 2019-10-16 | 2019-10-16 | 内存故障处理方法及装置、计算设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112667422A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114461436A (zh) * | 2022-04-08 | 2022-05-10 | 苏州浪潮智能科技有限公司 | 一种内存故障处理方法、装置及计算机可读存储介质 |
CN115617274A (zh) * | 2022-10-27 | 2023-01-17 | 亿铸科技(杭州)有限责任公司 | 一种具备坏块管理功能的存内计算装置及操作方法 |
WO2023050927A1 (zh) * | 2021-09-30 | 2023-04-06 | 华为技术有限公司 | 一种内存检测方法及装置 |
WO2024027325A1 (zh) * | 2022-07-30 | 2024-02-08 | 超聚变数字技术有限公司 | 内存故障处理方法、装置和存储介质 |
-
2019
- 2019-10-16 CN CN201910984310.4A patent/CN112667422A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023050927A1 (zh) * | 2021-09-30 | 2023-04-06 | 华为技术有限公司 | 一种内存检测方法及装置 |
CN114461436A (zh) * | 2022-04-08 | 2022-05-10 | 苏州浪潮智能科技有限公司 | 一种内存故障处理方法、装置及计算机可读存储介质 |
WO2024027325A1 (zh) * | 2022-07-30 | 2024-02-08 | 超聚变数字技术有限公司 | 内存故障处理方法、装置和存储介质 |
CN115617274A (zh) * | 2022-10-27 | 2023-01-17 | 亿铸科技(杭州)有限责任公司 | 一种具备坏块管理功能的存内计算装置及操作方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112667422A (zh) | 内存故障处理方法及装置、计算设备、存储介质 | |
KR102599176B1 (ko) | 호스트 메모리 버퍼를 사용하는 스토리지 장치 및 그것의 메모리 관리 방법 | |
US10061534B2 (en) | Hardware based memory migration and resilvering | |
US20150331624A1 (en) | Host-controlled flash translation layer snapshot | |
US9354907B1 (en) | Optimized restore of virtual machine and virtual disk data | |
CN109656895B (zh) | 分布式存储系统、数据写入方法、装置和存储介质 | |
CN110896406A (zh) | 数据存储方法、装置及服务器 | |
US11593000B2 (en) | Data processing method and apparatus | |
CN110018783B (zh) | 一种数据存储方法、装置及系统 | |
CN110780811B (zh) | 数据保护方法、装置及存储介质 | |
US20230251931A1 (en) | System and device for data recovery for ephemeral storage | |
JP2019504369A (ja) | データチェック方法および記憶システム | |
CN115495025B (zh) | 一种管理异常存储块的方法和装置 | |
US20220334733A1 (en) | Data restoration method and related device | |
CN110795279B (zh) | 用于促进dram数据缓存转储和机架级电池备份的系统和方法 | |
CN113568777B (zh) | 一种故障处理方法、装置、网络芯片、设备及存储介质 | |
CN110888769B (zh) | 数据处理方法及计算机设备 | |
CN110837444A (zh) | 一种存储器故障处理方法及装置 | |
CN111949384B (zh) | 任务调度方法、装置、设备及计算机可读存储介质 | |
US10956245B1 (en) | Storage system with host-directed error scanning of solid-state storage devices | |
CN117667467A (zh) | 一种处理内存故障的方法及其相关设备 | |
US20220206915A1 (en) | Method and system for open nand block detection and correction in an open-channel ssd | |
US8935488B2 (en) | Storage system and storage control method | |
US11989412B2 (en) | Storage system and method for minimizing node down time | |
US20240070264A1 (en) | Data storage device performing data protection and host device supporting a data protection function using a program context |
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 |