用于芯片存储访问的内存管理方法和装置
技术领域
本发明涉及内存管理技术领域,特别是涉及一种用于芯片存储访问的内存管理方法和装置。
背景技术
在主机和芯片的数据传输中,系统内存管理单元SMMU(System MemoryManagement Unit)负责DMA控制器搬运数据过程中,虚拟地址VA(Virtual Address)到物理地址PA(Physical Address)的翻译。
现有技术中,主机CPU将数据页表搬运到芯片存储中,并配置SMMU控制寄存器,包括使能SMMU和页表在芯片存储中的地址等;当DMA控制器需要访问芯片存储时,SMMU根据控制寄存器中的信息,从芯片存储中读取页表,并根据读取的页表对DMA访存请求中的访存虚拟地址进行地址翻译。
但是,这种方法存在一些缺点:
其一,当多个DMA请求任务同时进行时,SMMU需要在接收到后续的DMA访存请求后,才去芯片存储中读取页表,使得多个DMA访存请求无法连续完成;
其二,当单个DMA请求任务执行过程中,SMMU在接收到后续的DMA请求的访存地址后,才为该DMA访存请求读取页表,使得单个DMA请求任务出现停顿。
因此,现有方案在DMA访存请求的任务执行过程中,会导致SMMU因为页表缺失而造成性能损失,影响了主机和芯片间数据搬运的效率。
发明内容
为了解决上述问题,根据本发明的一方面,提出一种多级页表缓冲单元,包括:主页表缓冲单元、分别耦接至所述主页表缓冲单元的读请求子页表缓冲单元和写请求子页表缓冲单元;
其中,主页表缓冲单元用于存储DMA读写请求所需要的页表数据;读请求子页表缓冲单元用于存储DMA读请求所需要的页表数据;写请求子页表缓冲单元用于存储DMA写请求所需要的页表数据;所述读请求子页表缓冲单元和写请求子页表缓冲单元共享所述主页表缓冲单元的页表数据。
根据本发明的另一方面,提出一种内存管理方法,包括:
步骤S11,根据DMA访存请求的类型在对应的子页表缓冲单元中查找该请求需要的页表;
步骤S12,如果该请求需要的页表在对应的子页表缓冲单元中命中,则根据读取的页表对所述DMA访存请求的虚拟地址进行翻译;
步骤S13,如果该请求需要的页表在对应的子页表缓冲单元中没有命中,则去主页表缓冲单元中查找该请求需要的页表;
步骤S14,如果该请求需要的页表在主页表缓冲单元中命中,则根据读取的页表对所述DMA访存请求的虚拟地址进行翻译;
步骤S15,如果该请求需要的页表在主页表缓冲单元中没有命中,则去芯片存储中读取页表,保存在主页表缓冲单元和对应的子页表缓冲单元中,并根据读取的页表对所述DMA访存请求的虚拟地址进行翻译。
在一些实施方式中,所述根据DMA访存请求的类型在对应的子页表缓冲单元中查找该请求需要的页表包括:
如果所述DMA访存请求是读请求,则去读请求子页表缓冲单元中查找该请求需要的页表;如果所述DMA访存请求是写请求,则去写请求子页表缓冲单元中查找该请求需要的页表。
根据本发明的另一方面,提出一种内存管理方法,包括:
步骤S21,在当前DMA访存请求被系统内存管理单元处理之前,预先查找页表缓冲单元中是否存在该请求需要的页表,如果不存在,则从芯片存储中预取该请求需要的页表,保存到页表缓冲单元中;
步骤S22,为当前DMA访存请求一次预取页表缓冲单元中的多项页表,所述多项页表包含当前DMA访存请求和后续DMA访存请求所需要的页表;
步骤S23,当系统内存管理单元开始访问所述多项页表中最后若干个页表时,开始为后续的DMA访存请求预取页表缓冲单元中的多项页表。
在一些实施方式中,所述步骤S21包括当DMA访存请求开始进入系统内存管理单元的请求队列时,预先查找页表缓冲单元是否存在该请求需要的页表。
在一些实施方式中,所述页表缓冲单元中的每个页表项包括多项页表,所述步骤S22为当前DMA访存请求一次预取页表缓冲单元中的多项页表包括:为当前DMA访存请求一次预取页表缓冲单元中的一个页表项。
在一些实施方式中,所述步骤S23包括:当系统内存管理单元开始访问所述页表项中最后若干个页表时,开始为后续的DMA访存请求预取页表缓冲单元中的下一页表项。
在一些实施方式中,所述页表缓冲单元包括如前述实施例所述的多级页表缓冲单元。
根据本发明的另一方面,提出一种内存管理装置,包括如下模块:
第一页表查找模块,用于根据DMA访存请求的类型在对应的子页表缓冲单元中查找该请求需要的页表;
第二页表查找模块,用于在该请求需要的页表在对应的子页表缓冲单元中没有命中时,去主页表缓冲单元中查找该请求需要的页表;
页表读取更新模块,用于在该请求需要的页表在主页表缓冲单元中没有命中时,去芯片存储中读取页表,并保存在主页表缓冲单元和对应的子页表缓冲单元中;
地址翻译模块,用于根据读取的页表对所述DMA访存请求的虚拟地址进行翻译。
在一些实施方式中,所述根据DMA访存请求的类型在对应的子页表缓冲单元中查找该请求需要的页表包括:如果所述DMA访存请求是读请求,则去读请求子页表缓冲单元中查找该请求需要的页表;如果所述DMA访存请求是写请求,则去写请求子页表缓冲单元中查找该请求需要的页表。
根据本发明的另一方面,提出一种内存管理装置,包括如下模块:
第一预取模块,用于在当前DMA访存请求被系统内存管理单元处理之前,预先查找页表缓冲单元中是否存在该请求需要的页表,如果不存在,则从芯片存储中预取该请求需要的页表,保存到页表缓冲单元中;
第二预取模块,用于为当前DMA访存请求一次预取页表缓冲单元中的多项页表,所述多项页表包含当前DMA访存请求和后续DMA访存请求所需要的页表;
第三预取模块,用于当系统内存管理单元开始访问所述多项页表中最后若干个页表时,开始为后续的DMA访存请求预取页表缓冲单元中的多项页表。
在一些实施方式中,所述第一预取模块在当前DMA访存请求被系统内存管理单元处理之前,预先查找页表缓冲单元中是否存在该请求需要的页表包括:在DMA访存请求开始进入系统内存管理单元的请求队列时,预先查找页表缓冲单元是否存在该请求需要的页表。
在一些实施方式中,所述页表缓冲单元中的每个页表项包括多项页表,所述第二预取模块为当前DMA访存请求一次预取页表缓冲单元中的多项页表包括:为当前DMA访存请求一次预取页表缓冲单元中的一个页表项。
在一些实施方式中,所述第三预取模块还用于当系统内存管理单元开始访问所述页表项中最后若干个页表时,开始为后续的DMA访存请求预取页表缓冲单元中的下一页表项。
在一些实施方式中,所述页表缓冲单元包括如权利要求1所述多级页表缓冲单元。
根据本发明的另一方面,提出一种系统内存管理单元,包括如前述实施例所述的多级页表缓冲单元。
根据本发明的另一方面,提出一种系统内存管理单元,包括如前述实施例所述的内存管理装置。
根据本发明的另一方面,提出一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行以实现如前述实施例所述的内存管理方法的步骤。
根据本发明的另一方面,提出一种计算机设备,其包括存储器和处理器,所述存储器上存储有可在处理器上运行的计算机程序,所述处理器执行所述计算程序以实现如前述实施例所述的内存管理方法的步骤。
本发明实施例的内存管理方法和装置采用基于多级页表缓冲单元的分级页表查找机制,提供三个层次的页表预取机制,有效地加快了DMA访存请求的地址翻译过程中页表的读取速度,减少了系统内存管理单元SMMU因为页表未命中造成的性能损失。
附图说明
图1是根据本发明一实施例的多级页表缓冲单元的结构示意图;
图2是根据本发明一实施例的多级页表缓冲单元的数据结构示意图;
图3是根据本发明一实施例的内存管理方法的流程图;
图4是根据本发明另一实施例的内存管理方法的流程图;
图5是根据本发明一实施例的系统内存管理单元的结构示意图;
图6是根据本发明一实施例的内存管理装置的结构示意图;
图7是根据本发明另一实施例的内存管理装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进行清楚、完整地说明。为了便于说明本发明实施例,本发明附图中仅示出用于说明本发明目的的必要部件。
图1是根据本发明一实施例的多级页表缓冲单元的结构示意图。如图1所示,本发明实施例在系统内存管理单元SMMU中构建多级页表缓冲单元10,该多级页表缓冲单元10包括主页表缓冲单元11以及读请求子页表缓冲单元12和写请求子页表缓冲单元13。其中,读请求子页表缓冲单元12和写请求子页表缓冲单元13作为一级页表缓冲单元,分别为访问芯片存储的DMA读请求和写请求提供页表缓冲查找,二者共享主页表缓冲单元11中的页表数据。主页表缓冲单元11作为二级页表缓冲单元,其同时包含读请求和写请求所需要的页表数据。
图2是根据本发明一实施例的多级页表缓冲单元的数据结构示意图。如图2所示,主页表缓冲单元11用于存储访问芯片存储的DMA读写请求所需要的页表数据,该页表数据包括访存请求的虚拟地址111和对应的请求数据的物理地址112。读请求子页表缓冲单元12用于存储访问芯片存储的DMA读请求所需要的页表数据,该页表数据包括读请求的虚拟地址121和对应的请求数据的物理地址122。写请求子页表缓冲单元13用于存储访问芯片存储的DMA写请求所需要的页表数据,该页表数据包括写请求的虚拟地址131和对应的请求数据的物理地址132。系统内存管理单元SMMU在接收到访问芯片存储的DMA访存请求时,根据上述多级页表缓冲单元中的页表数据对DMA访存请求中的虚拟地址进行翻译,将虚拟地址翻译为芯片存储中数据的物理地址,从而实现对芯片存储中数据的直接存取访问。
图3是根据本发明一实施例的内存管理方法的流程图。如图3所示,本发明实施例的内存管理方法,应用于系统内存管理单元,包括如下步骤:
步骤S11,根据DMA访存请求的类型在对应的子页表缓冲单元中查找该请求需要的页表;
步骤S12,如果该请求需要的页表在对应的子页表缓冲单元中命中,则根据读取的页表对所述DMA访存请求的虚拟地址进行翻译;
步骤S13,如果该请求需要的页表在对应的子页表缓冲单元中没有命中,则去主页表缓冲单元中查找该请求需要的页表;
步骤S14,如果该请求需要的页表在主页表缓冲单元中命中,则根据读取的页表对所述DMA访存请求的虚拟地址进行翻译;
步骤S15,如果该请求需要的页表在主页表缓冲单元中没有命中,则去芯片存储中读取页表,保存在主页表缓冲单元和对应的子页表缓冲单元中,并根据读取的页表对所述DMA访存请求的虚拟地址进行翻译。
上述步骤S11中,根据所述DMA访存请求的类型在对应的子页表缓冲单元中查找该请求需要的页表包括:
如果所述DMA访存请求是读请求,则去读请求子页表缓冲单元中查找该请求需要的页表;
如果所述DMA访存请求是写请求,则去写请求子页表缓冲单元中查找该请求需要的页表。
本发明实施例的内存管理方法采用基于多级页表缓冲单元的分级页表查找机制,首先根据DMA访存请求的类型优先在子页表缓冲单元中查找,其次在主页表缓冲单元中查找,这种分级页表查找的方式有效地加快了页表的读取速度,减少了SMMU因为页表未命中造成的性能损失。
图4是根据本发明另一实施例的内存管理方法的流程图。如图4所示,本发明实施例的内存管理方法,应用于系统内存管理单元,包括如下步骤:
步骤S21,在当前DMA访存请求被系统内存管理单元处理之前,预先查找页表缓冲单元中是否存在该请求需要的页表,如果不存在,则从芯片存储中预取该请求需要的页表,保存到页表缓冲单元中;
步骤S22,为当前DMA访存请求一次预取页表缓冲单元中的多项页表,所述多项页表包含当前DMA访存请求和后续DMA访存请求所需要的页表;
步骤S23,当系统内存管理单元开始访问所述多项页表中最后若干个页表时,开始为后续的DMA访存请求预取页表缓冲单元中的多项页表。
上述步骤S21中,当DMA访存请求开始进入系统内存管理单元的请求队列时,预先查找页表缓冲单元是否存在该请求需要的页表。若页表缓冲单元中没有该请求需要的页表,则开始预取对应的页表到页表缓冲单元中,这相当于第一层次的页表预取。
上述步骤S22中,页表缓冲单元中的每个页表项可以包含多项页表,系统内存管理单元为当前DMA访存请求一次读取一个页表项,即是取得了多项页表,相当于系统内存管理单元每次提前取得后续DMA访存请求所需要的页表。举例来说,假设页表缓冲单元中的每个页表项包含16个页表,当前DMA访存请求需要的是页表0,而系统内存管理单元取得一个页表项,就把页表0~15都预取过来,这样后续DMA访存请求需要用到页表1的时候就不用再去读取了,这相当于第二层次的页表预取。
上述步骤S23中,当系统内存管理单元开始访问所读取的页表项中最后若干个页表时,开始为后续的DMA访存请求预取页表缓冲单元中的下一个页表项,也就是开始为后续的DMA请求任务预取页表,这相当于第三层次的页表预取。
在一些实施方式中,页表缓冲单元可以采用前述实施例中的多级页表缓冲单元10来实现。
本发明实施例的内存管理方法通过页表缓冲单元中页表项的存储模式以及三个层次的页表预取机制,有效地加快了页表的读取速度,减少了SMMU因为页表未命中造成的性能损失。
下面结合图5对图4所示方法进行进一步说明。图5是根据本发明一实施例的系统内存管理单元100的结构示意图。本发明一实施例的系统内存管理单元SMMU包括多级页表缓冲单元10、第一访问接口单元20、请求队列30、页表查找控制单元40、第二访问接口单元50。DMA访存请求通过第一访问接口单元20进入请求队列30,通过页表查找控制单元40在多级页表缓冲单元10里查找是否有该请求所需要的页表。如果有页表,则进行虚拟地址翻译,用页表中数据物理地址信息代替访存请求原始的虚拟地址信息。如果没有页表,则通过第二访问接口单元50从芯片存储200中读取所需要的页表,保存在多级页表缓冲单元10中,并进行虚拟地址翻译。随后,SMMU将完成地址翻译的DMA访存请求通过第二访问接口单元50发送给芯片存储200,进行直接存取访问。
其中,SMMU中采用图4中所述三个层次的页表预取机制,其中第一在DMA访存请求进入请求队列30时开始启动,对多级页表缓冲单元10进行页表预查找,如果多级页表缓冲单元10中没有该请求需要的页表,则通过第二访问接口单元50从芯片存储200中预取所需要的页表,保存在多级页表缓冲单元10中。第二和第三层次的页表预取通过多级页表缓冲单元10中页表项的存储和页表查找控制单元40对页表项的读取来实现。
图6是根据本发明一实施例的内存管理装置300的结构示意图。如图6所示,本发明实施例的内存管理装置300包括如下模块:
第一页表查找模块301,用于根据DMA访存请求的类型在对应的子页表缓冲单元中查找该请求需要的页表;
第二页表查找模块302,用于在该请求需要的页表在对应的子页表缓冲单元中没有命中时,去主页表缓冲单元中查找该请求需要的页表;
页表读取更新模块303,用于在该请求需要的页表在主页表缓冲单元中没有命中时,去芯片存储中读取页表,并保存在主页表缓冲单元和对应的子页表缓冲单元中;
地址翻译模块304,用于根据读取的页表对所述DMA访存请求的虚拟地址进行翻译。
本发明实施例中,所述第一页表查找模块根据DMA访存请求的类型在对应的子页表缓冲单元中查找该请求需要的页表包括:
如果所述DMA访存请求是读请求,则去读请求子页表缓冲单元中查找该请求需要的页表;
如果所述DMA访存请求是写请求,则去写请求子页表缓冲单元中查找该请求需要的页表。
本发明实施例的内存管理装置采用基于多级页表缓冲单元的分级页表查找机制,首先根据DMA访存请求的类型优先在子页表缓冲单元中查找,其次在主页表缓冲单元中查找,这种分级页表查找的方式有效地加快了页表的读取速度,减少了SMMU因为页表未命中造成的性能损失。
图7是根据本发明另一实施例的内存管理装置400的结构示意图。如图7所示,本发明实施例的内存管理装置400包括如下模块:
第一预取模块401,用于在当前DMA访存请求被系统内存管理单元处理之前,预先查找页表缓冲单元中是否存在该请求需要的页表,如果不存在,则从芯片存储中预取该请求需要的页表,保存到页表缓冲单元中;
第二预取模块402,用于为当前DMA访存请求一次预取页表缓冲单元中的多项页表,所述多项页表包含当前DMA访存请求和后续DMA访存请求所需要的页表;
第三预取模块403,用于当系统内存管理单元开始访问所述多项页表中最后若干个页表时,开始为后续的DMA访存请求预取页表缓冲单元中的多项页表。
在一些实施方式中,所述第一预取模块401当DMA访存请求开始进入系统内存管理单元的请求队列时,预先查找页表缓冲单元是否存在该请求需要的页表。
在一些实施方式中,页表缓冲单元中的每个页表项可以包含多项页表,第二预取模块402为当前DMA访存请求一次读取一个页表项,即是取得了多项页表,相当于SMMU每次提前取得后续DMA访存请求所需要的页表。
在一些实施方式中,当系统内存管理单元开始访问所读取的页表项中最后若干个页表时,系统内存管理单元开始为后续的DMA访存请求预取页表缓冲单元中的下一个页表项。
在一些实施方式中,页表缓冲单元可以采用前述实施例中的多级页表缓冲单元10来实现。
发明实施例的内存管理方法通过页表缓冲单元中页表项的存储模式以及三个层次的页表预取机制,有效地加快了页表的读取速度,减少了SMMU因为页表未命中造成的性能损失。
根据本发明另一实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行以实现前述任一实施例所述的内存管理方法的步骤。
根据本发明另一实施例,还提供一种计算机设备,其包括存储器和处理器,所述存储器上存储有可在处理器上运行的计算机程序,所述处理器执行所述计算程序以实现前述任一实施例所述的内存管理方法的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。