掌桥专利:专业的专利平台
掌桥专利
首页

一种TLB entry合并方法及一种地址转换方法

文献发布时间:2023-06-19 16:04:54



技术领域

本说明书一个或多个实施例涉及计算机应用技术领域,尤其涉及一种TLB entry合并方法及一种地址转换方法。

背景技术

内存管理单元(Memory Management Unit,MMU)是中央处理器(CentralProcessing Unit,CPU)内部的协处理器,用于协助CPU管理内存。MMU的一个功能为实现虚拟地址(Virtual Address,VA)和物理地址(Physical Address)之间的转换,这种转换通常是通过查找记录虚拟地址和物理地址之间对应关系的表项实现的。

页表是一种记录有虚拟地址和物理地址之间对应关系的表项,CPU内部的转址旁路缓存(Translation Lookaside Buffer,TLB)中也会存储有部分内存页的虚拟地址和物理地址之间的对应关系。这两者的相同之处在于,页表和TLB中都存储有每个内存页(page,为MMU管理内存的最小管理单元,每个内存页包括的若干字节的虚拟地址和物理地址都是连续的)的首个字节的虚拟地址和物理地址之间的对应关系。这两者的不同之处在于,页表存储于内存中,记录有所有内存页的虚拟地址和物理地址之间的对应关系,MMU如果需要从页表中读取数据,需要耗费几百甚至上千的CPU的周期;而TLB是CPU内部的一种高速硬件缓存,且TLB中只记录有部分内存页的虚拟地址和物理地址之间的对应关系,MMU如果需要从TLB中读取数据,只需要耗费几个到几十个CPU的周期。

为了尽可能提升MMU的地址转换效率,MMU在进行虚拟地址和物理地址之间的转换时,会先从TLB中查找需要转换的虚拟地址对应的物理地址,如果TLB中无法查找到(这种情况称之为TLB miss),则需要从速度较慢的页表中查找需要转换的虚拟地址对应的物理地址。

可见,减少TLB miss是提高MMU地址转换效率的关键所在。而由于TLB是一种昂贵的资源,其条目(entry,相关技术中,每个TLB entry存储有一个内存页的虚拟地址和物理地址之间的对应关系)有限。在不增加TLB entry的基础上,如何减少TLB miss发生是一个亟待解决的问题。

发明内容

有鉴于此,本说明书一个或多个实施例提供一种TLB entry合并方法及一种地址转换方法。

根据本说明书一个或多个实施例的第一方面,提出了一种TLB entry合并方法,所述方法包括:

在已使用的TLB entry中,查找至少一组可合并条目;其中,每组可合并条目包括至少两个TLB entry,每组可合并条目包括的TLB entry存储的物理地址连续且存储的虚拟地址连续;

将每组可合并条目合并成一个复合条目,通过一个TLB entry存储该复合条目,并释放该组可合并条目所占用的TLB entry;其中,该复合条目中至少包括:该组可合并条目中物理地址最小的内存页的虚拟地址和物理地址的对应关系、条目类型和页数,所述条目类型为复合类型,所述页数为该组可合并条目对应的内存页的数量。

根据本说明书一个或多个实施例的第二方面,提出了一种地址转换方法,用于基于前述的TLB entry合并方法所合并的TLB进行虚拟地址和物理地址之间的转换;所述方法包括:

接收地址转换请求;

针对每一条目类型为复合类型的TLB entry,根据该TLB entry存储的虚拟地址和物理地址的对应关系和页数,得到该TLB entry对应的映射集合;其中,所述映射集合中包括该TLB entry对应的所有内存页的物理地址和虚拟地址之间的对应关系;

将所述地址转换请求中的虚拟地址与每一映射集合的所有虚拟地址进行比对,得到所述地址转换请求中的虚拟地址对应的物理地址,将得到的物理地址作为所述地址转换请求的响应。

根据本说明书实施例的第三方面,提供一种TLB entry合并装置,所述装置包括:

可合并条目查找模块,用于在已使用的TLB entry中,查找至少一组可合并条目;其中,每组可合并条目包括至少两个TLB entry,每组可合并条目包括的TLB entry存储的物理地址连续且存储的虚拟地址连续;

条目合并模块,用于将每组可合并条目合并成一个复合条目,通过一个TLB entry存储该复合条目,并释放该组可合并条目所占用的TLB entry;其中,该复合条目中至少包括:该组可合并条目中物理地址最小的内存页的虚拟地址和物理地址的对应关系、条目类型和页数,所述条目类型为复合类型,所述页数为该组可合并条目对应的内存页的数量。

根据本说明书实施例的第四方面,提供一种地址转换装置,用于基于前述的TLBentry合并方法所合并的TLB进行虚拟地址和物理地址之间的转换;所述装置包括:

请求接收模块,用于接收地址转换请求;

映射集合获取模块,用于针对每一条目类型为复合类型的TLB entry,根据该TLBentry存储的虚拟地址和物理地址的对应关系和页数,得到该TLB entry对应的映射集合;其中,所述映射集合中包括该TLB entry对应的所有内存页的物理地址和虚拟地址之间的对应关系;

比对模块,用于将所述地址转换请求中的虚拟地址与每一映射集合的所有虚拟地址进行比对,得到所述地址转换请求中的虚拟地址对应的物理地址,将得到的物理地址作为所述地址转换请求的响应。

本说明书提供一种TLB entry合并方法及一种地址转换方法。在已使用的TLBentry中,查找至少一组可合并条目;其中,每组可合并条目包括至少两个TLB entry,每组可合并条目包括的TLB entry存储的物理地址连续且存储的虚拟地址连续;将每组可合并条目合并成一个复合条目,通过一个TLB entry存储该复合条目,并释放该组可合并条目所占用的TLB entry;其中,该复合条目中至少包括:该组可合并条目中物理地址最小的内存页的虚拟地址和物理地址的对应关系、条目类型和页数,所述条目类型为复合类型,所述页数为该组可合并条目对应的内存页的数量。

根据本说明书实施例第五方面,提供一种处理器,至少包括TLB和MMU;所述TLB用于存储内存页的虚拟地址和物理地址的对应关系;所述MMU用于执行前述TLB entry合并方法,或执行前述的地址转换方法。

根据本说明书实施例第六方面,提供一种电子设备,至少包括处理器,所述处理器至少包括TLB和MMU;所述TLB用于存储内存页的虚拟地址和物理地址的对应关系;所述MMU用于执行前述TLB entry合并方法,或执行前述的地址转换方法。

这样,通过合并虚拟地址和物理地址都连续的TLB entry,使得在TLB容量不变的情况下,可以存储更多页的虚拟地址和物理地址之间的对应关系,从而可以通过TLB查找到更多页的虚拟地址和物理地址之间的对应关系,减少了TLB miss的发生,提升了MMU的处理效率,进一步提升了软件的性能。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。

图1A是本说明书示出的相关技术中在页表中查找地址映射关系的示意图。

图1B是本说明书示出的相关技术中在TLB中查找地址映射关系的示意图。

图1C是本说明书示出的TLB存储一组物理地址连续虚拟地址连续的内存页的示意图。

图2是本说明书根据一示例性实施例示出的一种TLB entry合并方法的流程图。

图3A是本说明书根据一示例性实施例示出的步骤201的示意图。

图3B是本说明书根据一示例性实施例示出的步骤203的示意图。

图4是本说明书根据一示例性实施例示出的一种地址转换方法的流程图。

图5是本说明书根据一示例性实施例示出的一种TLB entry合并装置的框图。

图6是本说明书根据一示例性实施例示出的一种地址转换装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。

虚拟地址是软件寻址内存时所用的地址,而物理地址是内存控制器访问实际内存时所用地址。在软件需要访问存储空间的数据时,由于软件只知道虚拟地址,所以CPU需要将虚拟地址转换成物理地址才能完成软件对存储空间数据的正常访问。

在CPU内部,负责进行虚拟地址到物理地址转换的一般是MMU,MMU是一种位于CPU内部的协处理器,可以通过页表(Page Table)将虚拟地址转换成物理地址,并将转换过内存页的虚拟地址和物理地址之间的对应关系存放在TLB内,避免下次重复转换,从而提高内存的寻址效率。其中,TLB是一种以内存页或巨页为粒度存储虚拟地址和物理地址之间对应关系的硬件缓存,位于CPU的核(core)中,提供快速的虚拟地址和物理地址之间对应关系的查找能力,属于一种昂贵的资源,TLB按照访问速度分为L1 TLB和L2 TLB,L1 TLB比L2TLB访问速度更快,但是L1 TLB价格比L2 TLB价格更高,其数量比L2 TLB的数量更少。

MMU管理内存的最小单元为内存页,也就是说,每次为软件分配存储空间,不论软件需要多大的存储空间,都会分配整数倍的内存页(即以内存页为单位进行存储空间的分配)。对于单个内存页来说,该内存页内各个字节的虚拟地址连续,且物理地址也连续,所以页表和TLB内可以通过存储每个页的首个字节的虚拟地址和物理地址的对应关系以供MMU查找进行物理地址和虚拟地址之间的转换。需要说明的是,内存页的大小在同一体系架构下一般是固定的,比如x86的内存页为4K,ARM的内存页为64K。

软件在被分配到一块存储空间后,MMU便会将该存储空间所包含内存页的虚拟地址和物理地址之间的对应关系存储至页表中。之所以这时候不直接存储至TLB中,考虑到一是TLB条目的数量有限,二是有些时候虽然为软件分配了一块存储空间,并不代表软件会使用该存储空间,将不立刻使用的存储空间的地址映射关系(虚拟地址和物理地址之间的对应关系)存储至TLB中将浪费TLB的资源。

在需要寻址的情况下,MMU便会先查找TLB,如果在TLB中查找到了需要寻址的虚拟地址对应的物理地址(称之为TLB hit,即TLB命中),则寻址成功,如果在TLB中查找不到(称之为TLB miss),则要去内存的页表中寻找,在页表中查找到了后,将找到的物理地址返回给CPU运行的软件,并将该地址映射关系存储至TLB中。

需要说明的是,页表一般包括多级,在页表中寻址的示意图如图1A所示,需要说明的是,虽然TLB中只画了一个TLB entry,但是这并不表示对本说明书中TLB entry数量的限制。这个过程需要和MMU和CPU外的内存之间通信,这一般需要耗费几百甚至上千个CPU周期(cycles),而如果在TLB中寻址(在TLB中寻址的示意图如图1B所示),则只需要耗费几个至几十个CPU cycles(如果命中L1 TLB,则会耗费几个,如果命中L2 TLB,则会耗费几十个周期),可见,TLB命中率影响了寻址效率,而寻址效率又是影响软件性能的重要因素,即TLB命中率会影响软件性能,TLB命中率越低,软件性能越差。

而TLB由于其复杂的硬件设计(N-way set associative),导致其条目(entry,又称为容量)的数量有限制,例如在有些CPU上,每个物理CPU只有64个L1 TLB entry,以及1536个L2 TLB entry。

在大型应用程序的运行过程中,大型应用程序所需要的内存页较多,导致TLBentry很容易就被消耗完。在TLB entry消耗完后,会发生TLB挤兑,即较少被使用的TLBentry中的数据(地址映射关系及内存页的基本信息)会被强制删除(eviction),即使该TLBentry对应的内存页正在被使用。这种TLB挤兑造成的TLB eviction是导致TLB miss的主要原因,直接导致可观察的应用程序性能下降。

相关技术中为了解决上述问题,一般都是通过巨页(Huge Page)来避免TLB挤兑。具体而言,巨页即比普通的内存页更大的内存页,在x86系统,存在2M,1G的巨页类型。但是使用巨页仍然会造成一些问题:

第一,巨页的大小为静态固定,例如在x86系统中一般为2M,1G,而由于存储空间分配以内存页为单位,如果某个软件仅需要10k的存储空间,如果使用巨页,也会为该软件分配一个巨页,使得存储空间分配不灵活,浪费存储空间。第二,巨页作为一种内存页,其要求巨页对应的存储空间的物理地址连续,在存储的数据较多的情况下,很难找到符合条件的一个巨页进行分配。

可见,相关技术中存在:如何在不提高硬件成本(即不增加TLB entry的数量)的情况下,减少TLB miss的问题。

为了解决上述问题,考虑到虽然page是MMU管理存储空间的最小单元,但是现代操作系统内存管理模块(例如Linux的Buddy系统)方便管理存储空间,一般按照2的幂次方个内存页分组归类进行管理,且每个分组都包括若干个物理地址连续的内存页。这种情况下,如果软件需要分配的空间大于一个分组的大小,那么内存管理模块则会给该软件分配一个至少一个分组。例如,如图1C所示,buddy分配的16K大小缓存(buffer),由4个物理连续的4K内存页(内存页1-4)组成,随后被映射到一个用户A/内核空间的虚拟地址连续的地址上。

因此,TLB中会有很多物理地址连续,虚拟地址也连续,且在同一个地址空间的TLBentry。为了提高TLB命中率,考虑到上述物理地址和虚拟地址都连续的若干个TLB entry可以合并(归并)。可以使MMU(或其他可以访问管理TLB的协处理器)自动检测到TLB中物理地址连续,且虚拟地址也连续的多条TLB entries,将其合并成一个TLB entry,达到TLB空间压缩的效果,释放空闲TLB空间,减少TLB miss rate,从而提高CPU及软件性能。

换言之,本说明书提供一种TLB entry合并方法及一种地址转换方法。在已使用的TLB entry中,查找至少一组可合并条目;其中,每组可合并条目包括至少两个TLB entry,每组可合并条目包括的TLB entry存储的物理地址连续且存储的虚拟地址连续;将每组可合并条目合并成一个复合条目,通过一个TLB entry存储该复合条目,并释放该组可合并条目所占用的TLB entry;其中,该复合条目中至少包括:该组可合并条目中物理地址最小的内存页的虚拟地址和物理地址的对应关系、条目类型和页数,所述条目类型为复合类型,所述页数为该组可合并条目对应的内存页的数量。

这样,通过合并虚拟地址和物理地址都连续的TLB entry,使得在TLB容量不变的情况下,可以存储更多页的虚拟地址和物理地址之间的对应关系,从而可以通过TLB查找到更多页的虚拟地址和物理地址之间的对应关系,减少了TLB miss的发生,提升了MMU的处理效率,进一步提升了软件的性能。

此外,相比于相关技术中使用巨页的方案,本说明书提供的方案无需软件分配一块物理地址连续的巨页,使得地址分配更加灵活,对软件要求更低。本说明书提供的方法只需要通过MMU硬件实现,仅需添加几个逻辑门就能实现(即通过硬件实现),无需提高TLBentry的数量,硬件成本不高。

接下来将对本说明书提供的一种TLB entry合并方法进行详细说明。

首先对TLB entry合并方法的执行主体进行说明,本说明书中示出的TLB entry合并方法可以应用于MMU,也可以应用于其他的CPU内部的可以管理内存并通过TLB实现虚拟地址和物理地址之间转换的组件。需要注意的是,本说明书的方法不论应用于什么组件,该组件都是CPU内部的用于管理内存,并具有通过TLB进行虚拟地址和物理地址转换能力的组件。

接下来将对本说明书示出的TLB entry合并方法的具体步骤进行说明。如图2所示,图2是本说明书根据一具体实施例示出的一种TLB entry合并方法,包括以下步骤:

步骤201,在已使用的TLB entry中,查找至少一组可合并条目。

其中,每组可合并条目包括至少两个TLB entry,每组可合并条目包括的TLBentry存储的物理地址连续且存储的虚拟地址连续。还需要说明的是,每组可合并条目的各个TLB entry属于同一个地址空间,即各个TLB entry的PCID相同。

换言之,该步骤中在TLB中查找到了若干组可以合并节省TLB空间的条目。可合并条目的示意图如图3A所示,图片左侧TLB中存在4个TLB entry,这四个TLB entry虚拟地址连续且物理地址连续(如图右边中虚拟地址空间和物理地址空间中所示),这样这些TLBentry组成了一组可合并条目。

接下来首先TLB entry的存储结构进行说明。相比于相关技术,本说明书中为了使得TLB entry中的内容可以正常被读取,更改了所有TLB entry的存储结构,为每个TLBentry增加了条目类型和页数。

其中,条目类型用于区分已合并的条目和未合并的条目,包括单页类型(即未合并的条目)和复合(compound)类型(即合并的条目)。单页类型对应于单个内存页,存储的地址映射关系用于表征单个内存页的地址映射关系;复合类型对应于多个内存页,存储的地址和映射关系和页数用于表征多个内存页的地址映射关系。

对于页数来说,其只对于复合类型的TLB entry是有效值,单页类型的TLB entry的页数是无效值。复合类型的TLB entry(即复合条目)的页数用于表征该复合类型对应的内存页的个数,即合并该复合条目的过程中所涉及的单页类型的TLB entry的数量(在只通过单页类型的TLB entry进行合并的情况下)。

此外,和相关技术中相同的是,每条TLB entry中除了包括地址映射关系、页数及条目类型之外,还可以包括进程上下文标识符(process context identifier,PCID,又称之为进程ID,ASID–Address Space Identifier)和页类型(Memory Type)。PCID用于表征存储的虚拟地址所在的地址空间,页类型用于表征存储的地址映射关系对应的页的大小(是否是巨页,以及页的大小)。在存在这两者的情况下,这两者使得在合并过程中存在一些限制,具体的限制将在后文进行说明,在此暂不赘述。当然除了上述内容,每个TLB entry中还可以包括其他用于表征内存页基本信息的内容。

接下来将对步骤201中涉及的各个名词进行说明。首先,一个TLB entry也就是TLB中包括的一条可以存储一组物理地址和虚拟地址之间对应关系的条目,可合并条目也就是虚拟地址连续且物理地址连续的若干个TLB entry。已使用的TLB entry也就是已经存储有地址映射关系的TLB entry。

其次,接下来将对上文中的连续的含义进行说明。由于TLB entry存储的地址映射关系是内存页首个字节的地址映射关系,物理地址连续、虚拟地址连续中的连续并不指的是两个物理地址连续或两个虚拟地址在字节上连续,而是指的是该物理地址对应内存页的物理地址是连续的,该虚拟地址对应的内存页的虚拟地址是连续的。

在对步骤201中涉及的各个名词进行说明后,接下来将对步骤201的具体如何查找可合并条目进行说明。

首先,可以先对TLB entry按照物理地址进行排序,这样就很好发现物理地址连续且虚拟地址也连续的TLB entry。

换言之,步骤201包括:将各个已使用的TLB entry中的物理地址的进行排序;根据排序后的物理地址,选择一组物理地址连续且虚拟地址连续的TLB entry作为一组可合并条目。

其次,还可以针对每个TLB entry,遍历TLB,查找与该TLB entry存储的映射关系连续(即物理地址连续且虚拟地址连续)的TLB entry,将查找到的TLB entry和所针对的TLB entry按照物理地址从小到大组成一个集合。再次遍历TLB查找与该集合对应的映射关系连续的TLB entry,并将查找到的TLB entry按照物理地址的大小关系增加至该集合中。再次遍历TLB重复上述操作,直至查找不到与该集合映射关系连续的TLB entry。

在对步骤201中的具体实现方式进行说明后,接下来将对步骤201在不同情况下的具体实现方式以及所存在的限制进行说明。

首先,对于步骤201的执行时机而言,为了可以尽可能的缩减TLB的空间,降低TLBmiss rate,该步骤可以周期性执行。换言之,步骤201包括:在到达指定周期的情况下,在已使用的TLB entry中,查找至少一组可合并条目。

对于步骤201的执行时机而言,考虑到减少MMU或其他执行主体运行步骤201的消耗,该步骤还可以在TLB拥挤的情况下执行;换言之,步骤201包括:在已使用TLB entry的数量满足预设的拥挤条件的情况下,在已使用的TLB entry中,查找至少一组可合并条目。

其中,预设的拥挤条件,指的是可以表征TLB entry拥挤(即剩余的TLB entry不多)的条件,比如可以是已使用的TLB entry数量与所有TLB entry数量的比值大于预设阈值,也可以是未使用的TLB entry的数量小于预设阈值/已使用的TLB entry的数量大于预设阈值,当然预设的拥挤条件不限于此,只要能表征TLB entry拥挤的条件,都可以作为本说明书中的预设的拥挤条件。

其次,有些情况下,TLB中包括两种不同处理速度的TLB entry,比如L1 entry和L2entry(L1 entry和L2 entry的说明详见上文)。这种情况下,考虑到虽然两种TLB entry处理速度不同,但是其存储结构都是相同,因此可以跨两种TLB entry来寻找可合并条目,这样可以使得TLB中存储更多内存页的地址映射关系。

换言之,所述TLB entry包括第一TLB entry和第二TLB entry,第一TLB entry的处理速度比第二TLB entry的处理速度快。步骤201包括:在所有已使用的TLB entry中,查找至少一组可合并条目;其中,每组可合并条目包括:至少一个第一TLB entry和至少一个第二TLB entry,或至少两个第一TLB entry,或至少两个第二TLB entry。

此外,TLB中可以存储指令(instruction)对应的地址映射关系,也可以存储数据(data)对应的地址映射关系,由于指令和数据一般虚拟地址不连续或者不在同一地址空间,因此,在TLB entry中既存储指令对应的地址映射关系,又存储了数据对应的地址映射关系的情况下,不可以在两者之间查找可合并条目。这样,在data对应的TLB entry中查找可合并条目,并在instruction对应的LTB entry中查找可合并条目,使得查找范围变小,提升了查找效率。

换言之,步骤201包括:在已使用的TLB entry中,查找至少一组可合并条目,其中,每组可合并条目包括至少两个TLB entry;所述至少两个TLB entry是指令条目,所述指令条目中存储有指令对应的虚拟地址和物理地址之间对应关系;或者,所述至少两个TLBentry是数据条目,所述数据条目中存储有数据对应的虚拟地址和物理地址之间对应关系。

还需要说明的是,L1 TLB entry和L2 TLB entry是TLB entry本身的物理特性,而data和instruction指的是LTB entry中存储的映射关系对应的不同数据。其中,在存在L1TLB entry和L2 TLB entry,且LTB中既存储了data对应的地址映射关系,又存储了instruction对应的地址映射关系的情况下,data对应的地址映射关系既可以存储在L1TLB entry中,也可以存储在L2 TLB entry中;相似的,instruction对应的地址映射关系既可以存储在L1 TLB entry中,也可以存储在L2 TLB entry中。

以及,对于区分data和instruction对应的TLB entry来说,可以将data和instruction对应的TLB entry存储在不同位置,从而区分两种TLB entry,也可以在TLBentry中记录该内容。

最后,在TLB entry中还包括PCID的情况下,由于每个TLB entry只能记录一个PCID,即使不同PCID对应的TLB entry中存在物理地址和虚拟地址都连续的TLB entry,也不能跨PCID进行合并。

相似的,在TLB entry中还包括了页类型的情况下,由于每个TLB entry只能记录一个页类型,即使不同页类型的TLB entry中存在物理地址和虚拟地址都连续的TLBentry,也不能跨页类型进行合并。

在对步骤201进行说明后,还需要对步骤201这样执行的原因进行说明。之所以可合并条目需要物理地址和虚拟地址都连续,原因同内存页需要物理地址和虚拟地址连续的原因相似,都是为了保证通过TLB来进行地址转换的准确性。如果可合并条目物理地址不连续或者虚拟地址不连续,将可能导致通过TLB进行转换时,找到的物理地址不准确。

此外,还需要说明的是,步骤201中查找可合并条目,可以在只在单页类型的TLBentry中进行查找,这样计算的更快;步骤201中查找可合并条目,也可以在单页类型和复合类型的TLB中进行查找,这样能使得TLB表征更多的内存页的地址映射关系。

步骤203,将每组可合并条目合并成一个复合条目,通过一个TLB entry存储该复合条目,并释放该组可合并条目所占用的TLB entry。

其中,该复合条目中至少包括:该组可合并条目中物理地址最小的内存页的虚拟地址和物理地址的对应关系、条目类型和页数,所述条目类型为复合类型,所述页数为该组可合并条目对应的内存页的数量。

换言之,将可合并条目合并成一个复合条目进行存储,通过一个TLB entry来表征多个内存页的地址映射关系。

首先对步骤203中涉及的名词进行说明。

复合条目即上文中提及的条目类型为复合类型的条目,复合条目中包括的内容在上文中已进行说明在此不再赘述。和图3A相对应,图3B示出了一个复合条目,其是通过图3A中示出的可合并条目合并得到的。

其中,可合并条目对应的内存页的数量,即该复合条目可以表征的内存页的数量。其具体的计算方法具体而言,只在单页类型的TLB entry中查找可合并条目的情况下,为了加快计算速度,可以将可合并条目包括的TLB entry数量作为复合条目的页数。在单页类型的TLB entry和复合类型的TLB entry中查找的情况下,可以将单页类型的TLB entry的数量,加上复合类型的TLB entry的页数和,作为上述复合条目的页数。

其次,步骤203涉及的各个动词的含义如下。合并指的是,将多个TLB entry中存储的地址映射关系放到一个TLB entry中。合并过程中需要先生成复合条目,并通过一个TLBentry对复合条目进行存储,并删除原本的可合并条目所占用的TLB entry(即释放该组可合并条目所占用的TLB entry)。需要说明的是,复合条目所占用的TLB entry可以是可合并条目所占用的TLB entry中的一个,也就是说,可以通过更改可合并条目所占用的TLBentry的内容来完成上述过程。

此外,由于查找复合类型的TLB entry的时间会比查找单页类型的TLB entry的时间更长(具体的时间更长的原因详见后文描述),且复合类型的TLB entry由于包含多个内存页的地址转换关系,其命中率比单页类型的TLB entry的命中率更高,所以为了尽可能的提高寻址速度,可以将复合条目优先存储在速度更快的TLB entry中,比如L1 TLB entry。

换言之,所述TLB entry包括第一TLB entry和第二TLB entry,第一TLB entry的处理速度比第二TLB entry的处理速度快。步骤203包括:将每组可合并条目合并成一个复合条目;在存在未使用的第一TLB entry时,将该复合条目存储至一个第一TLB entry中;在不存在未使用的第一TLB entry时,将该复合条目存储至一个第二TLB entry中。

其中上述的第一TLB entry和第二TLB entry可以是上文的L1 TLB entry和L2TLB entry,当然也可以是其他的具有上述特点的TLB entry。

在对TLB entry的合并方法进行详细说明后,下面还将对复合条目对应的任一内存页被释放的情况怎么处理进行说明。具体而言,如果复合条目对应的任一内存页被释放(也就是软件不再占用该内存页),这时需要解除虚拟地址和物理地址之间的对应关系,那么为了保证TLB寻址的准确性,也需要对该复合条目进行处理。

具体的处理方法可以是:在未使用的TLB entry数量(也就是未写入内容的TLBentry)比较多的情况下,可以将复合条目打散成多个TLB entry(也就是将原本的复合条目删除,把打散成的LTB entry进行存储)。具体的打散方法可以是把该复合条目打散成多个单页类型的TLB entry,此外,为了提高TLB命中率,还可以在可以打散成至少一个复合条目的情况下,将复合条目打散成至少一个复合条目。如果TLB拥挤,那么可以直接将该复合条目删除。

针对上述打散的方法举例来说,在复合条目对应于内存页1-4的情况下,如果内存页3被释放,如果TLB不拥挤,那么可以将该复合条目打散成三个单页类型的TLB entry,这三个TLB entry分别存储了内存页1、内存页2和内存页4的地址映射关系;也可以将该复合条目打散成:一个对应于内存页1和2的复合条目,和一个对应于内存页4的单页类型的TLBentry。

换言之,所述方法还包括:在复合条目对应的任一内存页被释放的情况下,判断已使用TLB entry的数量是否满足预设的空余条件;在已使用TLB entry的数量满足预设的空余条件的情况下,将该复合条目拆分成若干TLB entry;其中,拆分成的TLB entry中不存储被释放的内存页的虚拟地址和物理地址之间的对应关系;在已使用TLB entry的数量不满足预设的空余条件的情况下,释放该复合条目所占用的TLB entry。

其中,预设的空余条件表示TLB中空余较多的TLB entry,预设的空余条件可以是已使用TLB entry数量与所有TLB entry数量的比值小于预设阈值,也可以是已使用TLBentry的数量小于预设阈值,当然也可以是其他条件,只要能表示TLB entry不拥挤的条件,都可以作为本说明书中的空余条件。

上述方法中,通过CPU硬件上的改进(更改MMU或其他组件的运行逻辑、更改TLB的存储结构等),压缩TLB的空间,减少TLB Miss,提高CPU及应用程序性能。通过本方案,可极大的缓解TLB拥挤时造成的挤兑和TLB eviction。

具体而言,本说明书中提供的TLB entry合并方法通过动态MMU硬件TLB自扫描(即步骤201),可发现任意数量的物理及虚拟地址连续的TLB entry,并将其合并,使得同样数量的TLB entry可以表征更多内存页的地址映射关系。本方案通过归并连续的TLB entry,起到了TLB空间的压缩效果,可释放更多的空闲TLB entry,提高应用程序的TLB hit rate,提高大型应用程序性能。此外,无需增加TLB的容量,硬件成本低。以及本申请无需操作系统软件上的更改,换言之,上述过程对于操作系统而言是无感知的,相比于在操作系统或其他软件上更改,本方案由于更改的是硬件,性能提升更加明显。且相比于软件分配巨页,本说明书提供的方法更加灵活,对操作系统及其他软件更友好。

本说明书中提供的TLB entry合并方法中对TLB entry进行了合并,由于原先通过TLB进行地址转换时,只需要将转换的虚拟地址与TLB中存储的每个虚拟地址进行比对,在和转换的虚拟地址相同时,将该相同的虚拟地址对应的物理地址作为转换得到的物理地址。而目前,由于对于复合类型的条目而言,其只存储了复合类型对应的多个内存页的物理地址最小的内存页的地址映射关系,这使得不能将转换的虚拟地址和所有的内存页的(TLB对应的所有内存页)的虚拟地址进行比对,这使得在进行地址转换时的方法也发生了变化。

具体而言,本说明书还提供了一种地址转换方法,用于基于前述的TLB entry合并方法所合并的TLB进行虚拟地址和物理地址之间的转换。如图4所示,该方法包括以下步骤:

步骤401,接收地址转换请求。

首先需要说明的是,该方法同上述TLB entry合并方法相似,用于进行虚拟地址到物理地址转换的协处理器,比如MMU。

其次,该地址转换请求是操作系统或操作系统上运行的软件通过CPU发送给MMU的。

地址转换请求中至少包括需要转换的虚拟地址,地址转换请求用于使得MMU将需要转换的虚拟地址转换成物理地址。

步骤403,针对每一条目类型为复合类型的TLB entry,根据该TLB entry存储的虚拟地址和物理地址的对应关系和页数,得到该TLB entry对应的映射集合。

其中,所述映射集合中包括该TLB entry对应的所有内存页的物理地址和虚拟地址之间的对应关系。

换言之,需要得到复合条目对应的所有内存页的物理地址和虚拟地址之间的对应关系,或对应关系的范围。即映射集合可以包括各个内存页的地址映射关系,也可以包括的是各个内存页地址映射关系的范围。

例如,假设一个复合条目对应于内存页1-4,映射集合可以包括内存页1的地址映射关系、内存页2的地址映射关系、内存页3的地址映射关系和内存页4的地址映射关系;或者,映射集合也可以包括内存页1的地址映射关系和内存页4的地址映射关系。

步骤405,将所述地址转换请求中的虚拟地址与每一映射集合的所有虚拟地址进行比对,得到所述地址转换请求中的虚拟地址对应的物理地址,将得到的物理地址作为所述地址转换请求的响应。

具体而言,如果是上文中的第一种映射集合,可以将需要转换的虚拟地址和映射集合的所有虚拟地址进行比对,将和需要转换的虚拟地址相同的地址映射关系中的物理地址作为相应。如果是上文第二种映射集合,可以针对每一个映射集合,判断需要转换的虚拟地址是否在该映射集合的两个虚拟地址之间,如果在,则根据映射集合计算出转换的虚拟地址对应的物理地址。

此外,对于单页类型的TLB entry而言,其寻址方法和相关技术中相同,在此不再赘述。

上述方法中,虽然在查找过程中,需要多做一些计算,但是多做一些计算并不会耗费很多时间,只会耗费几个CPU周期,换言之,如果通过上述方法在TLB中进行寻址,总共耗费的时间仍然是几个CPU周期。这相比于在页表中进行寻址需要耗费的几百甚至上千个周期而言,上述方法所耗费的时间并不多。换言之,本申请上述方法能提升TLB命中率,虽然在寻址过程中需要耗费更多的CPU周期,但是所耗费的时间仍然比TLB miss时所耗费的时间要少,仍然提升了软件性能。

与前述TLB entry合并方法、地址转换方法的实施例相对应,本说明书还提供了TLB entry合并装置、地址转换装置的实施例。

如图5所示,图5是本说明书根据一示例性实施例示出的一种TLB entry合并装置的框图,所述装置包括:

可合并条目查找模块510,用于在已使用的TLB entry中,查找至少一组可合并条目;其中,每组可合并条目包括至少两个TLB entry,每组可合并条目包括的TLB entry存储的物理地址连续且存储的虚拟地址连续。

条目合并模块520,用于将每组可合并条目合并成一个复合条目,通过一个TLBentry存储该复合条目,并释放该组可合并条目所占用的TLB entry;其中,该复合条目中至少包括:该组可合并条目中物理地址最小的内存页的虚拟地址和物理地址的对应关系、条目类型和页数,所述条目类型为复合类型,所述页数为该组可合并条目对应的内存页的数量。

其中,所述TLB entry包括第一TLB entry和第二TLB entry,第一TLB entry的处理速度比第二TLB entry的处理速度快;这种情况下,可合并条目查找模块510具体用于:在所有已使用的TLB entry中,查找至少一组可合并条目;其中,每组可合并条目包括:至少一个第一TLB entry和至少一个第二TLB entry,或至少两个第一TLB entry,或至少两个第二TLB entry。

其中,可合并条目查找模块510还具体用于:在已使用的TLB entry中,查找至少一组可合并条目,其中,每组可合并条目包括至少两个TLB entry;所述至少两个TLB entry是指令条目,所述指令条目中存储有指令对应的虚拟地址和物理地址之间对应关系;或者,所述至少两个TLB entry是数据条目,所述数据条目中存储有数据对应的虚拟地址和物理地址之间对应关系。

其中,可合并条目查找模块510还具体用于:在已使用TLB entry的数量满足预设拥挤条件的情况下,在已使用的TLB entry中,查找至少一组可合并条目;或,在到达指定周期的情况下,在已使用的TLB entry中,查找至少一组可合并条目。

其中,可合并条目查找模块510还具体用于:将各个已使用的TLB entry中的物理地址的进行排序;根据排序后的物理地址,选择一组物理地址连续且虚拟地址连续的TLBentry作为一组可合并条目。

其中,所述TLB entry包括第一TLB entry和第二TLB entry,第一TLB entry的处理速度比第二TLB entry的处理速度快;上述情况下,条目合并模块520具体用于:将每组可合并条目合并成一个复合条目;在存在未使用的第一TLB entry时,将该复合条目存储至一个第一TLB entry中;在不存在未使用的第一TLB entry时,将该复合条目存储至一个第二TLB entry中。

此外,上述装置还包括删除模块530,用于:在复合条目对应的任一内存页被释放的情况下,判断已使用TLB entry的数量是否满足预设的空余条件;在已使用TLB entry的数量满足预设的空余条件的情况下,将该复合条目拆分成若干TLB entry;其中,拆分成的TLB entry中不存储被释放的内存页的虚拟地址和物理地址之间的对应关系;在已使用TLBentry的数量不满足预设的空余条件的情况下,释放该复合条目所占用的TLB entry。

如图6所示,图6是本说明书根据一示例性实施例示出的一种地址转换装置的框图,所述装置用于基于前述的TLB entry合并方法所合并的TLB进行虚拟地址和物理地址之间的转换;所述装置包括:

请求接收模块610,用于接收地址转换请求。

映射集合获取模块620,用于针对每一条目类型为复合类型的TLB entry,根据该TLB entry存储的虚拟地址和物理地址的对应关系和页数,得到该TLB entry对应的映射集合;其中,所述映射集合中包括该TLB entry对应的所有内存页的物理地址和虚拟地址之间的对应关系。

比对模块630,用于将所述地址转换请求中的虚拟地址与每一映射集合的所有虚拟地址进行比对,得到所述地址转换请求中的虚拟地址对应的物理地址,将得到的物理地址作为所述地址转换请求的响应。

上述两个装置中各个模块的功能和作用的实现过程具体详见上述两个方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

本说明书还提供一种处理器,包括TLB和MMU;所述TLB用于存储内存页的虚拟地址和物理地址的对应关系;所述MMU用于前述的TLB entry合并方法,和/或执行前述的地址转换方法。

本说明书还提供一种电子设备,至少包括处理器,所述处理器至少包括TLB和MMU;所述TLB用于存储内存页的虚拟地址和物理地址的对应关系;所述MMU用于执行前述TLBentry合并方法,或执行前述的地址转换方法。

其中,上述处理器可以是中央处理器,也可以是其他需要进行地址转换的处理器,本说明书对于处理器的形式不作限定。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

相关技术
  • 一种TLB entry合并方法及一种地址转换方法
  • 一种地址转换方法及实现该方法的混合地址转换路由器
技术分类

06120114690566