HK40100521A - 支持巨页的内存管理 - Google Patents
支持巨页的内存管理 Download PDFInfo
- Publication number
- HK40100521A HK40100521A HK42024088233.2A HK42024088233A HK40100521A HK 40100521 A HK40100521 A HK 40100521A HK 42024088233 A HK42024088233 A HK 42024088233A HK 40100521 A HK40100521 A HK 40100521A
- Authority
- HK
- Hong Kong
- Prior art keywords
- page
- main memory
- memory
- data
- data page
- Prior art date
Links
Description
本申请为下述申请的分案申请,
原申请的国际申请号:PCT/US2017/048663
原申请的国际申请日:2017年8月25日,
原申请的国家申请号:201780058759.7,
原申请的发明名称:支持巨页的内存管理
技术领域
本说明书一般涉及内存系统。
背景技术
可以使用各种各样的内存设备来维护和存储各种计算机和类似系统的数据和指令。在传统的计算系统中,动态随机存取内存(DRAM)技术通常用于操作计算机的动态内存,以便使得应用以高速运行。然而,在计算机系统中用作主内存的DRAM不再像过去那样快速地扩大。结果,DRAM存储已成为计算环境中的有限资源。
发明内容
可以使用二层内存,例如基于磁盘的内存、NAND闪存、自旋扭矩传递磁内存(STT-MRAM),电阻随机存取内存(ReRAM)等。二层内存可以通过内存或IO总线本地访问,或通过高速网络远程访问。但是,应用需要显式管理数据放置,或者系统必须提供在内存层之间透明地移动数据的自动管理。此外,还有巨页或大页面或超级页面,这些术语的使用可互换地,已经证明这些页面可以为大多数工作负载提供显著的性能提升,特别是对于基于云的服务应用,其中巨页是大小较大的内存块,例如8KB、64KB、256KB、1MB、2MB、4MB、16MB、256MB、512MB或1GB,而不是可能是4KB的典型页面,具体取决于处理器架构。因此,自动管理需要对性能的影响最小的新技术,以克服现有技术的不足。
本说明书中描述的主题的一个创新方面体现在系统和方法中,系统和方法包括:从主内存接收包含在第一数据页的第一部分中的数据的请求,该第一数据页包括第一页面大小,并且第一部分具有第二页面大小,第二页面大小小于第一页面大小;基于确定第一数据页没有存储在主内存中而存储在次级内存中来发起页面错误;响应于页面错误的发起,分配主内存的一部分,主内存的一部分的大小相当于第一页面大小;将第一数据页的第一部分从次级内存传送到被分配的主内存的一部分而不传送整个第一数据页,其中第一数据页的剩余量继续存储在次级内存中;并且更新与第一数据页的第一部分相关联的第一页面表条目,以指向第一数据页的第一部分被传送到的被分配的主内存的一部分的位置。
在某些实施方式中,第一数据页的剩余量从次级内存传输到主内存。传送第一数据页的剩余量可以包括:将对应第二页面大小的第一数据页的各部分从次级内存重复传送到被分配的主内存的一部分,直到整个第一数据页存储在主内存中为止;并且,为第一数据页的每个各部分更新各页面表条目,以指向主内存中第一数据页的各部分的各位置。
在某些实施方式中,一旦将整个第一数据页存储在主内存中,则将从次级内存传送到被分配的主内存的一部分的第一数据页的各部分重组为第一数据页;并且更新与第一数据页相关联的页面表条目以指向主内存中重组的第一数据页的位置。
本说明书中描述的主题的另一方面体现在系统和方法中,系统和方法包括在将第一数据页的剩余部分从次级内存传送到主内存之前,指示被请求访问的第一数据页的第一部分被传送到了主内存中。
本说明书中描述的主题的另一个创新方面体现在系统和方法中,该系统和方法包括基于页面表扫描器对页面表的扫描,确定是否为页面表的每个页面表条目设置了访问位,访问位指示与页面表条目相关联的页面是否在最后的扫描周期中被访问,其中具有第一页面大小的至少一个页面被划分为第二页面大小的页面,并且第二页面大小的页面在被扫描的页面表中具有用于每个第二页面大小的页面的页面表条目;响应于确定没有为与页面相关联的页面表条目设置访问位,递增每个页面的计数;在确定是否为每个页面表条目设置了访问位之后,重置访问位。
在某些实施方式中,如果大小相当于第一页面大小的主内存的一部分不能被分配,则基于每个页面的计数来确定具有第一页面大小的最少被使用的页面中的一个页面,并且将最少被使用的页面中的一个页面释放到次级内存,并且在释放的一个最少被使用的页面的位置处分配大小相当于第一页面大小的主内存的一部分;如果大小相当于第一页面大小的主内存的一部分能被分配,则将第一数据页的第一部分从次级内存传送到被分配的主内存的一部分。
这些方面的其他实施例包括相应的系统、装置和计算机程序,这些系统、装置和计算机程序被配置为执行在计算机存储设备上编码的方法的动作。
可以实现本说明书中描述的主题的特定实施例,以便实现以下优点中的一个或多个。例如,对内存中页面的使用或访问统计数据可以比涉及软件和采样技术的当前方法更精确和准确,因为可以在子页面级别而不是仅在页面级别确定访问统计数据。此外,通过首先转移请求访问的页面的特定部分而不是整页数据,可以减少响应于访问页面的请求而转移页面所引起的延迟,这可以促使更快执行正在执行的应用或进程。另一个优点是系统可以利用巨页的好处,例如由于页面表级别较少并且转换后备缓冲区(TLB)覆盖率较好,而具有更好的内存访问性能,并且一直以较小的页面粒度执行分页,这可以提供更好的页面错误性能,因为仅传输小页面减少了的页面错误的延迟。因此,可以实现巨页的内存访问益处和对小页面的分页益处的需求。此外,由于与直接分页巨页相比,更好地维护了主内存中的热数据和次级内存中的冷数据,因此根据小页面大小仅传输所需的数据,并且结果使得主内存不会被不必要的数据占用。
在附图和以下描述中阐述了本发明的一个或多个实施例的细节。根据说明书、附图和权利要求,本发明的其他特征和优点将变得显而易见。
附图说明
图1描绘了包括根据本公开的实施方式的内存设备的系统的示例。
图2描绘了包括根据本公开的实施方式的内存设备的系统的示例。
图3A描绘了根据本公开的实施方式的用于将虚拟内存映射到物理内存的页面表的示例。
图3B描绘了根据本公开的实施方式分配的内存的一部分的示例。
图4描绘了根据本公开的实施方式的用于内存管理的过程的示例流程图。
各附图中相同的附图标记和名称表示相同的元件。
具体实施方式
已经证明,巨页可以为大多数工作负载提供显著的性能提升,特别是对于基于云的服务应用。尽管这里可以使用术语“巨页”,但该术语适用于大于最小尺寸的页面的任何尺寸的页面,最小尺寸的页面即特定架构可以处理的小页面或其标准页面尺寸。例如,特定架构的最小页面大小或标准页面大小可以是4KB,而巨页可以是2MB。在其他实施方式中,例如,巨页可以是8KB、64KB、256KB、1MB、2MB、4MB、16MB、256MB、512MB或1GB或更大,或其间的任何大小。例如,巨页可以是4KB的任何整数倍n,即n*4KB,并且在某些实施例中,可以是标准页面大小的两倍的任何幂。本公开的实施例引入了一种新方案,该方案可以使用巨页来访问主内存(例如DRAM缓存),同时使用传统的小页面来分页到较慢内存的二级(有时称为次级内存)。可以基于用于访问较慢内存的互连的类型来修改某些实施例。例如,可以为IO互连实现基于定制内核驱动器的基于软件的解决方案。此外,例如,可以为缓存一致性互连实现用于管理巨页的硬件解决方案。
相应地,本公开的实施例提供了一种用于次级内存的高性能自动管理的系统,该次级内存对内存或IO总线本地可用或通过网络远程可用。次级内存可以是基于磁盘的,也可以是非易失性且持久性的计算机内存。次级内存可以不由处理器直接访问,并且可以比基础内存或主内存慢。主内存,也称为基础内存、基础存储器、内部内存或第一级内存,可以直接由CPU访问。如下面更详细描述的,例如,优化的内核驱动器可以提供到二级内存的快速路径并处理与内存管理硬件的所有通信。与引起用于诸如同步、内存管理以及块IO传输的大成本的,通过内核进行分页的现有路径相比,该过程是有利的。
下面更详细地描述这些特征和附加特征。
图1描绘了包括根据本公开的实施方式的内存设备的系统100的示例。中央处理单元(CPU)110可以以DRAM 120和内存管理单元(MMU)150的形式与主内存通信。系统100还可以包括远程内存130形式的次级内存,其可以通过网络访问。MMU 150可以在内存的管理中进行操作。另外,页面表遍历器160和转换检测缓冲区(TLB)165可以是MMU 150的一部分或者由MMU 150实现。系统100可以额外包括DRAM 170作为物理内存。
MMU 150是可以具有通过MMU150的内存引用的硬件单元,执行虚拟内存地址到物理地址的转换以及处理缓存控制。例如,MMU 150可以使用页面表作为包含每页一个页面表条目(PTE)的内存表(in-memory table),以将虚拟页号映射到主内存中的物理页号。作为PTE的关联缓存的转换检测缓冲区165可用于避免每次映射虚拟地址时访问主内存的必要性。当PTE禁止访问虚拟页面时,例如因为没有物理随机存取内存被分配给该虚拟页面时,MMU 150可以向CPU 110发页面错误的信号。
CPU 110可以具有缓存,其可以是内置于处理器中的少量快速内存,该处理器可以被配置为包含临时数据副本以减少处理延迟。TLB 165可以是最近使用的页面的固定大小的阵列,CPU 110可以在每次内存访问时检查TLB 165。TLB 165可以列出当前分配在DRAM170中的物理页面的虚拟地址范围。因此,例如,TLB 165可以用作MMU 150的缓存。以这种方式,对TLB 165中列出的虚拟地址的访问可以直接进入相关联的物理内存,例如DRAM 170。另外,对未在TLB 165中列出的虚拟地址的访问,即TLB未命中,可以触发可以由硬件或页面错误处理器执行的页面表查找。
图2描绘了包括根据本公开的实施方式的内存设备的系统200的示例。系统200可以包括CPU 220和物理地址空间240。MMU 230可以解释虚拟地址以识别对应的物理地址。例如,可以将在虚拟地址处读取、写入或执行内存的尝试转换为对应的物理地址,或者可以生成中断,即页面错误,以允许软件响应尝试的访问。物理内存地址可以识别一块存储硬件内的特定内存单元或部分,存储硬件构成与给定的读取或写入操作相关联的物理内存。虚拟内存可以提供软件控制的一组内存地址,例如,虚拟地址空间,并且可以允许每个过程,例如,过程A205和过程B 210,具有其自己的虚拟内存地址范围,其可以包括内核空间和用户空间。MMU 230可以使用页面表来解释虚拟地址,页面表可以将虚拟地址范围映射到关联的存储内容。尽管处理器的最小寻址单元可以是字节或字,但MMU 230可以以页面管理内存。
图3A描绘了根据本公开的实施方式的用于将虚拟内存310映射到物理内存330的页面表320的示例。页面表320可以是包含过程的内存映射列表的数据结构,并且可以用于跟踪相关联的资源。例如,每个过程可以有自己的一组页面表。虚拟地址空间,如虚拟内存310,可以被划分为页面,页面可以是特定大小的连续地址范围。页面可以被构造成使得页面的起始地址是页面大小的倍数。如上所述,MMU 230可以使用页面表320来解释来自虚拟内存310的页面的虚拟地址,并识别物理内存330中的页面帧的对应的物理地址。另外,页面表可以是分层的、多级的、基于散列的等,这为巨页提供了优势,以更快的页面遍历提高层次结构。
如上所述,次级内存或二层内存,如基于磁盘的内存或其他二层内存,可以比如DRAM的主内存或基础内存慢。根据某些实施方式,定制的内核驱动器可以管理具有巨页的二层内存。内核驱动器可以在连续区域中保留物理内存,这些区域是DRAM中缓存的巨页的倍数。当应用需要额外的内存时,内核驱动器可能会以巨页的倍数分配空间,即以巨页大小的倍数分配空间。内核驱动器可以实现页面替换策略,并且当用于替换的数据被选择时,可以将巨页分页到二层内存。该过程可以与请求访问内存中数据的正在运行的应用异步发生。
当应用在访问驻留在二层内存中的数据出错时,页面错误处理器可以仅将包含所请求的缓存行的单个小页面从二层内存传送到如DRAM的主内存。然而,根据某些实施方式,可以跟踪构成巨页的每个小页面的状态。因此,例如,当内核驱动器在巨页内的所有或预定数量的小页面中出错时,可以做出确定以通过用巨页的单个PTE替换现有的PTE并从TLB165中清除任何相关的TLB条目,将任何剩余的小页面划入页面,并将小页面合并或重组成DRAM中的巨页。
因此,可以保持对驻留在DRAM中的数据的巨页的优点,同时还可以通过在传送小页面之后完成错误处理器的过程,来降低页面错误的成本。例如,使用巨页可以提供减少资源开销的优点,因为以更大粒度跟踪数据使得具有更少条目的较小页面表成为可能。但是,如果系统总是将巨页写入二层内存,则使用巨页可能会导致整体写入带宽增加。此外,存在这样的可能性:巨页内的如经常使用或最近使用的“热”的小页面,可能被分页到次级的较慢的内存,引起该“热”数据的附加故障。根据某些实施方式,内核驱动器可以基于巨页和小页面统计数据,动态地确定何时分解或合并巨页来缓解这些问题。例如,可以周期性地分解巨页,以通过PTE访问位来收集关于巨页内的小页面的统计数据,如下面更详细地描述的。此外,驱动器可以维护巨页和小页面,从而当巨页内的预定数量的小页面“热”、或者频繁或最近被访问时,小页面可以转移到巨页并被合并。相反,如果在巨页内的太多子页面,即小页面是“冷”的话,则可以将巨页分解并作为小页面进行处理。
根据某些实施方式,当做出尝试来访问未存储在主内存中的数据并且发生页面错误时,整个巨页可能不被传送到主内存中,而是较小的数据块被传送到主内存中,例如,包括请求访问的数据的小页面可以从次级内存被传送到主内存。因此,应用可以访问所请求的数据并继续运行。随后,可以将巨页的其余部分在后台传送到主内存中,并且可以相应地更新页面表条目。以这种方式,可以更快地访问所请求的数据,并且系统仍然可以获得管理巨页的益处。换句话说,从次级内存读取巨页并将巨页写入主内存所需的时间大于读取和写入小页面所需的时间;因此,只读取包含请求访问的数据的小页面减少了应用的时间或处理线程被暂停的时间或等待数据从次级内存传输到主内存的时间。因此,由于性能至关重要,减少将数据传输到主内存的延迟时间比将数据传输回次级内存的时间更重要,因为从主内存传输出的数据通常是“冷”数据页面,“冷”数据页面在后台传输,对操作性能影响很小或没有影响,反之传输到主内存的数据可能会延迟应用或处理线程的执行。
如上所述,当线程或正在运行的程序访问映射到虚拟地址空间但实际上没有加载到主内存中的内存页面时,可能发生页面错误。MMU 150或页面错误处理器可以检测页面错误,并且当检测到页面错误时,可以做出内存中是否存在空闲页面的确定。如果存在空闲页面,则可以将页面数据从次级存储器复制到内存中的空闲页面位置。如果没有空闲页面,则可以例如从FIFO队列中拉出页面,该FIFO队列可以在队列中跟踪内存中的所有页面,其中最近到达的在后面,最早到达的在前面。如果该页面是脏的,即已经被修改,则系统可以将该页面写入次级内存。在将页面从主内存传送到次级内存时,与页面相关联的页面表条目可以是无效的,并且可以执行与页面相关联的任何条目的页表缓存关闭(TLB shootdown),例如,使TLB条目被刷新以用于其他处理器。在该页面当前是空闲的时,页面数据可以从次级存储器复制到空闲页面位置。可以通过更新与页面相关联的PTE以指向页面的主内存中的位置来更新页面表以创建有效的PTE。一旦处理了页面错误,线程或正在运行的程序就可以恢复其请求在主内存中访问的数据。
图3B描绘根据本申请的实施方式分配的内存305的一部分的示例。对于分页需求,可能需要将一页“冷”数据写入次级存储器,例如,“冷”数据为以小于某个阈值访问速率的速率访问的数据或者在特定时间段内未被访问的数据,并且当应用尝试访问数据并发生页面错误时,可能需要将一页数据传输回主内存。根据某些实施方式,从处理器的角度来看,页面进出主内存的过程就好像系统仅处理巨页一样。换句话说,巨页可能会在冷时,即不经常使用或最近不使用时,从主内存中被传输出来,并且当页面需要传输到主内存时,可以分配内存的整个巨页,即使只有如小页面的巨页的一部分最初可以被转移。因此,分配的内存305可以对应于巨页,并且对应于巨页的连续内存可以分配在物理内存325以及虚拟内存315中。
例如,当发生页面错误并且需要将一页数据传送到主内存时,可以首先分配内存的巨页。然后,相较于传送包含请求访问的数据的整个巨页,而是可以最初仅将数据的子页面或小页面传送到主内存中,该数据包含由应用请求访问的数据。例如,应用可能仅需要访问字节或字,使得应用不需要整个巨页,系统可以仅将较小部分的数据传送到主内存,例如,小的页面,较小部分的数据包括应用继续运行需要的数据。在传送该小页面时,可以向应用做出所请求的数据已经被传送到主内存中或者现在可以从主内存访问指示。
随后,因为整个巨页没有被传送到主内存中,所以巨页的剩余部分可以在后台传送到主内存中。或者,例如基于访问统计数据,可以确定将巨页分成小页面是有利的,从而将分页数据结构从单个巨页改变为要素小页面。如果应用随后访问尚未传送到主内存的任何剩余小页面,则可以在请求访问并发生页面错误时传送那些小页面。
为了做出是否传送巨页的剩余部分并且合并或者将巨页分成小页面的决定,可以收集访问统计数据以识别页面的“温度”,例如巨页内的页面中的“热”页面和“冷”页面。因此,根据某些实施方式,在巨页块中分配和保留内存,但是可以将巨页分解成小页面以与较小的页面块一起工作。当一个巨页被分解成小页面时,页面表可以用每个小页面的相应PTE更新;当重组巨页时,可以通过用整个巨页的一个条目替换每个小页面的相应PTE来更新页面表。
收集页面的访问统计数据可以通过确定页面访问的任何过程或手段来完成,例如,确定“冷”页面和“热”页面。例如,过程可以包括定期将一个巨页拆分成小页面,扫描该组页面并读取访问位以确定上次访问小页面的时间或频率或最近小页面被如何访问,然后在访问统计数据信息被收集后,将小页面重新组合回巨页。以这种方式,例如,访问巨页内的子页面或小页面的样本可用于获得关于访问小页面的统计数据。
更详细地,在某些实施方式中,页面表扫描,即页面表从头至尾的扫描,可以通过硬件而不是需要CPU开销的软件来执行,需要CPU开销的软件执行通常导致较慢的内存访问和处理并丢弃一些其他有用的缓存信息。通常,可以通过扫描页面表来确定页面数据的访问频率,例如,可以通过扫描页面确定相对于其他数据页面被频繁访问的页面数据以及相对于其他数据页面不被经常访问的页面数据。在页面表中映射的每个页面,例如每个PTE,可以具有可以在访问页面时设置的标记或访问位,然后在扫描页面表之后由CPU清除。
该硬件可以通过扩充页面表遍历器160或MMU 150来实现,该硬件可以包括一个或多个页面表遍历器,例如内置在硬件中以读取页面表并自动将虚拟到物理转换加载到TLB165中。因此,硬件可以是处理器架构的一部分,使用处理器中的页面表扫描机制。例如,硬件可以实现扫描页面表、扫描PTE的例程,以确定自上次扫描以来是否已在每个PTE处设置了访问位。在确定已经设置了访问位之后,可以清除访问位,然后可以继续操作直到页面表的下一次扫描。扫描可以周期性地发生,例如,在扫描之间具有预定时间段,或者扫描可以由某些外部事件触发。每次确定设置了访问位或标记时,可以分别为每个页面递增计数。或者,每次确定未设置访问位或标记时,可以分别为每个页面递增计数。
随着时间的推移,可以从扫描创建简档,并且简档可以指示每个页面被访问的频率和/或最近每个页面如何被访问。例如,硬件可以包括一个或多个用于每个页面的计数器或一个或多个布隆过滤器,以维护如设置的访问位或标记的计数的使用统计数据,或者结果可以存储在如两级内存的内存中,以允许分类和过滤如使用最多和最少的页面或访问更频繁和更少的页面。更详细地,硬件可以维护每页计数器以确定最近页面被如何访问,并且当扫描相应的PTE时可以更新每个计数器。可以在片上SRAM中提供每页计数器以便快速访问。或者,因为次级内存的大小可能很大,使计数器的面积成本更高,所以可以使用计数布隆过滤器来维护关于页面集的访问统计数据,从而节省面积。或者,硬件可以使用少量私有DRAM或者可以将计数器存储在系统DRAM中。
因此,例如,基于访问统计数据,页面可以从使用最多到使用最少进行排序,反之亦然。当页面错误被服务时,如果主内存DRAM 170中没有空闲页面,则分页过程可以将使用最少的页面之一释放或写回到次级内存中,并且可以使用该使用最少的页面的位置来将新页面传送到主内存中。
图4描绘了根据本公开的实施方式的用于内存管理的过程400的示例流程图。过程400可以包括,在410处,从主内存接收访问包含在第一数据页的第一部分中的数据的请求。第一数据页可以具有第一页面大小,例如,巨页,并且第一部分可以具有小于第一页面大小的第二页面大小,例如小页面。在420处,可以基于确定第一数据页没有存储在主内存中并且存储在次级内存中来发起页面错误。此外,在430处,响应于页面错误的发起,可以分配大小相当于如巨页的第一页面大小的主内存的一部分。在440处,第一数据页的第一部分可以从次级内存传送到被分配的主内存的一部分而不传送整个第一数据页。因此,第一数据页的剩余量可以仍然存储在次级内存中。在450处,可以更新与第一数据页的第一部分相关联的第一页面表条目,以指向被分配的主内存的一部分的位置,第一数据页的第一部分被传送到该位置。随后,第一数据页的剩余量可以从次级内存传送到主内存,例如,在应用继续运行的同时在后台传送。
为了传送第一数据页的剩余量,可以将第一数据页的与第二页面大小相对应的各部分从次级内存传送到被分配的主内存的一部分,直到整个第一数据页被存储到主内存中为止。此外,可以更新第一数据页的每个相应部分的相应页面表条目,以指向主内存中第一数据页的各部分的相应位置。此外,一旦将整个第一数据页存储在主内存中,就可以将从次级内存传送到被分配的主内存的一部分的第一数据页的各部分合并或重组为第一数据页。根据重组,可以更新与第一数据页相关联的页面表条目以指向主内存中重组的第一数据页的位置。
在某些实施方式中,在将第一数据页的剩余部分从次级内存传送到主内存之前,系统可以指示被请求访问的第一数据页的第一部分已经被传送到主内存,以便请求访问的应用或线程可以通过访问主内存中被请求的数据而继续运行。
用于内存管理的过程的示例还可以包括基于页面表扫描器对页面表的扫描,来确定是否为页面表的每个页面表条目设置了访问位。在这样的过程中,访问位可以指示在最后扫描时段中是否访问了与页面表条目相关联的页面。如上所述,具有如巨页的第一页面大小的页面中的至少一个,可以被划分为如小页面的第二页面大小的页面,第二页面大小的页面在正在被扫描的页面表中具有用于每个第二页面大小的页面的页面表条目。在某些实施方式中,响应于确定没有为与页面相关联的页面表条目设置访问位,可以递增每页的计数。随后,在确定是否为每个页面表条目设置了访问位之后,可以重置访问位。
在某些实施方式中,如果不能分配大小相当于第一页面大小的主内存的一部分,则可以基于每个页面的计数来确定具有第一页面大小的最少使用页面中的一个,并且所确定的最少使用页面可以被释放到次级内存中。因此,可以在释放的最少使用页面中的一个的位置处,分配大小相当于第一页面大小的主内存的一部分。相反地,如果可以分配大小相当于第一页面大小的主内存部分,则可以将第一数据页的第一部分从次级内存传送到被分配的主内存的一部分。
更详细地,例如,如果主内存不具有空闲页面并且不能接收页面传送,则可以基于每个页面的计数来确定主内存中最少使用页面中的一个。页面错误处理器或控制器可以管理页面传送,并且所确定的最少使用页面中的一个可以被释放或写回到次级内存中。此外,请求访问的数据页面可以从次级内存传送到主内存中的释放的最少使用页面中的一个的位置处。或者,如果主内存确实具有空闲页面并且可以接收页面传送,则页面错误处理器或控制器可以管理页面数据从次级内存到主内存的传送。
在某些实施例中,当发起页面错误时,可以停滞线程的执行或程序的运行,同时对数据传送进行管理以服务页面错误,如上所述。随后,在服务页面错误之后,可以释放线程以访问主内存中的页面。
在某些实施方式中,以下可能是有利的:不仅确定次级内存中的哪些页面变得“热”,即访问频率的增加,而且还确定主内存DRAM中的哪些页面变得“冷”,即访问频率减少。换句话说,确定在可能比主内存慢的次级内存中更频繁地被访问的页面,并且确定在主内存中较不频繁地被访问的页面。如上描述了基于如被设置的访问位的计数,参考对于如DRAM的主内存的使用或访问统计数据,确定在主内存中较不频繁地被访问的页面的一种过程。系统可以基于上面针对主内存描述的访问统计数据,来确定将数据从主内存移动到次级内存的时间以及确定将数据从次级内存移动到主内存的时间。
另外,如上面更详细描述的,可以通过监视PTE来确定冷却或被较少访问的页面。例如,当页面的访问时间满足访问时间阈值时,系统可以通过使与页面相关联的PTE无效、对与页面关联的任意条目执行页表缓存关闭(TLB shootdown)、以及将页面从主内存传输到次级内存,来发起页面从主内存到第二内存的传输。
根据某些实施方式,利用缓存一致性互连,DRAM缓存和二层内存可以由硬件管理,硬件可以充当一致性内存的所有者和一致性内存的用户。换句话说,DRAM充当由硬件管理的缓存,用于以可配置的粒度进行分页以获得最佳性能。用于最佳性能的可配置粒度可取决于应用位置和二层内存的性能。
如上所述的定制的内核驱动器可以仅用巨页映射硬件拥有的地址空间。以这种方式,每当系统访问该内存区域时,系统可以实现巨页的益处,例如由于更大的TLB范围而改善的性能。硬件可以维护缓存查找结构以检查主内存中是否存在页面。当从主机接收到内存访问时,可以查询该查找结构。如果页面存在,则可以直接在主内存中执行读取或写入。如果页面不存在,则可以将数据从次级内存取出到如DRAM的主内存中。在某些实施方式中,出于性能考虑,缓存可以异步地执行驱逐-例如,“冷”数据可以在后台写回到次级存储器以保持最小数量的页面空闲以服务进入的页面。通常,该过程可以在页面级别提供缓存机制,使得可以为用于分页的缓存提供缓存一致性互连。
在某些实施方式中,可以应用缓存优化。例如,当发生页面错误并且页面从次级存储器传送到主内存时,系统可以确定是否将页面保持在主内存中,或者如果页面是非暂时性的,可以确定是否以流式传输页面并对于给定的访问而读取页面,或者可以确定是否通过确定获取下一页以响应当前被访问的页面来执行预获取。在某些实施方式中,可以设置关于应用如何使用内存的标记,以及可以基于那些标记做出进行预获取的确定。
已经描述了许多实施方式。然而,应该理解,在不脱离本公开的精神和范围的情况下,可以进行各种修改。例如,可以使用上面示出的流程的各种形式,对其步骤进行重新排序、添加步骤或移除步骤。
本说明书中描述的本发明的实施方式和所有功能操作可以实现在数字电子电路、固件或硬件中,包括本说明书中公开的结构及其结构等同物,或者这些中的一个或多个的组合。本发明的实施方式可以实现为一个或多个计算机程序产品,即,在计算机可读介质上编码的一个或多个计算机程序指令模块,用于由数据处理装置执行或控制数据处理装置的操作。计算机可读介质可以是机器可读存储设备、机器可读存储基板、内存设备或者这些中的一个或多个的组合。术语“数据处理装置”包含用于处理数据的所有装置、设备和机器,包括例如可编程处理器、计算机或多个处理器或计算机。除了硬件之外,该装置还可以包括为所讨论的计算机程序创建执行环境的代码,例如,构成处理器固件的代码、协议栈、数据库管理系统、操作系统、或者这些中的一个或多个的组合。
虽然本公开包含许多细节,但这些细节不应被解释为对本发明或可要求保护的范围的限制,而是作为对本发明的特定实施方式详细的特征的描述。在不同的实施方式的上下文中在本说明书中描述的某些特征也可以在单个实施方式中组合实现。反之,在单个实施方式的上下文中描述的各种特征也可以在多个实施方式中分开实现或者以任何合适的子组合实现。此外,尽管上述特征可以描述为以某些组合起作用并且甚至最初如此声明,但是在某些情况下可以从组合中切除来自所要求保护的组合的一个或多个特征,并且所要求保护的组合可以针对子组合或者子组合的变化。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应该被理解为要求以所示的特定顺序或按顺序实施这些操作,或者实施所有示出的操作,以实现期望的结果。在某些情况下,多任务处理和并行处理可能是有利的。此外,上述实施方式中的各种系统组件的分离不应被理解为在所有实施方式中都需要这种分离,并且应当理解,所描述的程序组件和系统通常可以在单个软件产品中集成在一起或者被打包到多种软件产品中。
因此,已经描述了本公开的特定实施方式。其他实施方式在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序实施并且仍然实现期望的结果。已经描述了许多实施方式。然而,应该理解,在不脱离本公开的精神和范围的情况下,可以进行各种修改。例如,可以使用上面示出的各种形式的流程,其中的步骤被重新排序、被添加或者被移除。因此,其他实施方式在以下权利要求的范围内。
Claims (19)
1.一种计算机实现的方法,其特征在于,包括:
分配主内存的一部分,所述主内存的一部分相当于存储在次级内存中的第一数据页的第一页面大小;
将所述第一数据页的第一部分从所述次级内存传送到所述主内存的被分配部分,而不传送整个所述第一数据页,其中所述第一数据页的剩余量继续存储在所述次级内存中,并且在数据页的所述剩余量从所述次级内存传送到所述主内存之前,传送的数据页的所述第一部分可用于从所述主内存访问;
更新与所述第一数据页的所述第一部分相关联的第一页面表条目,以指向所述第一数据页的所述第一部分被传送到的所述主内存的所述被分配部分的位置;和
一旦整个所述第一数据页被存储在所述主内存中,则将从所述次级内存传送到所述主内存的所述被分配部分的所述第一数据页的各部分重组为所述第一数据页。
2.根据权利要求1所述的方法,其特征在于,进一步包含更新与所述第一数据页相关联的页面表条目以指向经重组的第一数据页在所述主内存中的位置。
3.根据权利要求2所述的方法,其特征在于,进一步包括:
将所述第一数据页的剩余量从所述次级内存传送到所述主内存。
4.根据权利要求3所述的方法,其特征在于,传送所述第一数据页的剩余量包括:
将所述第一数据页的与所述第二页面大小相对应的各部分从所述次级内存重复传送到所述主内存的所述被分配部分,直到整个所述第一数据页被存储在所述主内存中;和
更新用于所述第一数据页的所述各部分中的每一部分的各页面表条目,以指向所述主内存中的所述第一数据页的所述各部分的各位置。
5.根据权利要求2所述的方法,其特征在于,进一步包括:
在将所述第一数据页的剩余部分从所述次级内存传送到所述主内存之前,指示被请求访问的所述第一数据页的所述第一部分已经被传送到所述主内存。
6.根据权利要求1所述的方法,其特征在于,进一步包括:
基于页面表扫描器对页面表的扫描,确定是否为所述页面表的每个页面表条目设置了访问位,所述访问位指示与所述页面表条目相关联的页面是否在最后的扫描周期中被访问,其中具有所述第一页面大小的至少一个页面被划分为所述第二页面大小的页面,并且所述页面表中的所述第二页面大小的每个所述页面的页面表条目被扫描;
响应于确定没有为与所述页面相关联的所述页面表条目设置所述访问位,递增每个所述页面的计数;以及
在确定是否为每个所述页面表条目设置了所述访问位之后,重置所述访问位。
7.根据权利要求6所述的方法,其特征在于,进一步包括:
如果相当于所述第一页面大小所述主内存的一部分不能被分配,则基于每个页面的所述计数来确定具有所述第一页面大小的最少被使用的页面中的一个页面,并将所述最少被使用的页面中的所述一个页面释放到所述次级内存中,并且将相当于所述第一页面大小的所述主内存的一部分分配在所述最少被使用的页面中的被释放的一个页面的位置处;以及
如果相当于所述第一页面大小的所述主内存的所述一部分能被分配,则将所述第一数据页的所述第一部分从所述次级内存传送到所述主内存的所述被分配部分。
8.根据权利要求1所述的方法,其特征在于,进一步包括:
将具有所述第一页面大小的所述第一数据页的内存结构改变为具有所述第二页面大小的多个数据页,所述第二页面大小小于所述第一页面大小。
9.一种系统,其特征在于,包括:
一个或多个处理器;和
内存,包括主内存和次级内存,所述内存存储指令,所述指令在被执行时可操作以使所述一个或多个处理器执行以下操作:
分配主内存的一部分,所述主内存的一部分相当于存储在次级内存中的第一数据页的第一页面大小;
将所述第一数据页的第一部分从所述次级内存传送到所述主内存的被分配部分,而不传送整个所述第一数据页,其中所述第一数据页的剩余量继续存储在所述次级内存中,并且在数据页的所述剩余量从所述次级内存传送到所述主内存之前,传送的数据页的所述第一部分可用于从所述主内存访问;
更新与所述第一数据页的所述第一部分相关联的第一页面表条目,以指向所述第一数据页的所述第一部分被传送到的所述主内存的所述被分配部分的位置;和
一旦整个所述第一数据页被存储在所述主内存中,则将从所述次级内存传送到所述主内存的所述被分配部分的所述第一数据页的各部分重组为所述第一数据页。
10.根据权利要求9所述的系统,其特征在于,所述操作还包括更新与所述第一数据页相关联的页面表条目以指向经重组的第一数据页在所述主内存中的位置。
11.根据权利要求10所述的系统,其特征在于,所述操作还包括:
将所述第一数据页的剩余量从所述次级内存传送到所述主内存。
12.根据权利要求11所述的系统,其特征在于,传送所述第一数据页的剩余量包括:
将所述第一数据页的与所述第二页面大小相对应的各部分从所述次级内存重复传送到所述主内存的所述被分配部分,直到整个所述第一数据页被存储在所述主内存中;和
更新用于所述第一数据页的所述各部分中的每一部分的各页面表条目,以指向所述主内存中的所述第一数据页的所述各部分的各位置。
13.根据权利要求10所述的系统,其特征在于,所述操作还包括:
在将所述第一数据页的剩余部分从所述次级内存传送到所述主内存之前,指示被请求访问的所述第一数据页的所述第一部分已经被传送到所述主内存。
14.根据权利要求10所述的系统,其特征在于,所述操作还包括:
基于页面表扫描器对页面表的扫描,确定是否为所述页面表的每个页面表条目设置了访问位,所述访问位指示与所述页面表条目相关联的页面是否在最后的扫描周期中被访问,其中具有所述第一页面大小的至少一个页面被划分为所述第二页面大小的页面,并且所述页面表中的所述第二页面大小的每个所述页面的页面表条目被扫描;
响应于确定没有为与所述页面相关联的所述页面表条目设置所述访问位,递增每个所述页面的计数;以及
在确定是否为每个所述页面表条目设置了所述访问位之后,重置所述访问位。
15.根据权利要求14所述的系统,其特征在于,所述操作还包括:
如果相当于所述第一页面大小所述主内存的一部分不能被分配,则基于每个页面的所述计数来确定具有所述第一页面大小的最少被使用的页面中的一个页面,并将所述最少被使用的页面中的所述一个页面释放到所述次级内存中,并且将相当于所述第一页面大小的所述主内存的一部分分配在所述最少被使用的页面中的被释放的一个页面的位置处;以及
如果相当于所述第一页面大小的所述主内存的所述一部分能被分配,则将所述第一数据页的所述第一部分从所述次级内存传送到所述主内存的所述被分配部分。
16.根据权利要求10所述的系统,其特征在于,所述操作还包括:
将具有所述第一页面大小的所述第一数据页的内存结构改变为具有所述第二页面大小的多个数据页,所述第二页面大小小于所述第一页面大小。
17.一种存储可由一个或多个处理器执行的指令的非暂时性计算机可读存储设备,其特征在于,所述指令在被执行时使所述一个或多个处理器执行以下操作:
分配主内存的一部分,所述主内存的一部分相当于存储在次级内存中的第一数据页的第一页面大小;
将所述第一数据页的第一部分从所述次级内存传送到所述主内存的被分配部分,而不传送整个所述第一数据页,其中所述第一数据页的剩余量继续存储在所述次级内存中,并且在数据页的所述剩余量从所述次级内存传送到所述主内存之前,传送的数据页的所述第一部分可用于从所述主内存访问;
更新与所述第一数据页的所述第一部分相关联的第一页面表条目,以指向所述第一数据页的所述第一部分被传送到的所述主内存的所述被分配部分的位置;和
一旦整个所述第一数据页被存储在所述主内存中,则将从所述次级内存传送到所述主内存的所述被分配部分的所述第一数据页的各部分重组为所述第一数据页。
18.根据权利要求17所述的非暂时性计算机可读存储设备,所述操作进一步包含更新与所述第一数据页相关联的页面表条目以指向经重组的第一数据页在所述主内存中的位置。
19.根据权利要求18所述的存储设备,其特征在于,所述操作还包括:
将所述第一数据页的剩余量从所述次级内存传送到所述主内存。
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US15/273,433 | 2016-09-22 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| HK40100521A true HK40100521A (zh) | 2024-05-03 |
Family
ID=
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN109791523B (zh) | 支持巨页的内存管理 | |
| JP6944983B2 (ja) | ハイブリッドメモリ管理 | |
| KR102665339B1 (ko) | 변환 색인 버퍼 축출 기반 캐시 교체 | |
| US10705975B2 (en) | Hybrid memory management | |
| US9921972B2 (en) | Method and apparatus for implementing a heterogeneous memory subsystem | |
| JP7340326B2 (ja) | メンテナンス動作の実行 | |
| KR101893966B1 (ko) | 메모리 관리 방법 및 장치, 및 메모리 컨트롤러 | |
| JP2024533744A (ja) | プロセッサベースのデバイスにおけるメモリブロックアクセス頻度の追跡 | |
| CN110046107A (zh) | 存储器地址转换 | |
| Adavally et al. | Dynamically adapting page migration policies based on applications’ memory access behaviors | |
| HK40100521A (zh) | 支持巨页的内存管理 | |
| Zhang et al. | Efficient data communication between CPU and GPU through transparent partial-page migration | |
| JP7311959B2 (ja) | 複数のデータ・タイプのためのデータ・ストレージ | |
| JP2011141754A (ja) | キャッシュメモリ | |
| Jia et al. | SuperMap: High-Performance and Flexible Memory-Mapped IO for Fast Storage Device | |
| Choi et al. | SPRINT: Selective Partial Region-based Invalidation for Neutralizing Thrashing in GPU Unified Memory | |
| HK1246906A1 (zh) | 混合存储器管理 | |
| HK1246906A (zh) | 混合存儲器管理 |