页面内容共享的方法及装置制造方法

文档序号:6503012阅读:120来源:国知局
页面内容共享的方法及装置制造方法
【专利摘要】本发明提供一种页面内容共享的方法及装置,其中,所述方法包括:对于第一物理页面和第二物理页面,读取所述第一物理页面的第一E-hash值、第二物理页面的第二E-hash值;判断所述第一E-hash值和所述第二E-hash值是否相同;如果所述第一E-hash值和所述第二E-hash值相同,则判断所述第一物理页面和第二物理页面的页面内容是否相同;若所述第一物理页面和第二物理页面的页面内容相同,则将所述第一物理页面和所述第二物理页面的页面内容共享。上述方法解决了现有技术中后台线程计算Hash值的过程中干扰其他应用和虚拟机运行,导致服务器性能下降的问题。
【专利说明】页面内容共享的方法及装置

【技术领域】
[0001 ] 本发明实施例涉及通信领域,尤其涉及一种页面内容共享的方法及装置。

【背景技术】
[0002]当前,处理器内集成的核个数不断增长,但内存容量的增长速度较慢,使得每个核分配到的有效内存容量呈下降趋势,进而内存容量成为服务器发展的瓶颈。
[0003]现有技术中,基于内容的页面共享技术(Content-Based Page Sharing,简称CBPS )是目前被普遍采用的用于降低内存容量压力的主要方法,例如,通过将具有相同内容的多个物理页面(下述简称“页面”)共享到一个物理页面空间,从而实现降低服务器的内存容量的消耗,提高内存有效利用率。
[0004]具体地,CBPS需要在操作系统内核(OS Kernel)或虚拟机管理程序(Hypervisor)内实现,对上层应用是完全透明的(即对其他应用程序无需修改)。例如,操作系统内核启动后台线程后,后台线程定期扫描页面内容,并进行比较,如果发现两个或更多个页面的页面内容相同,就将每个页面的访问属性设置为写时复制(Copy-On-Write,简称C0W),而将它们对应的页表项都设置为指向同一个物理页面的页框(Page Frame),从而实现页面共享。
[0005]通常,一个页面的大小为4KB,为了比较两个页面是否相同,如果直接对页面的全部内容进行逐字节的完整比较,比较开销将较大。为了缓解这一问题,后台线程可以先对每个页面内容计算一个哈希(Hash)值,优先比较不同页面的Hash值,如果Hash值相同再对页面的内容进行完整的逐字节比较,确认页面内容是否相同。
[0006]然而,后台线程负责计算页面Hash值的过程中带来的问题如下:第一、占用处理器的计算资源,导致服务器上正常应用程序或虚拟机得不到计算资源;第二、污染高速缓冲存储器(Cache )内有效数据:为了计算页面的Hash值,需要流式(Stream)将整个页面内容从头到尾读入到Cache中,计算好Hash值后就不再访问。这种大量数据的流式访问,会将Cache内的应用或虚拟机的有效数据刷掉。由此,上述后台线程的计算干扰服务器上其他应用和虚拟机的运行,导致服务器性能不稳定。


【发明内容】

[0007]有鉴于此,本发明实施例提供一种页面内容共享的方法及装置,用于提高了后台线程比较任意物理页面内容的效率,同时提高了服务器的使用性能。
[0008]第一方面,本发明实施例提供一种页面内容共享的方法,包括:
[0009]对于第一物理页面和第二物理页面,读取所述第一物理页面的第一 E-hash值、第二物理页面的第二 E-hash值;
[0010]判断所述第一 E-hash值和所述第二 E-hash值是否相同;
[0011]如果所述第一 E-hash值和所述第二 E_hash值相同,则判断所述第一物理页面和所述第二物理页面的页面内容是否相同;
[0012]若所述第一物理页面和所述第二物理页面的页面内容相同,则将所述第一物理页面和所述第二物理页面的页面内容共享。
[0013]结合第一方面,在第一种可能的实现方式中,所述读取所述第一物理页面的第一E-hash值、第二物理页面的第二 E-hash值,包括:
[0014]根据所述第一物理页面的页面号PFNl在物理内存中读取所述第一物理页面的第一E-hash 值;
[0015]根据所述第二物理页面的页面号PFN2在物理内存中读取所述第二物理页面的第二E-hash 值。
[0016]结合第一方面及上述可能的实现方式,在第二种可能的实现方式中,所述读取所述第一物理页面的第一 E-hash值、第二物理页面的第二 E-hash值的步骤之前,所述方法还包括:
[0017]内存控制器获取所述第一物理页面的第一 E-hash值,并根据所述第一物理页面的页面号PFNl将所述第一 E-hash值存放在物理内存中,以使软件访问;
[0018]内存控制器获取所述第二物理页面的第二 E-hash值,并根据所述第二物理页面的页面号PFN2将所述第二 E-hash值存放在物理内存中,以使软件访问。
[0019]结合第一方面及第二种可能的实现方式,在第三种可能的实现方式中,所述根据所述第一物理页面的页面号PFNl将所述第一 E-hash值存放在物理内存中,包括:
[0020]内存控制器根据所述第一物理页面的页面号PFN1,采用页面着色技术PageColoring将所述第一 E_hash值存放在物理内存中;
[0021]所述根据所述第二物理页面的页面号PFN2将所述第二 E-hash值存放在物理内存中,包括:
[0022]内存控制器根据所述第二物理页面的页面号PFN2,采用页面着色技术PageColoring将所述第二 E_hash值存放在物理内存中;
[0023]结合第一方面及第二种可能的实现方式,在第四种可能的实现方式中,所述内存控制器获取第一物理页面的第一 E-hash值,包括:
[0024]内存控制器根据所述第一物理页面的所有Cache line的ECC码计算所述第一物理页面的第一 E-hash值;
[0025]所述内存控制器获取第二物理页面的第二 E-hash值,包括:
[0026]内存控制器根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二 E-hash值。
[0027]结合第一方面及第四种可能的实现方式,在第五种可能的实现方式中,所述内存控制器根据所述第一物理页面的所有Cache line的ECC码计算所述第一物理页面的第一E-hash值,包括:
[0028]内存控制器将与所述第一物理页面对应的所有ECC码进行异或运算,得到所述第一物理页面的第一 E-hash值;
[0029]所述内存控制器根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二 E-hash值,包括:
[0030]内存控制器将与所述第二物理页面对应的所有ECC码进行异或运算,得到所述第二物理页面的第二 E-hash值;
[0031]其中,ECC码为所述内存控制器以Cache line为单位进行维护的。
[0032]第二方面,本发明实施例提供一种页面内容共享的装置,包括:
[0033]读取单元,用于读取第一物理页面的第一 E-hash值,第二物理页面的第二 E_hash值;
[0034]第一判断单元,用于判断所述第一 E-hash值和所述第二 E-hash值是否相同;
[0035]第二判断单元,用于在所述第一判断单元确定所述第一 E-hash值和所述第二E-hash值相同时,判断所述第一物理页面和所述第二物理页面的页面内容是否相同;
[0036]页面内容共享单元,用于在所述第二判断单元确定所述第一物理页面和所述第二物理页面相同时,将所述第一物理页面和所述第二物理页面的页面内容共享。
[0037]结合第二方面,在第一种可能的实现方式中,所述读取单元,具体用于
[0038]根据所述第一物理页面的页面号PFNl在物理内存中读取所述第一物理页面的第一E-hash 值;
[0039]根据所述第二物理页面的页面号PFN2在物理内存中读取所述第二物理页面的第二E-hash 值。
[0040]结合第二方面及上述可能的实现方式,在第二种可能的实现方式中,所述装置还包括:
[0041]获取单元,用于获取所述第一物理页面的第一 E-hash值,以及获取所述第二物理页面的第二 E-hash值;
[0042]存储单元,用于根据所述第一物理页面的页面号PFNl将所述获取单元获取的第一E-hash值存放在物理内存中,以及根据所述第二物理页面的页面号PFN2将所述获取单元获取的第二 E-hash值存放在物理内存中,以使软件访问。
[0043]结合第二方面及第二种可能的实现方式,在第三种可能的实现方式中,所述存储单元,具体用于
[0044]根据所述第一物理页面的页面号PFN1,采用页面着色技术Page Coloring将所述第一 E-hash值存放在物理内存中,以使软件访问;
[0045]根据所述第二物理页面的页面号PFN2,采用页面着色技术Page Coloring将所述第二 E-hash值存放在物理内存中,以使软件访问。
[0046]结合第二方面及第二种可能的实现方式,在第四种可能的实现方式中,所述获取单元,具体用于
[0047]根据所述第一物理页面的所有Cache line的ECC码计算所述第一物理页面的第一E-hash 值;
[0048]根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二E-hash 值。
[0049]结合第二方面及第二种可能的实现方式,在第五种可能的实现方式中,所述获取单元,具体用于
[0050]将与所述第一物理页面对应的所有ECC码进行异或运算,得到所述第一物理页面的第一 E-hash值;
[0051]将与所述第二物理页面对应的所有ECC码进行异或运算,得到所述第二物理页面的第二 E-hash值;
[0052]其中,ECC码为所述获取单元以Cache line为单位进行维护的。
[0053]第三方面,本发明实施例提供一种内存控制器,包括:
[0054]哈希值E-Hash Cache缓冲单元,用于缓存和更新访问时间小于等于预设阈值的物理页面的哈希E-Hash值;
[0055]存放ECC Buffer单元,用于存放被写回的缓冲字节Cache Line对应的错误检查和纠正码ECC码,以及将所述ECC码发送至所述E-Hash Cache缓冲单元,以使所述E-HashCache缓冲单元采用所述ECC码更新与所述ECC码对应的E-Hash值;
[0056]其中,所述Cache Line为所述物理页面的Cache Line。
[0057]结合第三方面,在第一种可能实现的方式中,所述内存控制器还包括:
[0058]写队列Write Queue单兀,用于缓存从Cache写回Write Back到物理内存中的Cache Line,并使所述ECC Buffer单兀基于所述Cache Line存放与所述Cache Line对应的ECC码。
[0059]结合第三方面及第一种可能的实现方式,在第二种可能的实现方式中,所述ECCBuffer单元和所述Write Queue单元共享缓存标记Tag。
[0060]由上述技术方案可知,本发明实施例的页面内容共享的方法及装置,通过后台线程读取第一物理页面的第一 E-hash值,和第二物理页面的第二 E-hash值,进而判断第一E-hash值和第二 E-hash值是否相同,在第一 E_hash值和第二 E_hash值相同时,判断第一物理页面和第二物理页面的页面内容是否相同,进而若第一物理页面和第二物理页面的页面内容相同,则将第一物理页面和第二物理页面的页面内容共享,提高了后台线程比较任意物理页面内容的效率,同时提高了服务器的使用性能。

【专利附图】

【附图说明】
[0061]为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作一简单地介绍,显而易见地:下面附图只是本发明的一些实施例的附图,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得同样能实现本发明技术方案的其它附图。
[0062]图1为现有技术中提供的比较页面内容的架构示意图;
[0063]图2A为本发明一实施例提供的页面内容共享的方法的流程示意图;
[0064]图2B为本发明另一实施例提供的页面内容共享的方法的流程示意图;
[0065]图2C为本发明一实施例中采用Page Coloring加载E-Hash值的场景图;
[0066]图3为本发明一实施例提供的页面内容共享的装置的结构示意图;
[0067]图4A为现有技术中从内存中读数据的场景图;
[0068]图4B为现有技术中向内存中写数据的场景图;
[0069]图4C为本发明一实施例提供的获取E-Hash值的架构图;
[0070]图5A为本发明一实施例提供的内存控制器的结构示意图;
[0071]图5B为本发明一实施例提供的Tag地址共孚的不意图;
[0072]图6为本发明一实施例中硬件更新E-Hash值的流程示意图;
[0073]图7为本发明一实施例中页面的E-Hash值被更新的流程示意图。

【具体实施方式】
[0074]为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述。显然,下述的各个实施例都只是本发明一部分的实施例。基于本发明下述的各个实施例,本领域普通技术人员即使没有作出创造性劳动,也可以通过等效变换部分甚至全部的技术特征,而获得能够解决本发明技术问题,实现本发明技术效果的其它实施例,而这些变换而来的各个实施例显然并不脱离本发明所公开的范围。
[0075]为了方便理解本发明中技术方案,先对与本发明相关的内容进行简单说明。
[0076]目前,服务器的操作系统大多采用虚拟内存技术,故,服务器中存在虚拟页面和物理页面两个概念,为区别虚拟页面的概念,本申请采用物理页面的概念,本申请中所提及的页面均为物理页面的简称。
[0077]如图1所示,当前的页面内容共享的方案包括如下的步骤:
[0078]步骤一:后台线程定期扫描页面的页面内容,计算每个候选页面的Hash值(哈希值一般为 32bits 或 64bits);
[0079]步骤二:选取两个候选页面,判断两个候选页面的Hash值是否相同。
[0080]步骤三:如果Hash值不同,说明这两个页面的页面内容肯定不同,不对这两个页面的页面内容进行共享;
[0081]如果Hash值相同,说明这两个页面的页面内容可能相同(也可能是Hash值冲突,例如,不同页面内容映射到同一个Hash值)。为了确认页面内容是否相同,此时,还需要进一步对页面内容进行完整的逐字节比较。
[0082]由上,对页面的Hash值进行比较相当于先对页面进行过滤,从而避免大量无效的页面比较,用以降低页面内容比较的运行开销。
[0083]然而,后台线程负责计算页面Hash值的过程中带来的问题如下:第一、占用处理器的计算资源,导致操作系统上正常运行的应用程序或虚拟机得不到计算资源;第二、污染Cache (高速缓冲存储器,简称:高速缓存)内有效数据:为了计算页面的Hash值,需要流式(Stream)将整个页面内容从头到尾读入到Cache中,计算好Hash值后就不再访问。这种大量数据的流式访问,会将Cache内的应用或虚拟机的有效数据刷掉。由此,上述后台线程的计算干扰系统上其他应用和虚拟机的运行,导致操作系统性能下降。
[0084]在本发明实施例中,针对现在服务器上普遍使用的错误检查和纠正码(ErrorCorrecting Code,简称ECC)内存所提供的ECC码作为页面内容的E-Hash (—种特殊的哈希)值,并由硬件(如下所述的内存控制器)负责维护更新,软件(如后台线程)直接读取页面的E-Hash值进行比较,从而避免软件(如后台线程)计算页面的Hash值带来的开销。
[0085]图2A示出了本发明一实施例提供的页面内容共享的方法的流程示意图,如图2A所示,本发明实施例中的页面内容共享的方法如下所述。
[0086]201、对于第一物理页面和第二物理页面,软件读取所述第一物理页面的第一E-hash值、第二物理页面的第二 E-hash值。
[0087]202、软件判断所述第一 E-hash值和所述第二 E_hash值是否相同。
[0088]203、如果软件确定所述第一 E-hash值和所述第二 E_hash值相同,则判断所述第一物理页面和所述第二物理页面的页面内容是否相同。
[0089]当然,如果软件确定第一 E-hash值和第二 E_hash值不同,则软件结束这两个物理页面的比较步骤。即第一 E-hash值和第二 E-hash值不同,第一物理页面和第二物理页面的页面内容肯定不同。
[0090]204、若所述第一物理页面和所述第二物理页面的页面内容相同,则将所述第一物理页面和所述第二物理页面的页面内容共享。
[0091]当然,实际中若第一物理页面和所述第二物理页面的页面内容不同,则软件结束这两个物理页面的比较步骤,即第一物理页面和第二物理页面的页面内容无法共享。
[0092]举例来说,上述的执行主体软件可为在操作系统中执行的任一个后台线程。
[0093]由上述实施例可知,本实施例的页面内容共享的方法,通过后台线程读取第一物理页面的第一 E-hash值,和第二物理页面的第二 E-hash值,进而判断第一 E_hash值和第二 E-hash值是否相同,在第一 E-hash值和第二 E_hash值相同时,判断第一物理页面和第二物理页面的页面内容是否相同,进而若第一物理页面和第二物理页面的页面内容相同,则将第一物理页面和第二物理页面的页面内容共享,提高了后台线程比较任意物理页面内容的效率,同时提高了服务器的使用性能,并解决了现有技术中后台线程计算Hash值的过程中干扰其他应用和虚拟机运行,导致服务器中操作系统性能下降的问题。
[0094]在一种可选的实施例中,上述步骤201中的“读取所述第一物理页面的第一E-hash值、第二物理页面的第二 E-hash值”可包括如下图中未示出的子步骤2011:
[0095]2011、根据所述第一物理页面的页面号(Page Frame Number,简称PFN) I在物理内存中读取所述第一物理页面的第一 E-hash值;
[0096]根据所述第二物理页面的PFN2在物理内存中读取所述第二物理页面的第二E-hash 值。
[0097]举例来说,内存控制器中,E-Hash值的Tag可包括页面号信息:PFN ;PFN代表对应Cache中存放的E-Hash值的页面号。
[0098]例如,目前的64位系统(如x86_64),其有效的地址一般为48位,扣除最后的12位页内偏移,所以页面号只需要36位。
[0099]当前,Cache包括数据Cache和指令Cache。本实施例中前述的第一 E_hash值、第二E-hash值均为存储在物理内存的数据Cache中,用以方便软件如后台线程的直接访问。
[0100]在第二种可选的实施例中,在上述的步骤201之前,本实施例中的页面共享的方法还包括如下图2B中所示的步骤200。
[0101]200、内存控制器获取所述第一物理页面的第一 E-hash值,并根据所述第一物理页面的页面号PFNl将所述第一E-hash值存放在物理内存中,以使软件访问;以及获取第二物理页面的第二 E-hash值,并根据所述第二物理页面的页面号PFN2将所述第二 E_hash值存放在物理内存中,以使软件访问。
[0102]举例来说,获取第一物理页面的第一 E-hash值,可包括下述图中未示出的子步骤:
[0103]2001、内存控制器根据所述第一物理页面的所有Cache line的ECC码计算所述第一物理页面的第一 E-hash值。
[0104]在具体的应用中,根据第一物理页面的所有Cache line的ECC码计算所述第一物理页面的第一 E-hash值,可具体为:
[0105]内存控制器将与所述第一物理页面对应的所有ECC码进行异或运算(如图4C所示),得到所述第一物理页面的第一 E-hash值。
[0106]相应地,获取第二物理页面的第二 E-hash值,可包括:
[0107]2002、内存控制器根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二 E-hash值。
[0108]在具体的应用中,根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二 E-hash值,可具体为:
[0109]内存控制器将所述第二物理页面对应的所有ECC码进行异或运算(如图4C所示),得到所述第二物理页面的第二 E-hash值。
[0110]其中,ECC码为当前DRAM内存中存储的,其随数据一起被读入内存控制器中进行计算和/或校验的,且ECC码为内存控制器以Cache line为单位进行维护的。
[0111]也就是说,所述第一物理页面的所有的Cache line的ECC码在内存控制器中进行计算和校验;所述第二物理页面的所有的Cache line的ECC码在内存控制器中进行计算和校验。
[0112]可以理解的是,在现有内存控制器的实现中,ECC码是以Cache Line为单位进行存储,计算和校验的,Cache Line的大小为64B。而一个物理页面大小通常为4KB,其包含64个Cache Line。现有的ECC内存都有专门的DRAM芯片来存放ECC码,但是现有的ECC码没有提供接口给软件来访问,并且在内存控制器中校验完后,ECC码就会被丢弃,而只将数据返回给处理器如Cache。
[0113]可选地,为使存放在物理内存中的E-hash值(如上所述的第一 E-hash值、第二E-hash值)在软件读取时不对物理内存中的其他数据进行污染,本发明实施例中还可采用当前的页面着色技术(Page Coloring)存储物理页面对应的E_hash值,限制E_hash值存放在制定有限几种页面颜色的物理内存中,如图2C所示;而对其他数据的页面颜色不进行限制。这样软件读取E-hash值仅仅影响放入与之相同页面颜色的数据,其他页面颜色的数据不会被读取的E-hash值刷掉。图2C中采用不同图案代表各种不同的页面颜色。另外,前述的“页面颜色”实际上对应Cache中的部分空间,限制E-Hash值可用的“页面颜色”实际上就是限制其可用的Cache空间,从而降低对Cache内其他数据的干扰,本实施例仅为举例说明。
[0114]例如,内存控制器根据所述第一物理页面的页面号PFN1,采用Page Coloring将所述第一 E-hash值存放在物理内存中;以及
[0115]根据所述第二物理页面的页面号PFN2,采用Page Coloring将所述第二 E_hash值存放在物理内存中。
[0116]上述实施例中的页面内容共享的方法,提高了软件如后台线程比较任意物理页面内容的效率,同时提高了服务器的使用性能,并解决了现有技术中后台线程计算Hash值的过程中干扰其他应用和虚拟机的运行,导致服务器中操作系统性能下降的问题。
[0117]图3示出了本发明一实施例提供的页面内容共享的装置的流程示意图,如图3所示,本实施例的页面内容共享的装置包括:读取单元31、第一判断单元32、第二判断单元33和页面内容共享单元34 ;
[0118]其中,读取单元31用于读取第一物理页面的第一 E-hash值,第二物理页面的第二E-hash 值;
[0119]第一判断单元32用于判断所述第一 E-hash值和所述第二 E_hash值是否相同;
[0120]第二判断单元33用于在所述第一判断单元32确定所述第一 E-hash值和所述第二E-hash值相同时,判断所述第一物理页面和所述第二物理页面的页面内容是否相同;
[0121]页面内容共享单元34用于在所述第二判断单元33确定所述第一物理页面和所述第二物理页面相同时,将所述第一物理页面和所述第二物理页面的页面内容共享。
[0122]在一种可选的实现场景中,所述读取单元31具体用于,根据所述第一物理页面的PFNl在物理内存中读取所述第一物理页面的第一 E-hash值;
[0123]根据所述第二物理页面的PFN2在物理内存中读取所述第二物理页面的第二E-hash 值。
[0124]在第二种可选的实施例中,在图3所示的页面内容共享的装置的基础上,页面内容共享的装置还包括图中未示出的获取单元35和存储单元36 ;
[0125]其中,获取单元35用于获取所述第一物理页面的第一 E-hash值,以及获取所述第二物理页面的第二 E-hash值;
[0126]存储单元36用于根据所述第一物理页面的页面号PFNl将所述获取单元获取的第一E-hash值存放在物理内存中,以及根据所述第二物理页面的页面号PFN2将所述获取单元获取的第二 E-hash值存放在物理内存中,以使软件访问。
[0127]可选地,存储单元36具体用于,根据所述第一物理页面的PFN1,采用页面着色技术Page Coloring将所述第一 E_hash值存放在物理内存中,以使软件访问;
[0128]根据所述第二物理页面的PFN2,采用页面着色技术Page Coloring将所述第二E-hash值存放在物理内存中,以使软件访问。
[0129]在另一可选的实现场景中,所述获取单元35具体用于,根据所述第一物理页面的所有Cache line的ECC码计算所述第一物理页面的第一 E_hash值;
[0130]根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二E-hash 值。
[0131]例如,所述获取单元358具体用于,将与所述第一物理页面对应的所有ECC码进行异或运算,得到所述第一物理页面的第一 E-hash值;
[0132]将与所述第二物理页面对应的所有ECC码进行异或运算,得到所述第二物理页面的第二 E-hash值;
[0133]其中,ECC码为所述获取单元以Cache line为单位进行维护的。
[0134]上述实施例中的页面内容共享的装置,能够提高后台线程比较任意物理页面内容的效率,同时提高服务器的使用性能,进而可以解决现有技术中后台线程计算Hash值的过程中干扰其他应用和虚拟机运行,导致服务器中操作系统性能下降的问题。
[0135]需说明的是,前述的页面内容共享的装置为举例说明,该装置包括的部分单元可以是通过程序指令相关的硬件来完成,以及,该装置所包括的部分单元为实体的硬件,本发明实施例不对其进行限定。
[0136]以下详细说明如何在内存控制器中获取任一物理页面的E-hash值的过程。
[0137]当前,在服务器的ECC内存中,最常用的是单错纠正-双错检测(Single ErrorCorrecting and Double Error Detecting,简称 SEC-DED)编码。对于 ECC 内存,有效的数据总线宽度是64bits,而总的总线宽度是72bits,此时还需要额外的8bits来传送冗余校验码信息即ECC码,进而在ECC内存中增加有额外的内存芯片来存放ECC码。当前,与ECC内存连接的内存控制器包括:数据缓存(Data Buffer)单元、ECC校验生成逻辑单元和写队列(Write Queue)单兀。
[0138]结合图4A和图4B进行说明,图4A示出了内存控制器从内存中读数据的场景图;图4B为现有技术中内存控制器向内存中写数据的场景图。
[0139]在图4A和图4B中,Cache为处理器上的高速缓冲存储器即高速缓存,用于加速对内存的访问,Cache Line为高速缓存块,属于Cache和内存之间传送数据的基本单位。
[0140]在图4A中,Cache每次从内存读回的有效数据为一个Cache Line,大小为64Bytes,分成连续的8次Burst返回(即DDR3协议中的8次Burst及连续传送)。每次Burst返回的数据(64bits)先放到内存控制器中的数据缓冲(即Data Buffer)单元中,同时将读回的ECC码(Sbits)输入到内存的内存控制器的ECC校验生成逻辑单元进行校验,用以判断是否出错。
[0141]如果没有出错,ECC校验生成逻辑单元就将该ECC码丢掉,而只将有效数据返回给Cache ;如果发现一位错,ECC校验生成逻辑单元能够自动将其纠正,而返回正确的有效数据,然后向操作系统报告出错信息;如果发现多位错,则无法纠正,需立即向操作系统报告出错信息,并由操作系统来处理错误。
[0142]图4B示出了将Cache内数据写回到内存的过程,当一个Dirty(被改写的)的CacheLine被替换出来的时候,需要向内存写回数据,在将数据放入内存控制器的Data Buffer单元的同时,ECC校验生成逻辑单元负责计算生成对应的新的ECC码(即每64bits数据对应生成8bits ECC码)。
[0143]通常,写回的数据并不是立即被写回到内存,而是先缓存在内存控制器内的WriteQueue单元内(Write Queue 一般大小为32或64),等到Write Queue单元快满的时候,再连续将数据写回到内存中,用以优化内存读写性能。
[0144]由上可知,内存控制器维护ECC码是以Cache Line为单位的。对于当前4KB的页面(Page),包含64个Cache Line。为了利用前述的ECC码来生成每个页面的ECC-Hash值(下述简称为E-Hash值),可对页面内所有Cache Line对应的ECC码进行一定的计算来得到页面的E-Hash值。
[0145]举例来说,可对页面内所有Cache Line的ECC码进行异或运算,就可以得到页面的唯一的E-Hash值,如图4C所示,此时页面的E-Hash值的大小为64bits。本实施例仅为举例说明,在具体应用中,获取页面的唯一的E-Hash值的计算方式可以有多种,本发明实施例不对其进行限定。
[0146]可以理解的是,页面的E-Hash值同ECC码类似,可以由硬件(如内存控制器)来负责自动维护更新,而软件(如后台线程)只需要直接将其读出并进行比较,而不再计算页面的Hash值,进而可减少服务器的开销,优化服务器的性能。
[0147]具体地,下述举例说明软件(如后台程序)访问E-Hash值的相关内容。
[0148]为了软件能够访问到页面对应的E-Hash值,需要在虚拟机管理程序(Hypervisor)或操作系统(Operating System,简称OS)内核空间中保留一定的物理内存区域来存放页面的E-Hash值,硬件更新的E-Hash值最终都会被写回到这个物理内存区域中。
[0149]当然,对于操作系统内核或虚拟机管理程序(Hypervisor),可为代表每个页面属性的Page结构体增加一个属性,即增加软件访问E-Hash值的接口。或者,在其他实施例中,操作系统或Hypervisor也可以独立申请一段连续的物理内存空间来依次存放页面的E-Hash值,进而提高对E-Hash值访问的局部性。
[0150]举例来说,每个4KB页面需要存放64bits的E-Hash值,由于64bits: 4KB=1:512,所以其内存开销较低。例如,对于16GB的物理内存,仅需要保留32MB的空间来存放E-Hash值。
[0151]进一步地,上述增加页面的属性,可以理解如下:当前的OS内核中,为每个物理内存页面都维护对应的属性信息集合,本实施例中将页面的E-Hash值作为新增的属性加入到这个属性集合中,方便软件直接访问。例如,对于64bits的计算机系统,可以使用一个unsigned long数值就可以存放E-Hash属性即E-Hash值,例如名称可为E-Hash属性。
[0152]为更好的理解本发明实施例中的提及的物理页面的E-Hash值,下述举例说明硬件更新E-Hash值的过程。
[0153]在本实施例中,为了扩展硬件使其支持并维护页面的E-Hash值,需要在内存控制器中增加两个缓冲单元:ECC Buffer单元和E-Hash Cache缓冲单元,如图5A所示。
[0154]E-Hash Cache缓冲单元,用于缓存和更新访问时间小于等于预设阈值的物理页面的E-Hash值,即用于缓存和更新最近访问的物理页面的E-Hash值;
[0155]ECC Buffer单元,用于存放被写回的缓冲字节Cache Line对应的错误检查和纠正码ECC码,以及将所述ECC码发送至所述E-Hash Cache缓冲单元,以使所述E-Hash Cache缓冲单元采用所述ECC码更新与所述ECC码对应的E-Hash值;
[0156]其中,所述Cache Line为所述物理页面的Cache Line。
[0157]在具体的应用中,内存控制器还可包括:Write Queue单元,该Write Queue单元用于缓存从Cache写回(Write Back)到物理内存中的Cache Line,并使所述ECC Buffer单元基于所述Cache Line存放与所述Cache Line对应的ECC码。
[0158]可以理解的是,Write Queue单元缓存写回到物理内存的数据,而从物理内存读回的数据都是直接送到Cache中,不会放入Write Queue单元。
[0159]通常,被改写过的Cache Line数据(Dirty)在被从Cache中替换出来的时候才会将数据放入Write Queue单元,其称为写回(Write Back)操作。
[0160]具体地,在图5A中,ECC Buffer单兀存放从Cache中写回的Cache Line对应的完整ECC码,而E-Hash Cache缓冲单元存放最近被访问和更新的页面对应的E-Hash值,如果被访问页面的E-Hash值在Cache中命中(B卩,将经常访问的数据放在处理器的Cache中,这样下次访问可以直接在Cache中读取,将此称为在Cache命中,一旦命中就不需要访问内存,用以提高操作系统的提高性能),进而可不需要访问内存,从而提高对E-Hash值访问的性能。
[0161]当然,从内存中读回数据,与上述图4A基本相同。而只有当向内存写回数据的时候,,如图5A所示,需要重新计算ECC码,并将ECC码放入ECC Buffer单元中。ECC Buffer单元的大小与Write Queue单元的大小(如缓存多少个Cache Line的个数/项数)保持一致,保证不会溢出。
[0162]ECC Buffer单兀和Write Queue单兀可以同步维护,并且ECC Buffer单兀可以共享Write Queue单元内待写回Cache Line数据的Tag,从而节省空间,如图5B所示。
[0163]可以理解的是,Tag用于指缓存标记,即内存地址的高位部分,用于比较判断访问的物理内存位置是否在Cache命中。
[0164]图5B中ECC Buffer单兀可使用Write Queue内的Tag中的Cache Line地址。而E-Hash Cache缓冲单元则可采用常用的类最近最少使用算法(Least Recently Used,简称LRU)替换策略,例如采用LRU替换策略可确定将哪一个物理页面的E-hash值替换出去,从而能够利用页面访问的局部性,进而使用常用的Write-Back策略。
[0165]其中,E-HashCache 缓冲单兀中包括多个 E-Hash Cache Line。(即 Cache Line是Cache的基本组成单位),每个E-Hash Cache Line需要维护对应的Tag, E-Hash值的Tag主要包括如下信息内容:
[0166]第一、PFN,代表对应Cache内存放的E-Hash值的页面号。
[0167]举例来说,64位系统(如x86_64),其有效的地址一般为48位,扣除最后的12位页内偏移,所以页面号只需要36位。
[0168]第二、Dirty位(被改写的位),代表Cache内页面的E-Hash值是否被改写过,如果被改写过,硬件将其设置为1,那么当它被替换出去的时候,需要写回到内存中;如果没被改写过,其值为0,这时不需要将其写回到内存。这只需要I位即可。
[0169]第三、Valid位(有效位),代表Cache内存放的E-Hash值是否有效,如果为1,代表有效,如果为0,代表无效。这也只需要I位即可。
[0170]为了 E-Hash Cache缓冲单元的Tag对齐,可以设置每个Tag位数为40,前面用了38位,剩下的2位作为保留位,可用于其它用途,如可用于指导Cache替换策略等。可以说明的是,当前的E-hash Cache只存放部分页面的E_hash值,需要将旧的数据替换出去才能放入新的被访问到的页面的E-hash值。
[0171]另外,为了与当前的DDR3访存协议保持读写访问粒度一致,可以将每8个页面的E-Hash (64bits)值作为一个整体来读写(这样Burst8次就是一个Cache Line64Bytes),8个页面的E-Hash值可以共享一个Tag,这时Tag内存放的是第一个页面的PFN。
[0172]为了保证E-Hash Cache缓冲单元的较高命中率,可以设置E-HashCache缓冲单元的项数(即大小)至少为ECC Buffer单元的项数的8倍,其需要的容量开销仍然较小。例如,大小为64的Write Queue单元,其对应ECC Buffer单元需要的空间为64*64bits=512Bytes,而 E-Hash Cache 缓冲单兀的大小为 8*64*64bits+8*64*40bits< 6.5KBytes,所以总空间小于7KBytes。
[0173]图6示出了硬件支持E-Hash值更新的数据写回示意图。当一个Cache Line被写回到Write Queue单元(图6中简称WQ)的时候,为了维护写回数据的一致性,每次写回数据都需要依次查询Write Queue单元内的缓存数据的Tag,判断是否已经有对同一个CacheLine的写回数据。
[0174]与查询Write Queue单元内的缓存数据的Tag的步骤并行的步骤为,硬件将写回的数据输入到ECC校验生成逻辑单元计算产生新的ECC码,而ECC Buffer单元的一致性维护总是与Write Queue单元的一致性维护同步进行。
[0175]如果不存在对同一个Cache Line的写回数据,就将这个新写回的数据放到WriteQueue单元中的队尾,对应地将新生成的ECC码放入ECC Buffer单元中的队尾,更新WriteQueue单兀中队尾的Tag, ECC Buffer单兀和Write Queue单兀共享这个Tag。
[0176]如果对应Cache Line已有写回的旧数据,那么将Write Queue单元中对应项的旧数据替换成新写回的数据,而相应地将ECC Buffer单元中对应项的旧ECC码替换成新生成的ECC码,此时,ECC Buffer单元和Write Queue单元还是共享这个Tag。
[0177]可以理解的是,当Write Queue单元快满的时候,需要将Write Queue单元内的多个写请求连续写回内存,在这个过程中,可对应将ECC Buffer单元内的ECC码更新到页面的E-Hash值中,更新E-Hash值的流程如图7所示:
[0178]步骤一:对于ECC Buffer单元内的待写回的ECC码,首先查询对应Write Queue单元内的Tag,计算所属页面的PFN(例如,对4KB页面及64B的Cache Line,从Cache Line计算PFN的方法是:将Cache Line地址右移6位即可得到对应的PFN);
[0179]步骤二:使用计算得到的PFN查询E-Hash Cache缓冲单元内的Tag,判断E-Hash值是否在Cache中命中;
[0180]步骤三:如果命中,那么可以直接将ECC码更新到对应页面的E-Hash值中,并将对应项的Dirty位设置为I。
[0181]应注意,将ECC码更新到页面E-Hash值的方式可为:对于采用ECC码进行异或计算得到的E-Hash值,将Cache内存的E-Hash值的旧值与这个ECC码进行异或计算即可得到页面新的E-Hash值。
[0182]步骤四:如果E-Hash值不在Cache中命中,那么需要先从内存中将对应页面的E-Hash值取回到Cache中,然后才能进行更新。此时,与数据Cache —样,需要选择一个E-Hash值替换出去(如选择LRU位置),如果被替换出去的E-Hash值对应的Dirty为1,还需要先将其写回到内存中。
[0183]由上,硬件实现自动维护Page的E-Hash值,并写回到物理内存中。例如,内存控制器负责动态计算页面的E-hash值,并根据物理页面的PFN将E-hash值存放到特定的物理内存位置。软件直接从特定物理内存位置读取页面的E-hash值。
[0184]可选地,软件读取页面的E-Hash值并与其他页面的E-Hash值进行比较的时候,可以允许E-Hash值被读入到上层的数据Cache中,实现加速访问;也可以限制E-Hash值只能被放在E-Hash Cache中,而绝不放入上层的数据Cache中。
[0185]由于页面的E-Hash值由硬件自动维护更新,而软件对页面的E-Hash值仅是只读访问,因此即使允许将E-Hash值读入数据Cache,也不需要维护任何一致性信息。如果在软件读取E-Hash值的过程中,其值被硬件修改,这时会出现不一致状况,但是这对于页面内容共享的正确性是没有任何影响的,因为即使E-Hash值比较出错,后面还会对页面进行完整比较验证。
[0186]本发明实施例中的页面内容共享的方法可以实现对整个页面内容的共享,也可以实现对部分页面(Sub-Page)的页面内容的共享,
[0187]上述实施例中介绍的方法都是针对整个页面内容共享,但是,对于那些采用部分页面(Sub-Page)共享机制的系统同样使用:对于Sub-Page粒度的共享,对应需要以Sub-Page来维护更新它的E-Hash值,硬件负责维护更新,而软件直接读取Sub-Page的E-Hash值进行比较。本发明并不局限于整页面的共享。
[0188]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0189]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【权利要求】
1.一种页面内容共享的方法,其特征在于,包括: 对于第一物理页面和第二物理页面,读取所述第一物理页面的第一哈希E-hash值、第二物理页面的第二哈希E-hash值; 判断所述第一 E-hash值和所述第二 E-hash值是否相同; 如果所述第一 E-hash值和所述第二 E-hash值相同,则判断所述第一物理页面和所述第二物理页面的页面内容是否相同; 若所述第一物理页面和所述第二物理页面的页面内容相同,则将所述第一物理页面和所述第二物理页面的页面内容共享。
2.根据权利要求1所述的方法,其特征在于,所述读取所述第一物理页面的第一E-hash值、第二物理页面的第二 E-hash值,包括: 根据所述第一物理页面的页面号PFNl在物理内存中读取所述第一物理页面的第一E-hash 值; 根据所述第二物理页面的页面号PFN2在物理内存中读取所述第二物理页面的第二E-hash 值。
3.根据权利要求1或2所述的方法,其特征在于,所述读取所述第一物理页面的第一E-hash值、第二物理页面的第二 E-hash值的步骤之前,所述方法还包括: 内存控制器获取所述第一物理页面的第一 E-hash值,并根据所述第一物理页面的页面号PFNl将所述第一 E-hash值存放在物理内存中,以使软件访问; 内存控制器获取所述第二物理页面的第二 E-hash值,并根据所述第二物理页面的页面号PFN2将所述第二 E-hash值存放在物理内存中,以使软件访问。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一物理页面的页面号PFNl将所述第一 E-hash值存放在物理内存中,包括: 内存控制器根据所述第一物理页面的页面号PFN1,采用页面着色技术Page Coloring将所述第一 E-hash值存放在物理内存中; 所述根据所述第二物理页面的页面号PFN2将所述第二 E-hash值存放在物理内存中,包括: 内存控制器根据所述第二物理页面的页面号PFN2,采用页面着色技术Page Coloring将所述第二 E-hash值存放在物理内存中。
5.根据权利要求3所述的方法,其特征在于,所述内存控制器获取第一物理页面的第一 E-hash值,包括: 内存控制器根据所述第一物理页面的所有缓冲字节Cache line的错误检查和纠正码ECC码计算所述第一物理页面的第一 E-hash值; 所述内存控制器获取第二物理页面的第二 E-hash值,包括: 内存控制器根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二 E-hash值。
6.根据权利要求5所述的方法,其特征在于,所述内存控制器根据所述第一物理页面的所有Cache line的ECC码计算所述第一物理页面的第一 E_hash值,包括: 内存控制器将与所述第一物理页面对应的所有ECC码进行异或运算,得到所述第一物理页面的第一 E-hash值; 所述内存控制器根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二 E-hash值,包括: 内存控制器将与所述第二物理页面对应的所有ECC码进行异或运算,得到所述第二物理页面的第二 E-hash值; 其中,ECC码为所述内存控制器以Cache line为单位进行维护的。
7.一种页面内容共享的装置,其特征在于,包括: 读取单元,用于读取第一物理页面的第一哈希E-hash值,第二物理页面的第二哈希E-hash 值; 第一判断单元,用于判断所述第一 E-hash值和所述第二 E-hash值是否相同; 第二判断单元,用于在所述第一判断单元确定所述第一 E-hash值和所述第二 E-hash值相同时,判断所述第一物理页面和所述第二物理页面的页面内容是否相同; 页面内容共享单元,用于在所述第二判断单元确定所述第一物理页面和所述第二物理页面相同时,将所述第一物理页面和所述第二物理页面的页面内容共享。
8.根据权利要求7所述的装置,其特征在于,所述读取单元,具体用于 根据所述第一物理页面的页面号PFNl在物理内存中读取所述第一物理页面的第一E-hash 值; 根据所述第二物理页面的页面号PFN2在物理内存中读取所述第二物理页面的第二E-hash 值。
9.根据权利要求7或8所述的装置,其特征在于,所述装置还包括: 获取单元,用于获取所述第一物理页面的第一 E-hash值,以及获取所述第二物理页面的第二 E-hash值; 存储单元,用于根据所述第一物理页面的页面号PFNl将所述获取单元获取的第一E-hash值存放在物理内存中,以及根据所述第二物理页面的页面号PFN2将所述获取单元获取的第二 E-hash值存放在物理内存中,以使软件访问。
10.根据权利要求9所述的装置,其特征在于,所述存储单元,具体用于 根据所述第一物理页面的页面号PFN1,采用页面着色技术Page Coloring将所述第一E-hash值存放在物理内存中,以使软件访问; 根据所述第二物理页面的页面号PFN2,采用页面着色技术Page Coloring将所述第二E-hash值存放在物理内存中,以使软件访问。
11.根据权利要求9所述的装置,其特征在于,所述获取单元,具体用于 根据所述第一物理页面的所有缓冲字节Cache line的错误检查和纠正码ECC码计算所述第一物理页面的第一 E-hash值; 根据所述第二物理页面的所有Cache line的ECC码计算所述第二物理页面的第二E-hash 值。
12.根据权利要求9所述的装置,其特征在于,所述获取单元,具体用于 将与所述第一物理页面对应的所有ECC码进行异或运算,得到所述第一物理页面的第一E-hash 值; 将与所述第二物理页面对应的所有ECC码进行异或运算,得到所述第二物理页面的第二E-hash 值; 其中,ECC码为所述获取单元以Cache line为单位进行维护的。
13.—种内存控制器,其特征在于,包括: 哈希值E-Hash Cache缓冲单元,用于缓存和更新访问时间小于等于预设阈值的物理页面的哈希E-Hash值; 存放ECC Buffer单元,用于存放被写回的缓冲字节Cache Line对应的错误检查和纠正码ECC码,以及将所述ECC码发送至所述E-Hash Cache缓冲单元,以使所述E-Hash Cache缓冲单元采用所述ECC码更新与所述ECC码对应的E-Hash值; 其中,所述Cache Line为所述物理页面的Cache Line。
14.根据权利要求13所述的内存控制器,其特征在于,还包括: 写队列Write Queue单元,用于缓存从高速缓冲存储器Cache写回WriteBack到物理内存中的Cache Line,并使所述ECC Buffer单兀基于所述CacheLine存放与所述CacheLine对应的ECC码。
15.根据权利要求14所述的内存控制器,其特征在于,所述ECCBuffer单元和所述Write Queue单元共享缓存标记Tag。
【文档编号】G06F12/10GK104166632SQ201310186233
【公开日】2014年11月26日 申请日期:2013年5月17日 优先权日:2013年5月17日
【发明者】陈荔城, 张立新, 陈明宇, 阮元 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1