CN114817081A - 内存访问方法、装置和输入输出内存管理单元 - Google Patents
内存访问方法、装置和输入输出内存管理单元 Download PDFInfo
- Publication number
- CN114817081A CN114817081A CN202210200147.XA CN202210200147A CN114817081A CN 114817081 A CN114817081 A CN 114817081A CN 202210200147 A CN202210200147 A CN 202210200147A CN 114817081 A CN114817081 A CN 114817081A
- Authority
- CN
- China
- Prior art keywords
- address
- cpu core
- iommu
- physical address
- virtual address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0882—Page mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
说明书披露一种内存访问方法、装置和输入输出内存管理单元。该方法包括:IOMMU接收PCI设备发送的内存访问请求,内存访问请求中携带虚拟地址;IOMMU在IOTLB中查找虚拟地址对应的物理地址;在未查找到对应物理地址的情况下,IOMMU广播发送地址探测消息至各CPU核心,地址探测消息中携带虚拟地址;CPU核心响应于地址探测消息,在其TLB中查找虚拟地址对应的物理地址,并在查找到虚拟地址对应的物理地址后,发送地址响应消息给IOMMU,地址响应消息中携带查找到的物理地址;IOMMU接收CPU核心发送的地址响应消息,将物理地址与虚拟地址之间的映射关系存储至其IOTLB中,并基于物理地址进行内存访问。
Description
技术领域
本说明书涉及计算机技术领域,尤其涉及一种内存访问方法、装置和输入输出内存管理单元。
背景技术
CPU(Central Processing Unit,中央处理器)是计算机系统运算和控制核心,是信息处理、程序运行的最终执行单元。CPU可包括一个或多个CPU核心(core),以及非核心(uncore)部分。
CPU核心通常可包括MMU(Memory Management Unit,内存管理单元),MMU可将虚拟地址转换为内存访问所需的物理地址。
非核心部分可包括IOMMU(Input/Output Memory Management Unit,输入输出内存管理单元),IOMMU可用于为PCI(Peripheral Component Interconnect,外设部件互连标准)设备提供地址转换功能,其功能与MMU类似。IOMMU进行地址转换的速率可直接影响内存访问的速率。
发明内容
有鉴于此,本说明书提供一种内存访问方法、装置和输入输出内存管理单元。
具体地,本说明书是通过如下技术方案实现的:
一种内存访问方法,应用于计算机系统,所述计算机系统包括中央处理器CPU,CPU包括CPU核心和输入输出内存管理单元IOMMU,所述方法包括:
IOMMU接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
IOMMU在其输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,IOMMU广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址;
CPU核心响应于所述地址探测消息,在其TLB中查找所述虚拟地址对应的物理地址,并在查找到所述虚拟地址对应的物理地址后,发送地址响应消息给IOMMU,所述地址响应消息中携带查找到的所述物理地址;
IOMMU接收CPU核心发送的所述地址响应消息,将所述物理地址与所述虚拟地址之间的映射关系存储至其IOTLB中,并基于所述物理地址进行内存访问。
可选的,还包括:
IOMMU在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址。
可选的,所述地址探测消息中还携带有地址空间标识,CPU核心在其TLB中查找所述虚拟地址对应的物理地址,包括:
CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系;
CPU核心在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
可选的,所述IOMMU广播发送地址探测消息至各CPU核心,包括:
IOMMU基于缓存探测Snoop协议广播发送地址探测消息至各CPU核心。
一种内存访问方法,用于计算机系统的内存访问,所述计算机系统包括中央处理器CPU,CPU包括CPU核心和输入输出内存管理单元IOMMU,所述方法应用于IOMMU,包括:
接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
在输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址;
接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址;
将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
可选的,还包括:
在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址。
可选的,所述地址探测消息中还携带有地址空间标识,以供CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系,并在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
可选的,所述广播发送地址探测消息至各CPU核心,包括:
基于缓存探测Snoop协议广播发送地址探测消息至各CPU核心。
一种内存访问装置,用于计算机系统的内存访问,所述计算机系统包括中央处理器CPU,CPU包括CPU核心和输入输出内存管理单元IOMMU,所述内存访问装置包括:
请求接收单元,接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
地址查找单元,在输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
地址探测单元,在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址;
响应接收单元,接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址;
内存访问单元,将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
一种输入输出内存管理单元IOMMU,被配置为:
接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
在输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址;
接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址;
将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
一种中央处理器CPU,CPU包括CPU核心和输入输出内存管理单元IOMMU,
其中,IOMMU用于接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
IOMMU在其输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,IOMMU广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址;
CPU核心响应于所述地址探测消息,用于在其TLB中查找所述虚拟地址对应的物理地址,并在查找到所述虚拟地址对应的物理地址后,发送地址响应消息给IOMMU,所述地址响应消息中携带查找到的所述物理地址;
IOMMU接收CPU核心发送的所述地址响应消息,用于将所述物理地址与所述虚拟地址之间的映射关系存储至其IOTLB中,并基于所述物理地址进行内存访问。
一种计算机系统,包括前述中央处理器CPU。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被中央处理器CPU执行时实现前述方法中的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被输入输出内存管理单元IOMMU执行时实现前述方法中的步骤。
采用本说明书提供的上述技术方案,PCI设备在进行内存访问时,IOMMU可充分利用CPU核心的TLB资源,实现CPU核心与IOMMU之间的TLB缓存共享,极大程度了减少了IOMMU进行进程页表查询所带来的额外开销,有效缩短了IOTLB Miss情况下地址转换的耗时,提高了CPU的整体性能和效率。
另一方面,本说明书提供的上述技术方案,基于已有的硬件IOMMU以及缓存一致性协议即可实现,无需新增硬件,成本低,可行性高。
附图说明
图1是本说明书一示例性实施例示出的一种计算机系统示意图。
图2是本说明书一示例性实施例示出的一种内存访问方法的流程示意图。
图3是本说明书一示例性实施例示出的另一种内存访问方法的流程示意图。
图4是本说明书一示例性实施例示出的另一种内存访问方法的流程示意图。
图5是本说明书一示例性实施例示出的一种内存访问装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
目前,计算机系统的IOMMU中通常设置有IOTLB(Input/Output TranslationLookaside Buffer,输入输出旁路转换缓存),PCI设备在基于虚拟地址进行内存访问时,IOMMU可先查询IOTLB,在IOTLB中查询是否缓存有虚拟地址对应的物理地址。若IOTLB中缓存有虚拟地址对应的物理地址(IOTLB Hit),则基于查找到的物理地址进行内存访问。若IOTLB中未缓存虚拟地址对应的物理地址(IOTLB Miss),则需基于内存的进程页表查找虚拟地址对应的物理地址。然而,基于进程页表进行地址转换(查询虚拟地址对应的物理地址)往往需要多次内存访问,耗时较长,大大影响了IO性能。
本说明书提供一种计算机系统的内存访问方法,可有效缩短IOTLB Miss情况下地址转换的耗时,进而提升IO性能,提高CPU的整体性能和效率。
图1是本说明书一示例性实施例示出的一种计算机系统示意图。
请参考图1,所述计算机系统可包括内存、CPU、PCI设备等。内存、CPU、PCI设备之间可通过总线连接。
其中,CPU可包括多个CPU核心,每个CPU核心中均可包括MMU,用于进行地址转换。为提升地址转换速率,MMU可将虚拟地址和物理地址之间的映射关系存储于CPU核心的TLB(Translation Look-aside Buffer,旁路转换缓存)中,TLB是一种高速硬件缓存,查询速率快,延迟几乎可忽略。
CPU核心在访问内存时,MMU需将虚拟地址转换为物理地址,MMU通常会先查询TLB,在TBL中查询是否缓存有虚拟地址对应的物理地址。若TLB中缓存有虚拟地址对应的物理地址(TLB Hit),可基于查询到的物理地址进行内存访问。若TLB中未缓存虚拟地址对应的物理地址(TLB Miss),则需基于内存的进程页表查询虚拟地址对应的物理地址,以进行内存访问。并且,MMU还会将查询到虚拟地址和物理地址之间的映射关系存储至TLB中,以供后续内存访问使用。
CPU中的非核心(uncore)部分可包括一个或多个IOMMU,可用于为PCI设备提供地址转换功能。IOMMU中设置有IOTBL,与CPU核心中的TLB类似,也可用于存储虚拟地址和物理地址之间的映射关系。
PCI设备可包括:磁盘、GPU(Graphics Processing Unit,图形处理器)、显卡、声卡等。PCI设备在进行内存访问时,由IOMMU为其提供地址转换功能。
图2是本说明书一示例性实施例示出的一种内存访问方法的流程示意图。
所述内存访问方法可应用在图1所示的计算机系统中,包括有以下步骤:
步骤202,IOMMU接收PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址。
在本说明书中,运行在CPU内核中的应用程序可通知PCI设备进行内存访问。
例如,应用程序通知磁盘去内存中读取用户数据,并将读取到的用户数据存储至磁盘。
再例如,应用程序通知GPU去内存中读取图像数据,并对读取到的图像数据进行处理。
应用程序在通知PCI设备进行内存访问时,通常会携带相关数据在内存中的虚拟地址。
PCI设备在接收到应用程序发送的内存访问通知后,可向IOMMU发送内存访问请求,并将应用程序告知的虚拟地址携带在所述内存访问请求中。
步骤204,IOMMU在其IOTLB中查找所述虚拟地址对应的物理地址。
基于前述步骤202,IOMMU在接收到PCI设备发送的内存访问请求后,可先查询IOTLB,若在IOTLB中查找到虚拟地址对应的物理地址(IOTLB Hit),则可基于查找到的物理地址进行内存访问。
若在IOTLB中未查找到虚拟地址对应的物理地址(IOTLB Miss),可执行步骤206。
步骤206,在未查找到所述虚拟地址对应的物理地址的情况下,IOMMU广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址。
基于前述步骤204的查找结果,在IOTLB中未查找到虚拟地址对应的物理地址的情况下,IOMMU广播发送地址探测消息给各个CPU核心。
其中,IOMMU可通过总线实现地址探测消息的广播发送。在多核CPU的架构下,可采用MESH网络实现总线设计,延迟更小。
所述地址探测消息可基于缓存探测Snoop协议(Snoop Protocol)构造,Snoop协议是一种用硬件方式解决多核处理器冲缓存一致性的一种策略。当然,在其他例子中,也可基于其他协议构造地址探测消息,本说明书对此不作特殊限制。
步骤208,CPU核心响应于所述地址探测消息,在其TLB中查找所述虚拟地址对应的物理地址,并在查找到所述虚拟地址对应的物理地址后,发送地址响应消息给IOMMU,所述地址响应消息中携带查找到的所述物理地址。
在本说明书中,CPU核心可通过窥视总线发现所述地址探测消息。然后,在其TLB中查询是否存储有所述虚拟地址对应的物理地址。
若TLB中未存储所述虚拟地址对应的物理地址,CPU核心可返回物理地址不存在的响应消息,即响应消息中不携带物理地址。
若TLB中存储有所述虚拟地址对应的物理地址,CPU核心可将查找到的物理地址添加到响应消息中,并将所述地址响应消息返回给IOMMU。
例如,可通过扩展Snoop协议将物理地址添加到地址响应消息中返回给IOMMU。
步骤210,IOMMU接收CPU核心发送的所述地址响应消息,将所述物理地址与所述虚拟地址之间的映射关系存储至其IOTLB中,并基于所述物理地址进行内存访问。
基于前述步骤208,IOMMU在接收到CPU核心返回的地址响应消息后,可从中提取出物理地址,然后可将虚拟地址和物理地址之间的映射关系存储至其IOTLB中,以供后内存访问时使用。
IOMMU可基于该物理地址进行内存访问。例如,基于该物理地址访问内存中存储的数据,然后将数据返回至PCI设备。
由以上描述可以看出,本说明书中IOMMU在其IOTLB中未存储虚拟地址对应的物理地址时,广播发送地址探测消息给各CPU核心,以查询各CPU核心的TLB中是否存储有所述虚拟地址对应的物理地址。CPU核心在查询到TLB中缓存有所述虚拟地址对应的物理地址后,可将该物理地址添加至地址响应消息中返回给IOMMU,IOMMU进而可存储所述虚拟地址和物理地址之间的映射关系,并实现内存访问。
采用本说明书提供的上述技术方案,PCI设备在进行内存访问时,IOMMU可充分利用CPU核心的TLB资源,实现CPU核心与IOMMU之间的TLB缓存共享,极大程度了减少了IOMMU进行进程页表查询所带来的额外开销,有效缩短了IOTLB Miss情况下地址转换的耗时,提高了CPU的整体性能和效率。
另一方面,本说明书提供的上述技术方案,基于已有的硬件IOMMU以及缓存一致性协议即可实现,无需新增硬件,成本低,可行性高。
下面分别从TLB缓存的建立、以及PCI设备的内存访问两个方面来详细介绍本说明书的具体实现过程。
一、TLB缓存的建立
在本说明书中,运行于某一CPU核心的应用程序初始化后,操作系统可为该应用程序生成ASID(Address Space ID,地址空间标识符),将ASID与应用程序进程标识(PID)绑定。此外,一方面可将ASID同步到IOMMU的管理数据中;另一方面,还可将ASID同步至PCI设备。
应用程序可申请用户缓存,并获得虚拟地址。一方面,操作系统可建立进程页表,并将虚拟地址和物理地址之间的映射关系记录在进程页表中。另一方面,CPU核心的MMU可将虚拟地址和物理地址之间的映射关系存储至TLB,例如,生成TLB表项。
TLB表项可包括ASID、虚拟地址、物理地址、内存访问权限、页面类型等。
其中,对于不同应用程序而言,可使用相同的虚拟地址,但其对应的物理地址必然不同。不同应用程序的ASID不同,可将应用程序使用的虚拟地址与物理地址之间的映射关系与ASID绑定存储,进而通过ASID实现应用程序之间的地址隔离。
内存访问权限包括读权限和写权限。
页面类型通常由应用程序申请,例如4K、2M、1G等。
举例来说,假设运行于计算机系统CPU核心8的应用层程序A初始化,申请用户缓存后,CPU核心8的MMU8在TLB中生成如表1所示的TLB表项:
ASID | 3 |
虚拟地址 | 0x800000 |
物理地址 | 0x200000 |
访问权限 | 读 |
页面类型 | 2M |
表1
类似的,假设同样运行于CPU核心8的应用程序B初始化,申请用户缓存后,CPU核心8的MMU8在TLB中生成如表2所示的TLB表项:
ASID | 7 |
虚拟地址 | 0x800000 |
物理地址 | 0x2000 |
访问权限 | 读 |
页面类型 | 4K |
表2
请参考表1和表2,应用程序A和应用程序B均使用相同的虚拟地址0x800000,但其物理地址不同,通过ASID实现了地址隔离。
二、PCI设备的内存访问
在本说明书中,应用程序在需要PCI设备对数据进行处理时,可通知PCI设备进行内存访问,并将访问所需的虚拟地址、访问权限、数据读取长度(size)发送给PCI设备,PCI设备进而可向IOMMU发起内存访问请求。所述内存访问请求中携带前述虚拟地址、访问权限、size、应用程序初始化时同步的ASID,以及PCI设备在总线上的ID(Requestor ID)。
可参考前述图2所示的实施方式,IOMMU在接收到PCI设备发送的内存访问请求后,先在IOTLB中查询是否存在匹配上述ASID、虚拟地址、访问权限的物理地址。
例如,IOMMU可先在IOTLB中查询ASID匹配的表项,然后在这些ASID匹配的表项中查询是否缓存有匹配上述虚拟地址和访问权限的物理地址。
当然,IOMMU也可不先进行ASID的匹配,可直接基于ASID、虚拟地址、访问权限在IOTLB中查询匹配的物理地址。
若在IOTLB中查询到匹配的物理地址,可基于该物理地址进行内存访问,例如,基于该物理地址读取访问请求中指定的size长度的数据。
若未在IOTLB中查询到匹配的物理地址,IOMMU可向各CPU核心广播发送地址探测消息。该地址探测消息中可携带前述ASID、虚拟地址、访问权限。
CPU核心在接收到所述地址探测消息后,由MMU在其TLB中查询是否匹配前述ASID、虚拟地址、访问权限的物理地址。
其中,CPU核心的MMU在进行物理地址查询时与IOMMU类似,也可先在TLB中查询ASID匹配的表项,然后在这些ASID匹配的表项中查询是否缓存有匹配上述虚拟地址和访问权限的物理地址。
当然,MMU也可不先进行ASID的匹配,可直接基于ASID、虚拟地址和访问权限在TLB中查询匹配的物理地址,本说明书对此不作特殊限制。
若未在TLB中查询到匹配的物理地址,CPU核心可返回不携带物理地址的地址响应消息。
若在TLB中查询到匹配的物理地址,可将该物理地址添加至地址响应消息中返回给IOMMU。
例如,可将该物理地址,以及前述ASID、虚拟地址、访问权限,一同添加至地址响应消息中返回给IOMMU。
IOMMU在接收到所述地址响应消息后,可将物理地址与前述ASID、虚拟地址、访问权限之间的映射关系存储至IOTLB中,以便后续进行地址转换时使用。
在本说明书中,可基于Snoop协议构造地址探测消息和地址响应消息。在基于Snoop协议实现物理地址探测的过程中,通常由Snoop Agent实现地址探测消息与地址响应消息的转发,例如,Snoop Agent在接收到不同CPU核心返回的地址响应消息后,从中过滤掉未携带物理地址的地址响应消息,并且,还可对不同CPU核心返回的携带相同查找结果的地址响应消息进行去重等,例如,仅向IOMMU返回一个携带前述物理地址的地址响应消息。
在本说明书中,IOMMU在接收到所述地址响应消息后,还可基于返回的物理地址进行内存访问,访问结束后,可基于Requestor ID将读取的数据发送至PCI设备。
以前述CPU核心8的TLB中存储表1和表2所示的TLB表项为例。请参考图3,假设,应用程序A通知PCI设备磁盘将内存中的用户数据存储至磁盘中。磁盘可发送内存访问请求至IOMMU,内存访问请求中携带应用程序初始化后同步的ASID 3、应用程序通知的虚拟地址0x800000、访问权限读、以及访问的数据长度size,以及磁盘在总线上的Requestor ID 06:00.01。
IOMMU查询IOTLB,确定未存储ASID 3、虚拟地址0x800000、访问权限读对应的物理地址,进而广播发送地址探测请求至所有CPU核心。其中,CPU核心8的MMU查找到其TLB中存储有ASID 3、虚拟地址0x800000、访问权限读对应的物理地址0x200000,即查询命中表1,进而构造地址响应消息,所述地址响应消息中携带该物理地址0x200000,以及ASID 3、虚拟地址0x800000、访问权限读。
值得注意的是,虽然表2中的虚拟地址与内存访问请求中携带的虚拟地址相同,但由于ASID不同,因此不会命中表2所示的TLB表项。
CPU核心8将地址响应消息返回至IOMMU,IOMMU进而将上述映射关系存储至IOTLB,即在IOTLB中生成表1所示的表项。
此外,IOMMU还可基于该物理地址去内存中读取用户数据,然后基于磁盘的Requestor ID 06:00.01将读取到的用户数据发送给磁盘,以供磁盘存储。
由以上描述可以看出,采用本说明书提供的上述技术方案,PCI设备在进行内存访问时,IOMMU可充分利用CPU核心的TLB资源,实现CPU核心与IOMMU之间的TLB缓存共享,极大程度了减少了IOMMU进行进程页表查询所带来的额外开销,有效缩短了IOTLB Miss情况下地址转换的耗时,提高了CPU的整体性能和效率。
另一方面,本说明书提供的上述技术方案,基于已有的硬件IOMMU以及缓存一致性协议即可实现,无需新增硬件,成本低,可行性高。
图4是本说明书一示例性实施例示出的另一种内存访问方法的流程示意图。
请参考图4,所述内存访问方法可应用在IOMMU中,包括有以下步骤:
步骤402,接收PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址。
步骤404,在IOTLB中查找所述虚拟地址对应的物理地址。
步骤406,在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址。
步骤408,接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址。
步骤410,将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
本实施例中,步骤402-410的实现过程可参考前述图2和图3所示的实施例,本说明书在此不在一一赘述。
与前述内存访问方法的实施例相对应,本说明书还提供了内存访问装置的实施例。
本说明书内存访问装置的实施例可以应用在图1所示的IOMMU中。请参考图5,内存访问装置500可以包括有:
其中,请求接收单元501,接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
地址查找单元502,在输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
地址探测单元503,在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址;
响应接收单元504,接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址;
内存访问单元505,将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
可选的,所述内存访问单元505在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址,并将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,以及基于所述物理地址进行内存访问。
可选的,所述地址探测消息中还携带有地址空间标识,CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系;CPU核心在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
可选的,所述地址探测单元503基于Snoop协议广播发送地址探测消息至各CPU核心。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
与前述内存访问方法的实施例相对应,本说明书还提供一种IOMMU,该IOMMU被配置为:
在IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址;
接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址;
将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
可选的,在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址。
可选的,所述地址探测消息中还携带有地址空间标识,以供CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系,并在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
可选的,所述广播发送地址探测消息至各CPU核心,包括:
基于Snoop协议广播发送地址探测消息至各CPU核心。
与前述内存访问方法的实施例相对应,本说明书还提供一种CPU,CPU包括CPU核心和IOMMU。
其中,IOMMU用于接收PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
IOMMU在其IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,IOMMU广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址;
CPU核心响应于所述地址探测消息,用于在其TLB中查找所述虚拟地址对应的物理地址,并在查找到所述虚拟地址对应的物理地址后,发送地址响应消息给IOMMU,所述地址响应消息中携带查找到的所述物理地址;
IOMMU接收CPU核心发送的所述地址响应消息,用于将所述物理地址与所述虚拟地址之间的映射关系存储至其IOTLB中,并基于所述物理地址进行内存访问。
可选的,IOMMU在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址。
可选的,所述地址探测消息中还携带有地址空间标识,CPU核心在其TLB中查找所述虚拟地址对应的物理地址,包括:
CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系;
CPU核心在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
可选的,所述IOMMU广播发送地址探测消息至各CPU核心,包括:
IOMMU基于缓存探测Snoop协议广播发送地址探测消息至各CPU核心。
与前述内存访问方法的实施例相对应,本说明书还提供一种计算机系统,包括本说明书前述实施例所述的CPU。
与前述内存访问方法的实施例相对应,本说明书还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被CPU运行时实现以下步骤:
IOMMU接收PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
IOMMU在其IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,IOMMU广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址;
CPU核心响应于所述地址探测消息,在其TLB中查找所述虚拟地址对应的物理地址,并在查找到所述虚拟地址对应的物理地址后,发送地址响应消息给IOMMU,所述地址响应消息中携带查找到的所述物理地址;
IOMMU接收CPU核心发送的所述地址响应消息,将所述物理地址与所述虚拟地址之间的映射关系存储至其IOTLB中,并基于所述物理地址进行内存访问。
可选的,还包括:
IOMMU在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址。
可选的,所述地址探测消息中还携带有地址空间标识,CPU核心在其TLB中查找所述虚拟地址对应的物理地址,包括:
CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系;
CPU核心在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
可选的,所述IOMMU广播发送地址探测消息至各CPU核心,包括:
IOMMU基于缓存探测Snoop协议广播发送地址探测消息至各CPU核心。
与前述内存访问方法的实施例相对应,本说明书还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被IOMMU运行时实现以下步骤:
接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
在输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址;
接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址;
将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
可选的,还包括:
在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址。
可选的,所述地址探测消息中还携带有地址空间标识,以供CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系,并在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
可选的,所述广播发送地址探测消息至各CPU核心,包括:
基于Snoop协议广播发送地址探测消息至各CPU核心。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (13)
1.一种内存访问方法,应用于计算机系统,所述计算机系统包括中央处理器CPU,CPU包括CPU核心和输入输出内存管理单元IOMMU,所述方法包括:
IOMMU接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
IOMMU在其输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,IOMMU广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址;
CPU核心响应于所述地址探测消息,在其TLB中查找所述虚拟地址对应的物理地址,并在查找到所述虚拟地址对应的物理地址后,发送地址响应消息给IOMMU,所述地址响应消息中携带查找到的所述物理地址;
IOMMU接收CPU核心发送的所述地址响应消息,将所述物理地址与所述虚拟地址之间的映射关系存储至其IOTLB中,并基于所述物理地址进行内存访问。
2.根据权利要求1所述的方法,还包括:
IOMMU在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址。
3.根据权利要求1所述的方法,所述地址探测消息中还携带有地址空间标识,CPU核心在其TLB中查找所述虚拟地址对应的物理地址,包括:
CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系;
CPU核心在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
4.根据权利要求1所述的方法,所述IOMMU广播发送地址探测消息至各CPU核心,包括:
IOMMU基于缓存探测Snoop协议广播发送地址探测消息至各CPU核心。
5.一种内存访问方法,用于计算机系统的内存访问,所述计算机系统包括中央处理器CPU,CPU包括CPU核心和输入输出内存管理单元IOMMU,所述方法应用于IOMMU,包括:
接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
在输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址;
接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址;
将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
6.根据权利要求5所述的方法,还包括:
在未接收到所述地址响应消息的情况下,基于内存的进程页表查找所述虚拟地址对应的物理地址。
7.根据权利要求5所述的方法,所述地址探测消息中还携带有地址空间标识,以供CPU核心在其TLB中查找匹配所述地址空间标识的虚拟地址与物理地址之间的映射关系,并在查找到的所述映射关系中查找所述虚拟地址对应的物理地址。
8.根据权利要求5所述的方法,所述广播发送地址探测消息至各CPU核心,包括:
基于缓存探测Snoop协议广播发送地址探测消息至各CPU核心。
9.一种输入输出内存管理单元IOMMU,被配置为:
接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
在输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址,以供CPU核心在其TLB中查找所述虚拟地址对应的物理地址;
接收CPU核心针对所述地址探测消息发送的地址响应消息,所述地址响应消息中携带CPU核心查找到的所述虚拟地址对应的物理地址;
将所述物理地址与所述虚拟地址之间的映射关系存储至IOTLB中,并基于所述物理地址进行内存访问。
10.一种中央处理器CPU,CPU包括CPU核心和输入输出内存管理单元IOMMU,
其中,IOMMU用于接收外设部件互连标准PCI设备发送的内存访问请求,所述内存访问请求中携带虚拟地址;
IOMMU在其输入输出旁路转换缓存IOTLB中查找所述虚拟地址对应的物理地址;
在未查找到所述虚拟地址对应的物理地址的情况下,IOMMU广播发送地址探测消息至各CPU核心,所述地址探测消息中携带所述虚拟地址;
CPU核心响应于所述地址探测消息,用于在其TLB中查找所述虚拟地址对应的物理地址,并在查找到所述虚拟地址对应的物理地址后,发送地址响应消息给IOMMU,所述地址响应消息中携带查找到的所述物理地址;
IOMMU接收CPU核心发送的所述地址响应消息,用于将所述物理地址与所述虚拟地址之间的映射关系存储至其IOTLB中,并基于所述物理地址进行内存访问。
11.一种计算机系统,包括如权利要求10所述的中央处理器CPU。
12.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被中央处理器CPU执行时实现如权利要求1-4中任一项所述方法中的步骤。
13.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被输入输出内存管理单元IOMMU执行时实现如权利要求5-8中任一项所述方法中的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210200147.XA CN114817081A (zh) | 2022-03-02 | 2022-03-02 | 内存访问方法、装置和输入输出内存管理单元 |
PCT/CN2023/075640 WO2023165319A1 (zh) | 2022-03-02 | 2023-02-13 | 内存访问方法、装置和输入输出内存管理单元 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210200147.XA CN114817081A (zh) | 2022-03-02 | 2022-03-02 | 内存访问方法、装置和输入输出内存管理单元 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114817081A true CN114817081A (zh) | 2022-07-29 |
Family
ID=82528156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210200147.XA Pending CN114817081A (zh) | 2022-03-02 | 2022-03-02 | 内存访问方法、装置和输入输出内存管理单元 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114817081A (zh) |
WO (1) | WO2023165319A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115114103A (zh) * | 2022-08-23 | 2022-09-27 | 摩尔线程智能科技(北京)有限责任公司 | 直接存储器访问数据传输的测试方法和装置 |
CN116644006A (zh) * | 2023-07-27 | 2023-08-25 | 浪潮电子信息产业股份有限公司 | 一种内存页面管理方法、系统、装置、设备及计算机介质 |
WO2023165319A1 (zh) * | 2022-03-02 | 2023-09-07 | 阿里巴巴(中国)有限公司 | 内存访问方法、装置和输入输出内存管理单元 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104516822B (zh) * | 2013-09-29 | 2018-01-23 | 华为技术有限公司 | 一种内存访问方法和设备 |
US10437739B2 (en) * | 2017-09-26 | 2019-10-08 | Intel Corporation | Low-latency accelerator |
CN112612574B (zh) * | 2020-12-18 | 2023-09-26 | 海光信息技术股份有限公司 | 输入输出设备的内存访问管理单元、系统及地址转换方法 |
CN114817081A (zh) * | 2022-03-02 | 2022-07-29 | 阿里巴巴(中国)有限公司 | 内存访问方法、装置和输入输出内存管理单元 |
-
2022
- 2022-03-02 CN CN202210200147.XA patent/CN114817081A/zh active Pending
-
2023
- 2023-02-13 WO PCT/CN2023/075640 patent/WO2023165319A1/zh unknown
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023165319A1 (zh) * | 2022-03-02 | 2023-09-07 | 阿里巴巴(中国)有限公司 | 内存访问方法、装置和输入输出内存管理单元 |
CN115114103A (zh) * | 2022-08-23 | 2022-09-27 | 摩尔线程智能科技(北京)有限责任公司 | 直接存储器访问数据传输的测试方法和装置 |
CN115114103B (zh) * | 2022-08-23 | 2023-01-06 | 摩尔线程智能科技(北京)有限责任公司 | 直接存储器访问数据传输的测试方法和装置 |
CN116644006A (zh) * | 2023-07-27 | 2023-08-25 | 浪潮电子信息产业股份有限公司 | 一种内存页面管理方法、系统、装置、设备及计算机介质 |
CN116644006B (zh) * | 2023-07-27 | 2023-11-03 | 浪潮电子信息产业股份有限公司 | 一种内存页面管理方法、系统、装置、设备及计算机介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2023165319A1 (zh) | 2023-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114817081A (zh) | 内存访问方法、装置和输入输出内存管理单元 | |
US7363462B2 (en) | Performing virtual to global address translation in processing subsystem | |
US9720839B2 (en) | Systems and methods for supporting a plurality of load and store accesses of a cache | |
US7765381B2 (en) | Multi-node system in which home memory subsystem stores global to local address translation information for replicating nodes | |
US8347065B1 (en) | System and method for concurrently managing memory access requests | |
TW200815992A (en) | An exclusive ownership snoop filter | |
CN109219804B (zh) | 非易失内存访问方法、装置和系统 | |
WO2023165317A1 (zh) | 内存访问方法和装置 | |
WO2018057246A1 (en) | Precise invalidation of virtually tagged caches | |
CN111143244A (zh) | 计算机设备的内存访问方法和计算机设备 | |
CN114546896A (zh) | 系统内存管理单元、读写请求处理方法、电子设备和片上系统 | |
EP1611513B1 (en) | Multi-node system in which global address generated by processing subsystem includes global to local translation information | |
US6405292B1 (en) | Split pending buffer with concurrent access of requests and responses to fully associative and indexed components | |
CN114546898A (zh) | 一种tlb管理方法、装置、设备及存储介质 | |
CN106164874B (zh) | 多核系统中数据访问者目录的访问方法及设备 | |
US8700865B1 (en) | Compressed data access system and method | |
CN115687185A (zh) | 基于mmap内存映射的手持端低功耗数据采集方法 | |
CN111651400B (zh) | 一种具有匹配查询索引结构的存储空间访问方法及系统 | |
CN117370228A (zh) | 一种数据处理设备及方法 | |
US6931510B1 (en) | Method and system for translation lookaside buffer coherence in multiprocessor systems | |
US8533425B1 (en) | Age based miss replay system and method | |
CN117851290B (zh) | 页表管理方法、系统、电子组件及电子设备 | |
US9720834B2 (en) | Power saving for reverse directory | |
CN117851291B (zh) | 内存访问系统、电子组件及电子设备 | |
CN117851290A (zh) | 页表管理方法、系统、电子组件及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |