CN201280076003.2
2012.09.25
CN104685474A
2015.06.03
授权
有权
授权|||专利申请权的转移IPC(主分类):G06F 11/08登记生效日:20160913变更事项:申请人变更前权利人:惠普发展公司,有限责任合伙企业变更后权利人:慧与发展有限责任合伙企业变更事项:地址变更前权利人:美国德克萨斯州变更后权利人:美国德克萨斯州|||实质审查的生效IPC(主分类):G06F 11/08申请日:20120925|||公开
G06F11/08; G06F12/16
G06F11/08
惠普发展公司,有限责任合伙企业
安德鲁·克里斯托弗·沃尔顿
美国德克萨斯州
北京德琦知识产权代理有限公司11018
柴德海; 康泉
提供用于从不可纠正的内存错误中恢复的技术。可以访问内存位置。可以确定该内存位置包括不可纠正的错误。可以确定与该内存位置关联的地址的范围。可以对整个地址范围采取纠正措施,以识别该地址范围内包括不可纠正的内存错误的其它地址。
权利要求书1. 一种方法,包括: 从处理器接收不可纠正的内存错误的指示; 向操作系统发送所述不可纠正的内存错误的通知;以及 从所述操作系统接收要初始化的内存地址范围,该地址范围包括所述不可纠正的 内存错误的地址。 2. 根据权利要求1所述的方法,进一步包括: 从所述操作系统接收指示,所述指示指示所述操作系统是否从所述不可纠正的内 存错误中恢复;以及 将所述不可纠正的内存错误记录在错误日志中,该记录包括所述操作系统是否从 所述错误中恢复。 3. 根据权利要求1所述的方法,其中所述不可纠正的内存错误的所述指示是由所 述处理器消耗毒药导致的处理器机器校验异常。 4. 根据权利要求1所述的方法,进一步包括: 至少针对所述内存地址范围禁用不可纠正的内存错误的检测; 初始化所述内存地址范围; 测试所述内存地址范围;以及 重新启用不可纠正的内存错误的检测。 5. 根据权利要求4所述的方法,进一步包括: 向所述操作系统通知所述内存地址范围的成功初始化。 6. 根据权利要求4所述的方法,进一步包括: 基于所述内存地址范围的所述测试的结果,向所述操作系统通知所述内存地址范 围内未被成功地初始化的内存地址。 7. 一种方法,包括: 从在处理器上执行的固件接收不可纠正的内存错误的指示; 确定地址范围包括所述不可纠正的内存错误的进程是否能够被恢复;以及 向固件发送要初始化的内存地址范围,该范围包括所述不可纠正的内存错误的地 址。 8. 根据权利要求7所述的方法,其中如果所述进程能够被恢复,则所述方法进一 步包括: 清除所述进程。 9. 根据权利要求8所述的方法,进一步包括: 从所述固件接收被成功地初始化的所述内存地址范围的指示; 将被成功地初始化的内存地址标记为可使用;以及 将未被成功地初始化的内存地址标记为不可使用。 10. 根据权利要求7所述的方法,其中如果所述进程不能够被恢复,则所述方法 进一步包括: 将内容要被转储至日志的内存地址的范围发送给固件; 从所述固件接收所述范围内包括不可纠正的错误的内存位置的指示;以及 将内存地址的所述范围内不包括不可纠正的内存错误的内存地址转储至所述日 志。 11. 根据权利要求7所述的方法,其中所述不可纠正的内存错误的所述指示是由 所述处理器消耗毒药导致的处理器机器校验异常。 12. 一种非瞬态处理器可读介质,在所述介质上包括一组处理器可执行指令,所 述处理器可执行指令在由所述处理器执行时引起所述处理器: 访问内存位置; 确定所述内存位置包括毒药; 向操作系统通知所述毒药的消耗; 从所述操作系统接收由与所述内存位置关联的进程占用的内存地址范围;以及 确定所述内存地址范围内包括不可纠正的内存错误的内存地址。 13. 根据权利要求12所述的介质,进一步包括指令,该指令引起所述处理器: 禁用毒药监视; 初始化所述内存地址范围内的内存地址; 测试所述内存地址范围内的所述内存地址以确定成功初始化;以及 向所述操作系统发送被成功地初始化的所述内存地址范围。 14. 根据权利要求12所述的介质,进一步包括指令,该指令引起所述处理器: 禁用毒药监视; 测试所述内存地址范围内的内存地址以确定哪些地址包括不可纠正的错误;以及 向所述操作系统发送包括不可纠正的错误的所述内存地址范围。 15. 根据权利要求12所述的介质,其中所述处理器通过消耗导致机器校验异常的 毒药来检测毒药。
说明书包括不可纠正的错误的地址范围的通知 背景技术 机器校验架构是一种可以在现代计算系统中用于检测故障(如内存中的故障)的 技术。在许多计算系统中,通过纠错码(ECC)保护内存。通常使用的纠错码能够检 测和纠正单比特错误。在多比特错误的情况下,ECC能够检测该错误,但不能纠正该 错误。在使用机器校验架构的系统中,当发现包括不可纠正的错误的内存位置时,在 该内存位置中设置被称为毒药签名(poison signature)或简称毒药(poison)的特殊值。 该毒药签名一般通过操纵ECC比特来产生。数据中不可纠正的错误可以由内存控制 器、CPU缓存、IO设备或在任意多个其它元件中被识别,并且那些元件中的任意元件 能够在该数据中生成毒药签名。 系统能够长期运行,即使存在毒药。但是,当中央处理单元(CPU)尝试使用包 括毒药的内存位置时,处理器可能产生机器校验异常。该机器校验异常可以由计算设 备的固件或操作系统截获。在一些情况下,不能够采取纠正措施,并且整个系统可能 崩溃。但是,在其它情况下,操作系统能够采取恢复措施。例如,操作系统可以杀掉 正在使用被确定包括毒药的内存位置的特定进程。 附图说明 图1是根据本文描述的技术的系统的示例。 图2是用于处理不可纠正的内存错误的概要流程图的示例。 图3是用于基于不可纠正的错误的检测来初始化内存的概要流程图的示例。 图4是操作系统清理内存地址范围的概要流程图的示例。 图5是用于处理由不可纠正的内存错误导致的可恢复错误和不可恢复错误的 概要流程图的示例。 图6是用于检测毒药消耗的概要流程图的示例。 图7是用于检测毒药和从该毒药恢复的概要流程图的示例。 具体实施方式 毒药(poison)在机器校验架构系统中的使用对检测包括不可纠正的错误的内 存及防止CPU使用包括错误的内存是非常有用的。在一些情况下,内存可以包括 由软件使用的数据值。损坏的数据值的使用可以导致获得不正确的结果。在其它 情况下,内存位置可以包括待由CPU执行的指令。在这种情况下,该内存位置中 包括的指令基本上是随机指令,因为不能确定错误如何修改该指令。利用ECC, 损坏的指令可以被识别出,但不一定被纠正。 如上面提到的,当接收到机器校验异常时,由操作系统采取的典型动作是清 除正在使用受影响的内存位置的进程。通常,清除该进程意味着停止该进程的操 作并且释放已分配给该进程的所有资源,如内存。但是,当仅清除进程时,由于 毒药的存在,产生数个问题。产生的一个问题是,一旦操作系统清除该进程,由 该进程使用的内存便处于未知状态。内存可能包括更多错误,在这种情况下,由 不同进程尝试使用该内存会导致附加机器校验异常。另一问题是由该进程使用的 内存可能具有毒药并且如果OS将该内存区域分配给另一进程,则该进程可能进入 该有毒药的内存。当前系统中的操作系统通常不充分了解内存控制器清理被清除 的进程的具有毒药的内存。 操作系统有两个选择。第一,可以声明由被清除的进程使用的内存不可用。 在这种情况下,操作系统不再尝试使用该内存。在重启之间长时间运行的系统中, 随着越来越多进程被清除以及它们的内存资源被标记为不可用,这可以导致在内 存映射中出现大量间断。在第二选择中,操作系统可以清除该进程,但是允许继 续使用该内存,尽管最初可能存在与导致该毒药的内存硬件相关的实际问题。如 果不采取措施来确保该内存没有毒药以及没有会导致未纠正错误的故障,则盲目 地重新使用内存可以导致产生附加机器校验。 上面的讨论假定最初可以清除正在使用包括错误的内存的进程。如果在敏感 进程(如操作系统内核)中检测到毒药,则清除进程通常导致系统崩溃。在许多 情况中,操作系统的设计者提供在清除关键进程(如内核)时由该关键进程使用 的内存的内存转储(dump)。该转储允许专家分析在故障时该关键进程正在做什 么以及更好地调试该故障。但是,如果由关键进程使用的内存包括附加错误,则 访问该内存以转储内容的仅有动作可以导致附加的机器校验异常。 进一步加重由毒药导致的机器校验异常的问题是纯粹的毒药产生不是清除进 程的自身原因。例如,当尝试预获取CPU缓存的缓存行时,内存控制器可以检测 内存中的错误。然后,内存控制器可以用毒药签名替代包含该错误的内存并加载 带有该毒药签名的缓存。此时,系统知道已经产生毒药,但是无法确定该毒药是 否以及何时将被消耗(consume)。例如,进程可以从不尝试访问所预获取的缓存 行,因此从不产生机器校验异常。此外,系统没有明确方法来确定通过清除消耗 该毒药的进程,操作系统是否能够从该毒药的消耗中恢复。 本文描述的技术克服上面提到的从由毒药消耗导致的机器校验异常恢复的问 题。当这种异常发生时,操作系统可以向充当操作系统和硬件之间的抽象层的系 统固件通知已接收到机器校验异常。操作系统还可以向固件通知进程是否已被成 功地清除或是否将发生其它恢复措施,如内存转储。此外,操作系统可以向该固 件通知由要被清除的进程使用的内存地址的一个或多个范围。 随后,系统固件可以检查由操作系统提供的内存地址范围。该固件可以确定 内存是否包括附加错误并且重新初始化该内存范围,清理针对之前的错误产生的 毒药的内存范围。系统固件还可以测试内存以确定错误是否是由内存中的实际缺 陷导致的。该固件还可以清除可能包括被损坏的数据的所有其它位置,如缓存内 存。一旦内存清理被执行,该固件就可以将结果报告回操作系统。结果可以包括 哪些内存范围被成功地清理以及哪些未被成功地清理。 随后,操作系统可以使用由固件提供的信息,以将内存返回至可使用的状态 或者将内存标记为不可使用。由固件指示为已成功测试的内存能够被返回给操作 系统,以被再用于不同的进程。 在一些情况下,不能清除使用包括错误的内存的进程。例如,不能直接清除 运行操作系统内核的进程,因为这可能导致系统崩溃。在这种情况下,操作系统 可以向固件通知要为以后的分析转储的内存地址的范围。在此情况下,固件可能 不尝试重新初始化内存,而相反仅仅记录包括毒药签名的内存位置或者在操作系 统访问内存位置时会导致附加未纠正错误的内存位置。可以向操作系统提供该信 息,操作系统可以于是在转储内存时避开包括毒药或错误的内存位置。 图1是根据本文描述的技术的系统的示例。系统100可以是在服务器计算机 或个人计算机中能发现的计算系统。系统100还可以是任何其它类型的计算设备, 如智能电话、平板电脑、个人数字助理或任何其它这样的设备。本文描述的技术 不限于任何特定类型的设备,而适于包括下面描述的元件类型的任何种类的设备。 系统100可以包括处理器110、非瞬态处理器可读介质120和内存130。处理 器可以是能够取得和执行处理器可读指令的任何类型的处理器。此外,处理器可 以具有能够检测内存错误并且向系统的其它组件通知那些错误的类型。例如,处 理器可以遵循机器校验构架,其中包括不可纠正的错误的内存被标记有被称为毒 药签名的特殊签名。毒药签名通常通过用能够被识别为毒药的样式改变缓存行中 包含内存错误的ECC比特来创建。当处理器消耗毒药时,可以产生异常,如机器 校验异常。如下面将描述的,固件和操作系统可以接收该异常并采取纠正措施。 处理器还可以包括缓存内存115。缓存内存可以是位于处理器内核(die)自身上 的内存并且可以允许快速访问数据。缓存内存的使用在下面更详细地描述。 该系统还可以包括非瞬态处理器可读介质120,非瞬态处理器可读介质120 上包含一组指令。当处理器执行这些指令时,处理器可以实现本文描述的功能。 该介质可以包括应用程序122、操作系统124和固件126。应用程序可以提供系统 100的功能。例如,在网页托管服务器中,该应用程序可以是网页服务器。本文描 述的技术不限于任何特定类型的应用程序。应当理解,应用程序是运行在该系统 上并且提供终端用户所期望的功能的程序。 该介质还可以包括操作系统。操作系统可以管理系统100的资源。例如,操 作系统可以通过向在该系统上运行的应用程序分配资源(如内存)来管理那些应 用程序。操作系统还可以通过操作系统应用编程接口(API)来向应用程序提供各 种功能。通过这些API,应用程序可以访问计算系统的资源。操作系统可以跟踪系 统100的所有资源并且确定哪些资源是可用的以及哪些资源在使用中或不可用。 操作系统124可以通过使用固件126来与处理器以及系统100的其它组件交 互。该固件可以是提供硬件和操作系统之间的抽象层的软件指令。例如,操作系 统可能希望利用底层硬件的功能。操作系统可以与具有更大硬件集成程度的固件 交互以请求该功能。固件具有关于硬件的更多知识,并且因此能提取来自操作系 统的广泛资源请求且将那些需求翻译成所需要的具体硬件层命令。固件还能够对 硬件执行操作系统通常不可获得的命令。例如,固件能够启用和禁用硬件的功能。 系统100还可以包括内存130。内存通常是可以由处理器使用的随机存取存取 内存。在典型的计算系统中,存储在非瞬态处理器可读介质120上的处理器指令 通常在由处理器执行之前被加载到内存130中。通过处理器访问内存通常能够比 通过访问介质120获得快得多。 通常,应用程序作为由操作系统管理的进程来运行。操作系统可以分配内存 地址范围供该应用程序使用。如图所示,存在两个示例应用程序进程132、134。 这些进程可以是任何类型的应用程序,如网页服务器、文字处理程序或任何其它 类型的应用程序。如图1所示,进程占用内存地址范围。尽管该内存地址范围被 示出为连续范围,但这是为了方便描述。内存地址范围可以是不连续的。例如, 在分配给进程的内存之间可以存在多个空闲的内存地址部分133、135。在余下的 描述中,由进程使用的地址范围意味着分配给该进程的所有内存,无论该内存是 否位于一个或多个连续范围中。 尽管已经从应用程序角度描述了进程,但是操作系统本身就是进程。正如任 何其它进程一样,操作系统自身可以被分配内存131以存储用于提供操作系统功 能的指令。从硬件的角度看,操作系统基本上仅是要被运行的另一进程。 在运行中,处理器可以加载来自内存的指令和数据。在包括缓存内存的处理 器架构中,内存内容可以被加载到缓存中以由处理器的更快速访问。通常,内存 的内容以可被称为缓存行的具有多个字节的单位,被移动至处理器/处理器缓存和 从处理器/处理器缓存移出。例如,内存中具有8个字节的一组可以被组合在一起 作为缓存行。但是,应当理解,本文描述的技术不限于任何特定大小的缓存行。 缓存行可以由ECC保护。如上面提到的,ECC通常能够检测和纠正缓存行中的单 比特错误。因此,不进一步描述单比特错误。在多比特错误的情况下,ECC可以 能够检测错误,但不能纠正错误。缓存行中的多比特错误可以被称为不可纠正的 错误。 内存中存在许多错误来源。一个可能的来源是高能粒子。高能粒子可以引起 存储在内存位置中的一个或多个比特改变值,因此导致内存包括不正确的值。错 误的另一可能来源是内存芯片出故障。错误的又一可能来源可能是可直接访问内 存和不正确地存储数据的输入/输出设备(未示出)。此外,应用程序软件、操作 系统或固件中的故障(bug)可以导致内存中的错误。 可以通过许多机制检测内存中的错误。例如,许多处理器架构包括可以单步 调试内存中每个缓存行的擦除器硬件。通过ECC的使用,擦除器可以确定内存中 存在错误。如果错误具有不可纠正的类型(意味着多比特错误),则擦除器可以 用指示内存已损坏的毒药签名替换该缓存行的内容。同样,当缓存行被从内存加 载到处理器或处理器缓存中时,用于加载该内存的硬件可以确定该缓存行中存在 不可纠正的错误。再次可以用毒药签名替换该缓存行。当损坏的缓存行被从处理 器缓存中赶出时,在该缓存行被送回内存之前,CPU缓存控制器可以对该缓存行 设置毒药。毒药签名产生的其它可能原因对本领域技术人员将是已知的。应当理 解,当在缓存行中发现不可纠正的错误时,可以用毒药签名替换该缓存行。 在某一点处,处理器可以对包括毒药签名的缓存行尝试某个类型的访问。处 理器可以从内存或从处理器缓存直接加载该缓存行。访问操作可以是尝试执行存 储在该缓存行中的指令或者使用存储在该缓存行中的数据值。访问包括毒药签名 的缓存行的尝试被称为毒药的消耗。在遵循机器校验架构的处理器中,毒药的消 耗导致处理器产生机器校验异常。机器校验异常可以从处理器硬件传递至固件。 然后,固件可以将机器校验异常的指示传递至操作系统。 一旦操作系统接收到机器校验异常的指示,操作系统就必须首先决定错误是 否是可恢复的。如上面所提到的,每个进程被分配内存地址范围。机器校验异常 识别包括毒药的特定内存位置。因此,操作系统能够确定哪个进程(以及关联的 内存范围)是机器校验异常的原因。 在一些情况下,操作系统可以通过清除导致机器校验异常的进程,从机器校 验异常中恢复。清除进程通常涉及使进程停止以及释放该进程使用的所有资源。 清除进程还可以被称为杀掉进程。但是,正是在这一点上,发生了上面关于机器 校验异常描述的问题。即使操作系统能够清除进程,由该进程使用的内存也仍然 可能包括错误。例如,如果包括使毒药产生的缓存行的内存芯片实际上是故障的, 则由该进程使用的地址范围内的其它缓存行也十分可能包括毒药签名或者包括会 导致毒药产生的错误。 在使由被清除的进程使用的内存可用于其它进程之前,操作系统首先清理和 验证该内存是可取的。在一个示例实现方式中,操作系统可以向固件发送毒药被 消耗以及操作系统正在通过清除包括具有毒药的缓存行的进程来尝试恢复的指 示。操作系统可以向固件通知由被清除的进程使用的内存地址范围。换句话说, 处理器可以向固件通知需要针对毒药的存在或其它错误的存在而被检查的内存地 址范围。 当接收到该指示时,固件可以尝试清理由被清除的进程使用的内存地址范围。 在一些示例实现方式中,作为清理的一部分,固件可以临时性地禁用毒药的产生 和处理器内毒药消耗的检测。如上面所解释的,固件紧密地与处理器集成在一起, 因此能够控制这些较低层的功能。在清理进程期间,固件可以禁用机器校验异常, 因为纯粹的清理内存动作可以另外导致附加机器校验异常。例如,假定包括与被 清除的进程关联的若干缓存行的内存芯片出故障,并因此具有许多错误。在尝试 清理内存的过程中,该内存将被访问。如果机器校验异常被启用,则访问该内存 以清理该内存将导致附加机器校验异常。 在一个示例实现方式中,正如在系统启动期间所做的那样,通过初始化内存 地址范围,固件可以尝试清理该内存地址范围。换句话说,可以将内存初始化为 不包括错误的已知良好值。当该初始化完成时,可以使内存控制器进入将ECC比 特初始化到已知良好状态的没有毒药的模式。随后,固件可以测试该内存地址范 围以确定该已知良好值是否能够被正确地存储在该内存地址范围内。在瞬态故障 情况下,测试会成功。但是,在持久故障(如有缺陷的内存芯片)情况下,初始 化可能失败。无论如何,固件可以确定哪些内存位置能够被成功地初始化以及哪 些位置不能被成功地初始化。 随后,固件可以将这个信息传递回操作系统。操作系统可以随后将被成功地 初始化的内存位置标记为现在可由其它进程使用。未被成功地初始化的内存位置 可以被标记为不可使用。 除了清理内存本身以外,固件还可以清理包括毒药签名或包括错误的内存已 扩散到的任何位置。如上面解释的,在一些处理器架构中,内存不直接被读取, 而是首先被读取到处理器缓存中并从那里由处理器读取。如果在该内存中的缓存 行中存在毒药签名,那么该毒药签名还会出现在处理器缓存中。因此,固件还可 以针对毒药的存在检查处理器缓存,并且如果发现毒药的存在,则可以从处理器 缓存中清除包括毒药的缓存行。在尝试清除内存中的毒药之前,固件还可以刷新 所有CPU缓存。 处理器缓存针对毒药的存在或其它错误的存在而被检查,因为有可能有故障 的缓存行可能已经被加载到处理器缓存中(如通过预获取操作),但实际上从未 被处理器消耗。因此,通过核查可能是坏缓存行的所有位置,如内存和处理器缓 存,所有故障的缓存行都可以被检测到,即使那些缓存行不导致机器校验异常。 在一些情况下,通过清除进程来恢复是不可能的。例如,如果与导致机器校 验异常的内存关联的进程是操作系统进程本身,那么立即清除进程将导致系统崩 溃。尽管毒药的消耗可能没有给系统崩溃留下替代方式,但许多操作系统在崩溃 之前尝试将调试(debug)信息转储到日志文件中。该调试信息对工程师确定在崩 溃之前系统中发生了什么可能是有用的。 一种经常使用的技术是转储核心文件,核心文件包括操作系统进程的内存内 容。在崩溃之前,操作系统可以读取与操作系统进程关联的内存并且将内存内容 写入文件。但是,正如上面所述,纯粹为了转储内容而访问内存的动作可以导致 附加机器校验异常。可以稍稍改变本文描述的技术以允许内存内容被转储。 操作系统可以再次向固件发送进程将要被清除以及由该进程使用的地址范围 的指示。但是,该指示还可以包括操作系统将不尝试从错误中恢复。在这种情况 下,固件可以不尝试重新初始化内存,因为这会无法实现将内存转储到文件的目 的。相反,固件可以检查该内存地址范围,以确定哪些地址包括毒药或不可纠正 的错误。包括不可纠正的错误的内存位置可以被送回至操作系统。当操作系统尝 试将内存内容转储到文件时,可以跳过被指示为包括错误的内存位置,因此防止 附加机器校验异常的产生。尽管这导致由操作系统使用的内存的不完整转储,但 结果好于根本不产生调试数据的系统崩溃。 除了上面描述的恢复技术以外,固件还可以跟踪之前已被确定为包括毒药的 内存位置。例如,假定内存芯片有缺陷并且因此导致每次使用该芯片上的内存时 连续产生毒药。第一次检测到毒药时,操作系统可以清除进程并返回该内存去使 用(假定故障具有能够通过初始化和测试的类型)。操作系统可以将该内存位置 分配给不同进程,再次导致毒药产生。固件可以跟踪连续产生毒药的内存位置, 并且可以将那些位置指示为有故障的,即使它们能够通过初始化。 图2是用于处理不可纠正的内存错误的概要流程图的示例。在框210中,可 以从处理器接收不可纠正的内存错误的指示。例如,在利用机器校验架构的系统 的情况下,该指示可以是由毒药消耗引起的机器校验异常。在框220中,可以向 操作系统发送不可纠正的内存错误的通知。例如,该通知可以是机器校验异常并 且该通知能够被发送到操作系统的异常处理程序。 在框230中,可以从操作系统接收要初始化的内存地址范围。该地址范围可 以包括上面在框210中指示的不可纠正的内存错误的地址。如上面解释的,该内 存地址范围可以是由与包括不可纠正的内存错误的内存位置关联的进程使用的内 存地址范围。 图3是用于基于不可纠正的错误的检测来初始化内存的概要流程图的示例。 正如上面所述,在框305中,可以从处理器接收不可纠正的内存错误的指示。在 框310中,可以向操作系统发送不可纠正的内存错误的通知。在框315中,可以 从操作系统接收指示操作系统是否能够从不可纠正的内存错误中恢复的指示。如 上面解释的,恢复可以包括进程是否能够被成功地清除。 在框320中,不可纠正的内存错误可以被记录在错误日志中。该记录可以包 括操作系统是否能够从错误中恢复。如上面解释的,固件可以跟踪不可纠正的内 存错误,以确定物理内存是否存在问题。如果特定内存范围重复地出现不可纠正 的内存错误的情况,则固件可以确定物理内存存在问题,并且可以从服务中删除 该内存或者告知OS停止使用该内存。 在框325中,可以从操作系统接收内存地址范围。该内存地址范围可以包括 不可纠正的内存错误的地址。该地址范围可以是由因为不可纠正的内存错误而已 被清除的进程使用的内存地址。在框330中,可以至少对该内存地址范围禁用不 可纠正的内存错误的检测。如上面解释的,当固件尝试清理该内存地址范围时, 固件进行嵌套机器校验会适得其反,因为内存将被重新初始化、被测试和被清理 毒药。 在框335中,可以初始化内存地址范围。如上面解释的,初始化内存地址范 围可以包括初始化物理内存本身以及毒药已经扩散到的任何其它区域。例如,如 果包括毒药的缓存行存在于在内存以及CPU缓存中,那么可以从缓存中清除该缓 存行,使得内存的初始化从系统中消除毒药。在框340中,可以测试内存地址范 围。在已经初始化内存地址之后,可以测试内存以确定导致错误的物理内存本身 是否存在实际问题。 在框345中,可以重新启用不可纠正的内存错误的检测。在框350中,可以 向操作系统通知内存地址范围内未被成功地初始化的内存地址。基于在框340中 执行的测试,可以确定成功的初始化。操作系统可以将未被成功地初始化的内存 声明为不可由任何进程进一步使用。在框355中,可以向操作系统通知内存地址 范围的成功初始化。因此,可以向操作系统传递被成功地初始化的内存地址。随 后操作系统可以使这些内存地址范围可由其它进程使用。 图4是操作系统清理内存地址范围的概要流程图的示例。在框410中,可以 从固件接收不可纠正的内存错误的指示。例如,如果处理器架构包括机器校验, 则该指示可以是机器校验异常。在框420中,可以确定其地址范围包括不可纠正 的内存错误的进程是否能够被恢复。如上面解释的,恢复可以包括清除进程。在 一些情况下,像操作系统内核这样的进程不能在不对系统造成进一步影响的情况 下被清除。 在框430中,可以向固件发送要初始化的内存地址范围。该内存地址范围可 以包括不可纠正的内存错误的地址。如上面解释的,恢复措施可以是清除正在使 用包括错误的内存位置的进程。恢复进程的一部分可以是校验由该进程使用的所 有内存。所提供的内存地址范围可以包括由该进程使用的所有内存。 图5是用于处理由不可纠正的内存错误导致的可恢复错误及不可恢复错误的 概要流程图的示例。在框505中,可以从在处理器上执行的固件接收不可纠正的 内存错误的指示。在框510中,可以确定其地址范围包括不可纠正的内存错误的 进程是否能够被恢复。可恢复的进程可以是可以被清除的进程,而仍然允许系统 的余下部分继续运行。例如,应用程序进程可以被清除,而仍然允许其它应用程 序和操作系统本身继续运行。但是,一些进程(如操作系统本身)可能不能被清 除。 在框515中,可以确定进程是否是可恢复的。如果不可恢复,则流程移动到 下面描述的框545。如果可恢复,则流程移动到框520。在框520中,可以向固件 发送要初始化的内存地址范围。该范围可以包括不可纠正的内存错误的地址。在 框525中,可以清除该进程。如上面解释的,清除进程可以包括停止该进程和释 放正由该进程使用的所有资源,如内存。 在框530中,可以从固件接收被成功地初始化的内存地址范围的指示。在一 些情况中,被成功地初始化的内存地址范围可以与框520中发送的地址范围相同。 但是,情况不总是如此。在一些情况中,仅该内存地址范围的一子集可能被成功 地初始化。在框535中,可以将被成功地初始化的内存地址范围标记为可使用。 因此,操作系统可以将被成功地重新初始化的内存自由地重新分配给其它进程。 在框540中,可以将未被成功地初始化的内存标记为不可使用。操作系统不会尝 试分配已经被标记为不可使用的内存。 如果正在使用包括不可纠正错误的内存的进程是不可恢复的,则流程移动到 框540。在框540中,其内容要被转储到日志的内存地址范围可以由固件接收。固 件本身不知道该转储过程,而仅仅接收内存地址范围和进程不会被恢复的指示。 数据到日志的实际转储是由操作系统进行的。 在框550中,操作系统可以从固件接收该范围内包括不可纠正内存错误的内 存位置的指示。换句话说,操作系统可以接收那些如果被访问则会导致附加机器 校验异常的内存地址。在框555中,不包括不可纠正的内存错误的内存地址可以 被转储到日志。换句话说,在框550中向操作系统通知包括错误的内存位置,并 且在框555中,仅那些不包括错误的位置被转储到日志。因此,为了转储而获取 内存中数据的进程不会导致附加机器校验异常,因为那些有错误的存储位置不被 转储。 图6是用于检测毒药消耗的概要流程图的示例。在框610中,可以访问内存 位置。该访问可以通过内存控制器、IO设备或任何其它可以访问内存的元件。在 框620中,可以确定该内存位置包括毒药。在一些情况中,毒药可能已经存在于 该内存位置中。在其它情况中,当访问该内存位置时,可以确定内存中存在错误。 例如,可以由ECC检测错误。如果错误不能被纠正,则可以在该内存位置中设置 毒药签名。 在框630中,可以向操作系统通知毒药消耗。例如,当处理器尝试利用(例 如消耗)该内存位置和检测到该内存位置包括毒药时,处理器可以引起机器校验 异常。通常可以通过固件将该机器校验异常扩散给操作系统。 在框640中,可以从操作系统接收由与包括毒药的内存位置关联的进程占用 的内存地址范围。操作系统可能已经清除该进程以从毒药消耗恢复,因此需要校 验由该进程使用的所有内存,然后尝试将内存重新用于其它进程。在框650中, 可以确定该内存地址范围内包括不可纠正的内存错误的内存地址。 图7是用于检测毒药和从毒药中恢复的概要流程图的示例。正如上面所述, 在框705中,可以访问内存位置。在框710中,内存位置的访问可以导致机器校 验异常。在框715中,可以确定由于该内存位置包括毒药和处理器消耗该毒药, 所以导致了机器校验异常。在框720中,可以向操作系统通知毒药的消耗。通过 从处理器通过固件向操作系统传递机器校验异常,该通知可以发生。随后,操作 系统可以尝试进行适当的恢复。 在框725中,可以从操作系统接收由与该内存位置关联的进程占用的内存地 址范围。如上面解释的,操作系统可能希望清除进程或转储由该进程使用的内存。 该内存地址范围可以包括由该进程使用的内存。在框730中,可以禁用毒药监视。 如上面解释的,重新初始化内存和用于校验内存的ECC比特的进程或者测试内存 本身的进程可以导致附加毒药产生以及更多机器校验异常。禁用毒药监视可以允 许执行恢复操作而不生成附加机器校验异常。 在框735中,可以确定错误是否是可恢复的。如上面解释的,可恢复的错误 是可以清除进程并且回收内存的一种错误。不可恢复的错误是不能清除进程的一 种错误,如当进程是操作系统本身时。 如果进程是可恢复的,则流程移动到下面描述的框750。否则,流程移动到框 740。在框740中,可以测试该内存地址范围内的内存地址以确定哪些地址包括不 可纠正的错误。访问这些内存位置可能不是期望的,因为访问本身可以导致附加 机器校验异常。在框745中,包括不可纠正的错误的内存地址范围可以被发送到 操作系统。随后,操作系统可以在转储由进程使用的内存时利用该信息来避开访 问会导致附加机器校验异常的位置。 如果进程是可恢复的,则流程移动到框750。在框750中,可以初始化内存地 址范围内的内存地址。如上面解释的,初始化内存地址可以包括初始化物理内存。 另外,还可以清除内存中的值可能已经扩散到的位置,如缓存。在框755中,可 以测试内存地址范围以确定初始化是否成功。 在框760中,可以确定该内存地址范围内未被成功地初始化并因此可能包括 不可纠正的内存错误的内存地址。在框765中,可以向操作系统发送被成功地初 始化的内存地址的范围。随后,操作系统可以使被成功地初始化的内存可以使用。 另外,操作系统可以使未被成功地初始化的内存位置不可用于今后使用。
《包括不可纠正的错误的地址范围的通知.pdf》由会员分享,可在线阅读,更多相关《包括不可纠正的错误的地址范围的通知.pdf(19页珍藏版)》请在专利查询网上搜索。
提供用于从不可纠正的内存错误中恢复的技术。可以访问内存位置。可以确定该内存位置包括不可纠正的错误。可以确定与该内存位置关联的地址的范围。可以对整个地址范围采取纠正措施,以识别该地址范围内包括不可纠正的内存错误的其它地址。。
copyright@ 2017-2020 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1