一种实现内存on-die ecc的低成本软件方法和装置 技术领域 1.本发明涉及ecc纠错技术领域,尤其涉及一种实现内存on-die ecc的低成本软件方法和装置。 背景技术: 2.当前业界主流的内存支持ecc的方案,主要是通过增加一颗用于存储ecc码的ddr颗粒的内存条,来实现内存的单bit纠错。虽然当前通用服务器领域用的内存条绝大部分已经支持ecc纠错功能,但主板上使用的ddr颗粒受主板及cpu的限制,还不能支持ecc纠错。 3.但本申请发明人在实现本申请实施例中技术方案的过程中,发现上述现有技术至少存在如下技术问题: 4.现有技术中的ecc纠错方案由于增加一颗用于存储ecc码的ddr颗粒内存条,从而存在纠错成本高昂,同时还需cpu支持ecc功能,且不适用于单ddr颗粒的技术问题。 技术实现要素: 5.本发明实施例提供了一种实现内存on-die ecc的低成本软件方法和装置,用以解决现现有技术中的ecc纠错方案由于增加一颗用于存储ecc码的ddr颗粒内存条,从而存在纠错成本高昂,同时还需cpu支持ecc功能,且不适用于单ddr颗粒的技术问题。通过软件ecc纠错方式,达到了在不额外增加ecc的前提下,实现数据的单bit纠错,显著增加系统可靠性,降低硬件成本,且不需cpu支持ecc功能的技术效果。 6.鉴于上述问题,提出了本申请实施例以便提供一种实现内存on-die ecc的低成本软件方法和装置。 7.第一方面,本发明提供了一种实现内存on-die ecc的低成本软件方法,所述方法包括:获得待储存数据,其中,所述待储存数据为64bits数据;计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits;根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits;获得内存芯片的额外存储空间;将所述数据帧写入所述内存芯片的额外存储空间中;cpu对所述数据帧进行回读,得到回读数据帧;计算所述回读数据帧中待储存数据的第二校验码;判断所述第二校验码与所述第一校验码是否一致;如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单bit跳变;获得所述第二校验码与所述第一校验码出现不一致的位置;根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。 8.优选的,所述判断所述第二校验码与所述第一校验码是否一致,还包括:如果所述第二校验码与所述第一校验码保持一致,确定所述待储存数据未发生单bit跳变。 9.优选的,所述根据所述待储存数据与所述第一校验码,获得数据帧,包括:将所述待储存数据拆分成8组,其中,每组为8bits数据;将所述第一校验码附加到所述待储存数据后面,得到所述数据帧。 10.优选的,所述第二校验码为所述回读数据帧中待储存数据的实际校验码,且所述 第二校验码仍为8bits。 11.优选的,所述内存芯片为单ddr颗粒。 12.优选的,所述内存芯片为多ddr颗粒。 13.第二方面,本发明提供了一种实现内存on-die ecc的低成本软件装置,所述装置包括: 14.第一获得单元,所第一获得单元用于获得待储存数据,其中,所述待储存数据为64bits数据; 15.第一计算单元,所述第一计算单元用于计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits; 16.第二获得单元,所述第二获得单元用于根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits; 17.第三获得单元,所述第三获得单元用于获得内存芯片的额外存储空间; 18.第一写入单元,所述第一写入单元用于将所述数据帧写入所述内存芯片的额外存储空间中; 19.第一回读单元,所述第一回读单元用于cpu对所述数据帧进行回读,得到回读数据帧; 20.第二计算单元,所述第二计算单元用于计算所述回读数据帧中待储存数据的第二校验码; 21.第一判断单元,所述第一判断单元用于判断所述第二校验码与所述第一校验码是否一致; 22.第一确定单元,所述第一确定单元用于如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单bit跳变; 23.第四获得单元,所述第四获得单元用于获得所述第二校验码与所述第一校验码出现不一致的位置; 24.第一纠错单元,所述第一纠错单元用于根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。 25.优选的,所述第一判断单元还包括: 26.第二确定单元,所述第二确定单元用于如果所述第二校验码与所述第一校验码保持一致,确定所述待储存数据未发生单bit跳变。 27.优选的,所述第二获得单元包括: 28.第一拆分单元,所述第一拆分单元用于将所述待储存数据拆分成8组,其中,每组为8bits数据; 29.第一附加单元,所述第一附加单元用于将所述第一校验码附加到所述待储存数据后面,得到所述数据帧。 30.优选的,所述第二校验码为所述回读数据帧中待储存数据的实际校验码,且所述第二校验码仍为8bits。 31.优选的,所述内存芯片为单ddr颗粒。 32.优选的,所述内存芯片为多ddr颗粒。 33.第三方面,本发明提供了一种实现内存on-die ecc的低成本软件装置,包括存储 器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤: 34.获得待储存数据,其中,所述待储存数据为64bits数据;计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits;根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits;获得内存芯片的额外存储空间;将所述数据帧写入所述内存芯片的额外存储空间中;cpu对所述数据帧进行回读,得到回读数据帧;计算所述回读数据帧中待储存数据的第二校验码;判断所述第二校验码与所述第一校验码是否一致;如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单bit跳变;获得所述第二校验码与所述第一校验码出现不一致的位置;根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。 35.第四方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤: 36.获得待储存数据,其中,所述待储存数据为64bits数据;计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits;根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits;获得内存芯片的额外存储空间;将所述数据帧写入所述内存芯片的额外存储空间中;cpu对所述数据帧进行回读,得到回读数据帧;计算所述回读数据帧中待储存数据的第二校验码;判断所述第二校验码与所述第一校验码是否一致;如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单b it跳变;获得所述第二校验码与所述第一校验码出现不一致的位置;根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。 37.本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果: 38.本发明实施例提供的一种实现内存on-die ecc的低成本软件方法和装置,所述方法包括:获得待储存数据,其中,所述待储存数据为64bits数据;计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits;根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits;获得内存芯片的额外存储空间;将所述数据帧写入所述内存芯片的额外存储空间中;cpu对所述数据帧进行回读,得到回读数据帧;计算所述回读数据帧中待储存数据的第二校验码;判断所述第二校验码与所述第一校验码是否一致;如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单b it跳变;获得所述第二校验码与所述第一校验码出现不一致的位置;根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。用以解决现现有技术中的ecc纠错方案由于增加一颗用于存储ecc码的ddr颗粒内存条,从而存在纠错成本高昂,同时还需cpu支持ecc功能,且不适用于单ddr颗粒的技术问题。通过软件ecc纠错方式,达到了在不额外增加ecc的前提下,实现数据的单bit纠错,显著增加系统可靠性,降低硬件成本,且不需cpu支持ecc功能的技术效果。 39.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。 附图说明 40.图1为本发明实施例中一种实现内存on-die ecc的低成本软件方法的流程示意图; 41.图2为本发明实施例中一种实现内存on-die ecc的低成本软件装置的结构示意图; 42.图3为本发明实施例中另一种实现内存on-die ecc的低成本软件装置的结构示意图; 43.图4为本发明实施例中数据写入内存的流程示意图。 44.附图标记说明:第一获得单元1,第一计算单元2,第二获得单元3,第三获得单元4,第一写入单元5,第一回读单元6,第二计算单元7,第一判断单元8,第一确定单元9,第四获得单元10,第一纠错单元11,总线300,接收器301,处理器302,发送器303,存储器304,总线接口306。 具体实施方式 45.本发明实施例提供了一种实现内存on-die ecc的低成本软件方法和装置,用以解决现现有技术中的ecc纠错方案由于增加一颗用于存储ecc码的ddr颗粒内存条,从而存在纠错成本高昂,同时还需cpu支持ecc功能,且不适用于单ddr颗粒的技术问题。 46.本发明提供的技术方案总体思路如下:获得待储存数据,其中,所述待储存数据为64bits数据;计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits;根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits;获得内存芯片的额外存储空间;将所述数据帧写入所述内存芯片的额外存储空间中;cpu对所述数据帧进行回读,得到回读数据帧;计算所述回读数据帧中待储存数据的第二校验码;判断所述第二校验码与所述第一校验码是否一致;如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单bit跳变;获得所述第二校验码与所述第一校验码出现不一致的位置;根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。通过软件ecc纠错方式,达到了在不额外增加ecc的前提下,实现数据的单bit纠错,显著增加系统可靠性,降低硬件成本,且不需cpu支持ecc功能的技术效果。 47.下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。 48.本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。 49.实施例一 50.图1为本发明实施例中一种实现内存on-die ecc的低成本软件方法的流程示意图。如图1所示,本发明实施例提供了一种实现内存on-die ecc的低成本软件方法,所述方法包括: 51.步骤s1:获得待储存数据,其中,所述待储存数据为64bits数据; 52.步骤s2:计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits; 53.步骤s3:根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits; 54.步骤s4:获得内存芯片的额外存储空间; 55.步骤s5:将所述数据帧写入所述内存芯片的额外存储空间中; 56.步骤s6:cpu对所述数据帧进行回读,得到回读数据帧; 57.步骤s7:计算所述回读数据帧中待储存数据的第二校验码; 58.步骤s8:判断所述第二校验码与所述第一校验码是否一致; 59.步骤s9:如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单bit跳变; 60.步骤s10:获得所述第二校验码与所述第一校验码出现不一致的位置; 61.步骤s11:根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。 62.进一步的,所述根据所述待储存数据与所述第一校验码,获得数据帧,包括:将所述待储存数据拆分成8组,其中,每组为8bits数据;将所述第一校验码附加到所述待储存数据后面,得到所述数据帧。 63.进一步的,所述第二校验码为所述回读数据帧中待储存数据的实际校验码,且所述第二校验码仍为8bits。 64.具体而言,所谓ecc,就是英文字母“error correcting code”的缩写,中文译为错误检查和纠正,所述ecc是一种能够实现“错误检查和纠正”的技术,ecc内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,用于提高计算机运行的稳定性和增加可靠性。“内存on-die ecc”意指内存条上用于储存ecc码的固有内存芯片,在本发明实施例中不需增加额外的用于储存ecc码的ddr颗粒内存条,其中,ddr为英文字母double data rate sdram的缩写,译为双倍速率同步动态随机存储器,利用底层软件将数据存储在ddr内部的储存空间中,通过牺牲大约10%的内存容量及带宽性能,来获取更高的系统可靠性,可以降低高可靠性应用场景下系统宕机的风险。如图4所示,当cpu需要对所述内存芯片写入数据时,首先将所述待储存数据中每64bits数据拆分成若8组,每组8bits,然后cpu内部通过软件计算出所述待储存数据的8bits的ecc校验码,即所述第一校验码,将所述第一校验码附加到所述待储存数据的后面,这样共72bits组成一帧数据帧,与传统技术不同的是,本发明实施例获取到所述内存芯片的额外存储空间,并将所述72bits数据帧写入所述内存芯片的额外存储空间中,当cpu需要用到所述内存芯片中的数据时,cpu会对所述数据帧进行回读,当读取到这一帧数据之后,底层软件会重新计算所述回读帧数据中的64bits数据的实际ecc码值,即所述第二校验码,然后将所述第二校验码与所述回读帧数据中包含的8bitecc码值(所述第一校验码)进行比较分析,判断两者是否保持一致,即判断所述64bits数据在写入和回读时的ecc码值是否相同,如果所述第二校验码与所述第一校验码不一致,就能确定出所述待储存数据发生单bit跳变,根据所述第二校验码与所述第一校验码出现不一致的位置,底层软件就可定位到此次回读数据帧中发生单bit跳变的位置,从而对所述待储存数据进行纠错。进一步达到了在不额外增加ecc的前提下,实现数据的单bit纠错,显著增加系统可靠性,降低硬件成本,且不需cpu支持ecc功能的技术效果。 65.进一步的,所述判断所述第二校验码与所述第一校验码是否一致,还包括:如果所 述第二校验码与所述第一校验码保持一致,确定所述待储存数据未发生单bit跳变。 66.进一步的,所述内存芯片为单ddr颗粒。 67.进一步的,所述内存芯片为多ddr颗粒。 68.具体而言,如果所述第二校验码与所述第一校验码保持一致,即所述64bits数据在写入和回读时的ecc码值相同,就可确定出所述待储存数据未发生单bit跳变,不需再对其进行纠错。由于本发明实施例通过底层软件将所述待储存数据写入所述内存芯片的额外存储空间,则不需额外增加ecc内存,因而对于单ddr颗粒或多ddr颗粒内存条均支持,具有适用范围广的有点。只要对现有硬件进行适配,不依赖芯片的集成度,完全软件实现ecc纠错功能适用于愿意为了高可靠性小幅牺牲性能的场景。 69.实施例二 70.基于与前述实施例中一种实现内存on-die ecc的低成本软件方法同样的发明构思,本发明还提供一种实现内存on-die ecc的低成本软件装置,如图2所示,所述装置包括: 71.第一获得单元1,所第一获得单元1用于获得待储存数据,其中,所述待储存数据为64bits数据; 72.第一计算单元2,所述第一计算单元2用于计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits; 73.第二获得单元3,所述第二获得单元3用于根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits; 74.第三获得单元4,所述第三获得单元4用于获得内存芯片的额外存储空间; 75.第一写入单元5,所述第一写入单元5用于将所述数据帧写入所述内存芯片的额外存储空间中; 76.第一回读单元6,所述第一回读单元6用于cpu对所述数据帧进行回读,得到回读数据帧; 77.第二计算单元7,所述第二计算单元7用于计算所述回读数据帧中待储存数据的第二校验码; 78.第一判断单元8,所述第一判断单元8用于判断所述第二校验码与所述第一校验码是否一致; 79.第一确定单元9,所述第一确定单元9用于如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单bit跳变; 80.第四获得单元10,所述第四获得单元10用于获得所述第二校验码与所述第一校验码出现不一致的位置; 81.第一纠错单元11,所述第一纠错单元11用于根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。 82.进一步的,所述第一判断单元8还包括: 83.第二确定单元,所述第二确定单元用于如果所述第二校验码与所述第一校验码保持一致,确定所述待储存数据未发生单bit跳变。 84.进一步的,所述第二获得单元3包括: 85.第一拆分单元,所述第一拆分单元用于将所述待储存数据拆分成8组,其中,每组为8bits数据; 86.第一附加单元,所述第一附加单元用于将所述第一校验码附加到所述待储存数据后面,得到所述数据帧。 87.进一步的,所述第二校验码为所述回读数据帧中待储存数据的实际校验码,且所述第二校验码仍为8bits。 88.进一步的,所述内存芯片为单ddr颗粒。 89.进一步的,所述内存芯片为多ddr颗粒。 90.前述图1实施例一中的一种实现内存on-die ecc的低成本软件方法的各种变化方式和具体实例同样适用于本实施例的一种实现内存on-die ecc的低成本软件装置,通过前述对一种实现内存on-die ecc的低成本软件方法的详细描述,本领域技术人员可以清楚的知道本实施例中一种实现内存on-die ecc的低成本软件装置的实施方法,所以为了说明书的简洁,在此不再详述。 91.实施例三 92.基于与前述实施例中一种实现内存on-die ecc的低成本软件方法同样的发明构思,本发明还提供一种实现内存on-die ecc的低成本软件装置,其上存储有计算机程序,该程序被处理器执行时实现前文所述一种实现内存on-die ecc的低成本软件方法的任一方法的步骤。 93.其中,在图3中,总线架构(用总线300来代表),总线300可以包括任意数量的互联的总线和桥,总线300将包括由处理器302代表的一个或多个处理器和存储器304代表的存储器的各种电路链接在一起。总线300还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口306在总线300和接收器301和发送器303之间提供接口。接收器301和发送器303可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。 94.处理器302负责管理总线300和通常的处理,而存储器304可以被用于存储处理器302在执行操作时所使用的数据。 95.实施例四 96.基于与前述实施例中一种实现内存on-die ecc的低成本软件方法同样的发明构思,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤: 97.获得待储存数据,其中,所述待储存数据为64bits数据;计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits;根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits;获得内存芯片的额外存储空间;将所述数据帧写入所述内存芯片的额外存储空间中;cpu对所述数据帧进行回读,得到回读数据帧;计算所述回读数据帧中待储存数据的第二校验码;判断所述第二校验码与所述第一校验码是否一致;如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单bit跳变;获得所述第二校验码与所述第一校验码出现不一致的位置;根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。 98.在具体实施过程中,该程序被处理器执行时,还可以实现实施例一中的任一方法步骤。 99.本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效 果: 100.本发明实施例提供的一种实现内存on-die ecc的低成本软件方法和装置,所述方法包括:获得待储存数据,其中,所述待储存数据为64bits数据;计算所述待储存数据的第一校验码,其中,所述第一校验码为8bits;根据所述待储存数据与所述第一校验码,获得数据帧,其中,所述数据帧为72bits;获得内存芯片的额外存储空间;将所述数据帧写入所述内存芯片的额外存储空间中;cpu对所述数据帧进行回读,得到回读数据帧;计算所述回读数据帧中待储存数据的第二校验码;判断所述第二校验码与所述第一校验码是否一致;如果所述第二校验码与所述第一校验码不一致,确定所述待储存数据发生单bit跳变;获得所述第二校验码与所述第一校验码出现不一致的位置;根据所述第二校验码与所述第一校验码出现不一致的位置,对所述待储存数据进行纠错。用以解决现现有技术中的ecc纠错方案由于增加一颗用于存储ecc码的ddr颗粒内存条,从而存在纠错成本高昂,同时还需cpu支持ecc功能,且不适用于单ddr颗粒的技术问题。通过软件ecc纠错方式,达到了在不额外增加ecc的前提下,实现数据的单bit纠错,显著增加系统可靠性,降低硬件成本,且不需cpu支持ecc功能的技术效果。 101.本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。 102.本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。 103.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。 104.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。 105.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。 |
|