在虚拟化计算环境中路由直接存储器存取请求的制作方法

文档序号:12512805阅读:175来源:国知局
在虚拟化计算环境中路由直接存储器存取请求的制作方法与工艺

输入/输出存储器管理单元(IOMMU)可以提供在支持直接存储器存取(DMA)的装置(例如,显卡、网卡、声卡等)与主存储器之间的通信。IOMMU可以将从支持DMA的装置接收的直接存储器存取请求中标识的虚拟存储器地址变换为该主存储器的物理地址。IOMMU可以被配置为使得在不经由中央处理单元(CPU)进行路由的情况下,存储器存取可提供给支持DMA的装置。例如,IOMMU可以从支持DMA的装置处接收标识出虚拟存储器地址的存储器存取请求,并且可以在将虚拟存储器地址映射到物理存储器地址的页表中查找虚拟存储器地址。接着,存储在物理存储器地址中的信息可由支持DMA的装置读出或写入。

示例实施方案概述

根据一些可能实施方案,一种方法可以包括通过装置,接收标识出虚拟地址的直接存储器存取请求。所述方法可以包括通过所述装置,确定所述虚拟地址是否在特定虚拟地址范围内。所述方法可以包括通过所述装置,基于确定所述虚拟地址是否在所述特定虚拟地址范围内,选择性地执行第一动作或第二动作。所述第一动作可以包括当所述虚拟地址并不在所述特定虚拟地址范围内时,致使将执行第一地址变换算法以将所述虚拟地址变换为与存储器装置关联的物理地址。所述第二动作可以包括当所述虚拟地址在所述特定虚拟地址范围内时,致使将执行第二地址变换算法以将所述虚拟地址变换为与所述存储器装置关联的所述物理地址。所述第二地址变换算法可不同于所述第一地址变换算法。

根据一些可能实施方案,一种装置可以包括控制器,并且所述控制器可以从外围装置处接收标识出虚拟地址值的存储器存取请求。所述控制器可以基于存储在可由所述控制器存取的存储器中的信息,确定所述虚拟地址值是否包括在特定虚拟地址值范围中。所述控制器可以基于确定所述虚拟地址值是否包括在所述特定虚拟地址值范围中,选择性地执行第一动作或第二动作。所述控制器可以在所述虚拟地址值并未包括在所述特定虚拟地址值范围中时执行所述第一动作。所述第一动作可以包括致使将执行第一地址变换算法以将所述虚拟地址值变换为标识出存储器装置中的存储器位置的物理地址值。所述控制器可以在所述虚拟地址值包括在所述特定虚拟地址值范围中时执行所述第二动作。所述第二动作可以包括致使将执行第二地址变换算法以将所述虚拟地址值变换为所述物理地址值。所述第二地址变换算法可不同于所述第一地址变换算法。

根据一些可能实施方案,一种系统可以接收标识出虚拟地址值的存储器存取请求。所述系统可以确定所述虚拟地址值是否包括在特定虚拟地址值范围中。所述系统可以基于确定所述虚拟地址值是否包括在所述特定虚拟地址值范围中,选择性地执行第一地址变换算法或第二地址变换算法,以便将所述虚拟地址值变换为与存储器装置关联的物理地址值。所述系统可以在所述虚拟地址值并未包括在所述特定虚拟地址值范围中时执行所述第一地址变换算法。所述系统可以在所述虚拟地址值包括在所述特定虚拟地址值范围中时执行所述第二地址变换算法。所述第二地址变换算法可不同于所述第一地址变换算法。所述系统可以基于选择性地执行所述第一地址变换算法或所述第二地址变换算法,向所述存储器装置路由所述存储器存取请求和标识出所述物理地址值的信息。

附图简述

图1是本文所述示例实施方案的概览的图示;

图2是其中可实施本文所述实施方案的示例系统的图示;

图3是用于当在虚拟化计算环境中路由直接存储器存取请求时分配要使用的存储器寄存器的示例过程的流程图;

图4A和图4B是与图3所示示例过程相关的示例实施方案的图示;

图5是用于在虚拟化计算环境中路由直接存储器存取请求的示例过程的流程图;

图6A-6E是与图5所示示例过程相关的示例实施方案的图示;以及

图7A和图7B是与图5所示示例过程相关的另一示例实施方案的图示。

示例实施方案详述

以下对示例实施方案的详细描述参考附图。不同附图中的相同附图标记可以标识相同或相似的元件。

具有直接存储器地址(DMA)能力的外围装置可以通过向输入/输出存储器管理单元(IOMMU)提供存储器存取请求来在虚拟化计算环境中操作。IOMMU可以将存储器存取请求中标识的虚拟地址变换为与主存储器区块关联的物理地址。以此方式,IOMMU可以提供在虚拟化计算环境中操作的外围装置与主存储器之间的通信。然而,由于IOMMU执行地址变换算法所需要的计算能力的量以及执行各种其它IOMMU过程所需要的计算能力的量,经由IOMMU路由存储器存取请求可能是缓慢和/或昂贵的。

为了加速路由存储器存取请求,可以从IOMMU处理中排除某些请求。例如,可以从IOMMU处理中排除标识出与用于刷新显示装置的像素的帧缓冲器关联的地址的请求。然而,这种排除产生安全问题,并且可能无法提供在虚拟化计算环境中操作外围装置所必需的存储器地址变换。本文所述实施方案提供一种用于在满足某些条件时经由至主存储器的快速路线来路由存储器存取请求和用于在并未满足这些条件时经由缓慢路线来路由存储器存取请求的机制。两种路线都提供了存储器地址变换,并且因此允许外围装置在虚拟化计算环境中操作,同时提高外围装置性能。

图1是本文所述示例实施方案的概览100的图示。如图1所示,支持DMA的装置(例如,外围装置)可以将标识出虚拟地址的DMA请求提供给路由控制器。路由控制器可以包括做出路由决策以确定DMA请求将是经由使用IOMMU来处理请求的第一路线还是不使用IOMMU来处理请求的第二路线来路由的装置。路由控制器可以分析请求,以便确定一或多个条件是否得到满足。例如,路由控制器可以确定是否启用经由第二路线来进行的路由、虚拟地址是否在要经由第二路线进行路由的虚拟地址范围内、是否允许请求存取类型(例如,读出存取、写入存取等等),等等。路由控制器可以使用一组分配的寄存器执行这个分析。

如进一步在图1中示出,如果条件并未满足,那么路由控制器可以经由第一路线路由DMA请求。第一路线可以包括IOMMU,和/或可以包括使用第一地址变换算法处理存储器存取请求,以便将虚拟地址变换为与主存储器关联的物理地址。在执行地址变换后,IOMMU可以将直接存储器存取请求(包括标识出物理地址的信息)路由到存储器控制器来路由到主存储器。

另一方面,如果条件得到满足,那么路由控制器可以经由第二路线路由DMA请求。第二路线可不包括IOMMU,和/或可以包括使用第二地址变换算法处理存储器存取请求,第二地址变换算法不同于(并且快于)第一地址变换算法。在这种情况下,路由控制器可以使用一组分配的寄存器来从虚拟地址确定物理地址,并且可以使用物理地址将DMA请求路由到存储器控制器来路由到主存储器。

第二地址变换算法可能不如第一地址变换算法复杂,并且相较第一地址变换算法,可更快地执行。另外或替代地,第二路线可以排除在第一路线上由IOMMU执行的一些处理。因此,相较第一路线,第二路线可更快地将DMA请求提供给主存储器。以此方式,路由控制器可为在虚拟化计算环境中操作的支持DMA的装置提供增强性能,同时还通过分析DMA请求来提供增强的安全性。

图2是其中可实施本文所述实施方案的示例系统200的图示。如图2所示,系统200可以包括一或多个外围装置210-1至210-N(N≥1)(以下共同称为“外围装置210”,并且单独称为“外围装置210”)、路由控制器220、IOMMU 230、存储器控制器240和主存储器250。系统200的装置可以经由有线连接、无线连接等等连接。

外围装置210可以包括能够不依赖于中央处理单元、经由直接存储器存取来存取主存储器250的一或多个装置。例如,外围装置210可以包括支持DMA的装置,诸如图形处理单元(GPU)、加速处理单元(APU)、网络接口卡、声卡、磁盘驱动器、主板等等。在一些实施方案中,外围装置210是具有对另一计算装置的主存储器250的远程DMA存取的计算装置。作为另一示例,外围装置210可以包括具有对另一处理器核的主存储器250的DMA存取的处理器核。外围装置210可以生成DMA请求(例如,基于输入和/或指令),并且可以将DMA请求提供给路由控制器220。

路由控制器220可以包括能够接收、处理、路由和/或提供DMA请求的一或多个装置。例如,路由控制器220可以从外围装置210处接收DMA请求,并且可以分析DMA请求以便确定将是经由第一路线还是第二路线将DMA请求路由到存储器控制器240和/或主存储器250。如图所示,第一路线可以包括IOMMU 230,并且第二路线可不包括IOMMU 230。另外或替代地,相较第二路线,第一路线可以包括更多对DMA请求的处理。因此,第一路线可以是慢于第二路线的路由。路由控制器220可以基于对DMA请求的分析向IOMMU 230或存储器控制器240提供DMA请求。在一些实施方案中,路由控制器220从包括在DMA请求中的虚拟地址确定物理地址。另外或替代地,路由控制器220可以将DMA请求提供给另一装置,以便确定物理地址。虽然被示出为在外围装置210外,但是在一些实施方案中,路由控制器220集成在外围装置210内。另外或替代地,系统200可以包括多个路由控制器220,每者控制与一或多个外围装置210关联的路由。

IOMMU 230可以包括能够接收、处理和/或提供DMA请求的一或多个装置。例如,IOMMU 230可以从路由控制器220处接收DMA请求,并且可以在将DMA请求提供给存储器控制器240和/或主存储器250前处理DMA请求。IOMMU 230可以通过例如将虚拟地址变换为物理地址、验证是否允许DMA请求中请求的存取和/或存取类型等等,处理DMA请求。在一些实施方案中,IOMMU 230使用第一算法处理经由第一路线来路由的DMA请求(例如,执行地址变换),这不同于在经由第二路线路由DMA请求时由路由控制器220和/或另一装置使用的第二算法。在一些实施方案中,IOMMU 230经由外围部件互连(PCI)总线、经由PCI-express总线等等电子地耦接到外围装置210。

存储器控制器240可以包括能够管理去往和来自主存储器250的信息流和/或能够从主存储器250读出和/或向主存储器250写入的一或多个装置。例如,存储器控制器240可从外围装置210经由第一路线接收来自IOMMU 230的存储器存取请求,或者可从外围装置210经由第二路线接收来自路由控制器220的存储器存取请求。存储器存取请求可标识出主存储器250的物理地址,可标识出与物理地址关联执行的操作(例如,读出操作,写入操作等等),和/或可标识出要从物理地址读出和/或向物理地址写入的信息(例如,数据,指令等等)。存储器控制器240可以基于存储器存取请求从主存储器250读出信息或向主存储器250写入信息。

主存储器250可以包括一或多个装置,这些装置存储信息。例如,主存储器250可以包括随机存取存储器(RAM)、只读存储器(ROM)等等。主存储器250可以存储由物理存储器地址标识的信息。

系统200可以执行本文所述一或多个过程。系统200可响应于执行计算机可读介质(诸如主存储器250)存储的指令(例如,软件指令)的处理器,执行这些过程。计算机可读介质在本文中被定义为非暂时性存储器装置。存储器装置包括单个物理存储装置内的存储器空间或跨多个物理存储装置的存储器空间。

在图2中示出的装置的数量作为示例提供。在实践中,系统200可以包括除了图2所示那些外的额外装置、更少装置、不同装置或不同地布置的装置。另外,系统200的一或多个装置可以执行被描述为由系统200的另外一或多个装置执行的一或多个功能。

图3是用于当在虚拟化计算环境中路由直接存储器存取请求时分配要使用的存储器寄存器的示例过程300的流程图。在一些实施方案中,图3的一或多个处理方框是由路由控制器220执行。在一些实施方案中,图3的一或多个处理方框由独立于或包括路由控制器220的另一装置或装置组(诸如外围装置210、IOMMU 230、存储器控制器240和/或主存储器250)执行。

如图3所示,过程300可以包括分配基址寄存器和长度寄存器,它们限定要用于做出与存储器存取请求关联的路由决策的虚拟地址范围(方框310)。例如,路由控制器220可以分配基址寄存器和长度寄存器。基址寄存器可以存储标识出与虚拟地址范围关联的基址的信息(例如,标识出虚拟地址范围一端的基本虚拟地址),并且长度寄存器可以存储标识出该范围的长度的信息(例如,包括在范围中的虚拟地址的数量)。基址和地址数量可共同地限定要由路由控制器220使用来做出与存储器存取请求关联的路由决策的虚拟地址范围。

作为示例(使用简单的地址值),假设基址寄存器标识基址1,001。另外,假设长度寄存器标识500个虚拟地址数量。基于这两个值,路由控制器220可以确定从1,001到1,500的500个虚拟地址范围,包括端值。当路由控制器220接收标识出并未落在这个范围内的虚拟地址的存储器存取请求时,路由控制器220可以经由第一路线路由存储器存取请求,第一路线包括IOMMU 230。另一方面,当路由控制器220接收标识出落在这个范围内的虚拟地址的存储器存取请求时,路由控制器220可以经由第二路线路由存储器存取请求,第二路线并不包括IOMMU 230。

在一些实施方案中,虚拟地址范围映射到表示主存储器250中存储的帧缓冲器的物理地址范围。帧缓冲器可以存储要在提供在显示装置上的像素的颜色值,并且可由外围装置210(例如,GPU)存取,以便周期性地刷新像素(例如,通过获得像素的颜色值并且将该值提供给显示装置,显示装置可以基于该颜色值显示像素)。

如进一步在图3中示出,过程300可以包括分配要用于将虚拟地址变换为物理地址的浮动寄存器(方框320)。例如,路由控制器220可以分配浮动寄存器。浮动寄存器可以存储标识出浮动值的信息。浮动值可由路由控制器220用来将存储器存取请求中标识的虚拟地址变换为与主存储器250关联的物理地址。

在一些实施方案中,路由控制器220可以修改基址值、长度值和/或浮动值。例如,路由控制器220可以接收虚拟地址范围和/或这个范围的一部分与错误(例如,存储器错误)关联的指示。在这种情况下,路由控制器230可以修改基址和/或长度(例如,如果错误是与虚拟存储器关联)。另外或替代地,路由控制器230可以修改浮动值(例如,如果错误是与物理存储器关联)。路由控制器220可将这种改变通知另一装置(例如,外围装置210、IOMMU 230等等)。

包括基址寄存器、长度寄存器和浮动寄存器的一组(例如,三元组)寄存器可以共同操作,以有助于路由控制器220做出与存储器存取请求关联的路由决策。在一些实施方案中,路由控制器220分配多组寄存器(例如,零组寄存器、四组寄存器、八组寄存器等等)。在这种情况下,可启用或禁用多个组的整个群组(例如,使用与IOMMU 230关联的路由控制字段)以启用或禁用路由决策(例如,针对特定外围装置210、针对一组外围装置210、针对所有外围装置210等等)。

另外或替代地,如本文中结合方框330所述,可以使用启用字段启用或停用一组特定寄存器,以便在做出路由决策时启用或停用对一组特定寄存器的使用(例如,针对一或多个外围装置210)。另外或替代地,如本文中结合方框340所述,路由控制器220可以使用存取控制字段设置对一组特定寄存器和/或一组特定外围装置210的存取控制。

路由控制器220可以存储基址寄存器、长度寄存器和浮动寄存器(例如,一组寄存器)之间的关系的指示。例如,路由控制器220可以在相邻存储器地址处(例如,在存储器映射的输入/输出(MMIO)地址页面中)存储一组寄存器中的每个寄存器。

如进一步在图3中示出,过程300可以包括分配启用字段以启用或禁用经由不同路线路由存储器存取请求(方框330)。例如,路由控制器220可以分配启用字段。在一些实施方案中,启用字段包括在浮动寄存器中。路由控制器220可以使用启用字段确定是否做出对存储器存取请求的路由决策(例如,选择多个路线中的一个路线),或者经由单个路线转发存储器存取请求。例如,当启用字段指示路由禁用时,路由控制器220可以经由第一路线转发存储器存取请求,第一路线包括IOMMU 230。另一方面,当启用字段指示路由被启用时,路由控制器220就可分析存储器存取请求,以便确定是通过第一路线还是不包括IOMMU 230的第二路线来路由存储器存取请求。

在一些实施方案中,路由控制器220控制用于多个外围装置210的路由。在这种情况下,路由控制器220可以分配一组启用字段,指示哪些外围装置210是与路由决策关联。例如,路由控制器220可以做出对从第一组外围装置210接收的存储器存取请求的路由决策,并且可不做出对从第二组外围装置210接收的存储器存取请求的路由决策(例如,可以将从第二组外围装置210接收的请求转发到IOMMU 230)。路由控制器220可以基于一组启用字段中存储的信息,确定是否做出对从特定外围装置210接收的存储器存取请求的路由决策。

如进一步在图3中示出,过程300可以包括分配存取控制字段以允许或拒绝请求存取类型(方框340)。例如,路由控制器220可以分配存取控制字段。在一些实施方案中,存取控制字段包括在浮动寄存器中。路由控制器220可以使用存取控制字段确定将是允许还是拒绝由存储器存取请求标识的请求存取类型(例如,读出存取、写入存取、没有存取等等)。

在一些实施方案中,路由控制器220控制用于多个外围装置210的路由。在这种情况下,路由控制器220可以分配指示是允许还是拒绝与一组外围装置210关联的请求存取类型的一组存取控制字段。例如,路由控制器220可以将第一存取类型(例如,读出存取)应用到从第一组外围装置210接收的存储器存取请求,并且可以将第二存取类型(例如,读出/写入存取)应用到从第二组外围装置210接收的存储器存取请求。路由控制器220可以基于一组存取控制字段中存储的信息,确定存取类型是否将应用到从特定外围装置210接收的存储器存取请求。

如进一步在图3中示出,过程300可以包括验证分配的寄存器(方框350)。例如,路由控制器220可以验证基址寄存器、长度寄存器和/或浮动寄存器。在一些实施方案中,路由控制器220通过确保在经由第一路线(例如,包括IOMMU 230和/或利用页表执行地址变换)进行路由时和在经由第二路线(例如,并不包括IOMMU 230和/或利用存储器重定位算法执行地址变换)进行路由时特定虚拟地址会变换到相同物理地址,验证分配的寄存器。

在一些实施方案中,路由控制器220重复过程300,以便设置多个虚拟地址范围。不同范围可与不同基址值、不同长度值、不同浮动值等等关联。在一些实施方案中,路由控制器220针对不同范围使用相同浮动值(例如,存储在相同浮动寄存器中)。另外或替代地,路由控制器220可以针对不同范围使用相同启用字段和/或存取控制字段,或者可以针对不同范围使用不同启用字段和/或存取控制字段。以才此方式,路由控制器220可以设置用于存储器存取请求(例如,与虚拟化计算环境中的图形处理关联的存储器存取请求)的更快路由的非连续物理存储器范围。

当路由控制器220分配多个虚拟地址范围时,路由控制器220可以通过确保由寄存器标识的多个虚拟地址范围并不重叠,验证分配的寄存器。例如,路由控制器220可以使用多个基址寄存器和相应的多个长度寄存器限定多个虚拟地址范围。路由控制器220可以通过确定特定虚拟地址是否包括在多于一个范围中,确保多个范围并不重叠。如果路由控制器220确定多个范围重叠,那么路由控制器220可以提供错误通知和/或可以重新分配一或多个寄存器,使得范围并不重叠。

虽然图3示出过程300的示例方框,但是在一些实施方案中,过程300包括除了图3所绘那些外的额外方框、更少方框、不同方框或不同地布置的方框。另外或替代地,过程300的方框中的两个或更多个可以并行执行。

图4A和图4B是与图3所示示例过程300相关的示例实施方案400的图示。图4A和图4B示出用于当在虚拟化计算环境中路由直接存储器存取请求时分配要使用的存储器寄存器的示例。

如图4A所示,假设路由控制器220分配基址寄存器405。如图所示,假设基址寄存器405包括64位寄存器(例如,具有位0至63)。另外,假设保留位0至11和52至63。在一些实施方案中,保留位用于调试目的。最后,假设位12至51(例如,总共40位)用于标识具有值200的基址。

如进一步在图4A中示出,假设路由控制器220分配长度寄存器410。如图所示,假设长度寄存器410包括64位寄存器(例如,具有位0至63)。另外,假设保留位0至11和52至63。最后,假设位12至51(例如,总共40位)用于标识具有值500的长度。

如进一步在图4A中示出,假设基址寄存器405和长度寄存器410中存储的值限定虚拟地址空间415中的将经由不包括IOMMU 230的路线进行路由的虚拟地址范围。如由附图标记420所示,基址标识该虚拟地址范围的起点,其以虚拟地址200开始。如由附图标记425所示,长度标识该范围中包括的虚拟地址的数量。在这种情况下,在从200到699的虚拟地址范围中包括500个虚拟地址,如由附图标记430所示。

在一些实施方案中,虚拟地址空间415表示与主存储器250中存储的帧缓冲器对应的虚拟地址范围。帧缓冲器可以存储显示装置上的像素的颜色值,并且可以由GPU存取以周期性地刷新像素。通过经由不包括IOMMU 230的较快路线路由与帧缓冲器关联的存储器存取请求,路由控制器220可以确保显示刷新要比在存储器存取请求经由包括IOMMU 230的较慢路线进行路由时更快执行。

如图4B所示,假设路由控制器220分配浮动寄存器435。如图所示,假设浮动寄存器435包括64位寄存器(例如,具有位0至63)。另外,假设保留位2至11和52至63。如由附图标记440所示,假设位12至51(例如,总共40位)用于标识具有值400的浮动值。如由附图标记445所示,假设位0用作启用位,其指示了路由控制器220是否做出对存储器存取请求的路由决策。如由附图标记450所示,假设位1用作存取控制位,其标识了存储器存取请求(例如,读出存取、写入存取、读写入存取等等)的允许的存取类型。

如上指示,图4A和图4B仅作为示例来提供。其它实例是可能的,并且可不同于关于图4A和图4B所述那样。

图5是用于在虚拟化计算环境中路由直接存储器存取请求的示例过程500的流程图。在一些实施方案中,图5的一或多个处理方框是由路由控制器220执行。在一些实施方案中,图5的一或多个处理方框由独立于或包括路由控制器220的另一装置或装置组(诸如外围装置210、IOMMU 230、存储器控制器240和/或主存储器250)执行。

如图5所示,过程500可以包括从外围装置处接收标识出虚拟地址的存储器存取请求(方框510)。例如,路由控制器220可以从外围装置210处接收存储器存取请求。在一些实施方案中,存储器存取请求包括直接存储器存取请求。另外或替代地,存储器存取请求可标识出虚拟地址,诸如与外围装置210关联的访客物理地址。

在一些实施方案中,存储器存取请求会标识出与存储器存取请求关联的存取类型。例如,存储器存取请求可以包括从主存储器250读出信息的请求、向主存储器250写入信息的请求等等。另外或替代地,存储器存取请求可标识出要从主存储器250读出和/或向主存储器250写入的信息。

如进一步在图5中示出,过程500可以包括确定路由是否启用(方框520)。例如,路由控制器220可以通过读出启用位(例如,包括在浮动寄存器中),确定路由是否启用。启用位的值可以提供关于路由是启用(例如,当启用位包括第一值、诸如1时)还是禁用(例如,当启用位包括第二值、诸如0时)的指示。

如果路由并未启用(方框520—否),那么过程500可以包括经由至主存储器的第一路线路由存储器存取请求(方框530)。例如,如果路由控制器220确定路由并未启用(例如,如果启用位指示路由并未启用),那么路由控制器220可以经由至存储器控制器240和/或主存储器250的第一路线路由存储器存取请求。

在一些实施方案中,至存储器控制器240和/或主存储器250的第一路线包括IOMMU 230,并且至存储器控制器240和/或主存储器250的第二路线并不包括IOMMU 230。另外或替代地,相较第二路线,第一路线可以包括更多对存储器存取请求的处理(例如,通过IOMMU 230)。另外或替代地,第一路线可以具有相对于第二路线较高的至存储器控制器240和/或主存储器250的时延(例如,较高平均时延)。

另外或替代地,经由第一路线来路由的存储器存取请求可以经由不同于与经由第二路线来路由的存储器存取请求关联使用的算法的算法进行地址变换。例如,第一路线上的地址变换可以利用一或多个页表将虚拟地址变换为物理地址。在一些实施方案中,第一路线利用多个页表执行地址变换。相反,第二路线上的地址变换可不利用任何页表。而是,第二路线上的地址变换可以利用通过将某值加入另一个值(例如,虚拟地址值、基于虚拟地址值来确定的偏移值、以及基址值等等)或从另一个值中减去该值来确定物理地址的存储器重定位算法。以此方式,第二路线上的地址变换可以快于第一路线上的地址变换(例如,因为存储器重定位可以快于使用页表)。

如果路由启用(方框520—是),那么过程500可以包括通过将虚拟地址与基址比较,计算偏移值(方框540)。例如,如果路由控制器220确定路由启用(例如,如果启用位指示路由启用),那么路由控制器220可以通过将存储器存取请求中标识的虚拟地址与基址比较,计算偏移值。

在一些实施方案中,路由控制器220计算偏移值作为虚拟地址和基址之间的差异。例如,路由控制器220可以从虚拟地址(例如,表示虚拟地址的值)中减去基址(例如,表示基址的值),以便计算偏移值。作为示例,假设基址值为1,000并且虚拟地址值为1,300,那么路由控制器220可以计算偏移值300(1,300-1,000=300)。

如进一步在图5中示出,过程500可以包括确定虚拟地址是否在与路由存储器存取请求关联的虚拟地址范围内(方框550)。例如,路由控制器220可以确定虚拟地址是否在如本文结合图3所述那样确定的范围内。在一些实施方案中,路由控制器220基于偏移值确定虚拟地址是否在范围内。例如,路由控制器220可以将偏移值与第一阈限值(例如,0)和/或第二阈限值(例如,长度寄存器中标识的长度值)比较,以便确定虚拟地址是否在范围内。

在一些实施方案中,路由控制器220确定一组分配的寄存器以应用到存储器存取请求。例如,可以分配多组寄存器,并且路由控制器220可以选择一组寄存器以应用到存储器存取请求。另外或替代地,路由控制器220可以将多于一组寄存器应用到存储器存取请求,直到存储器存取请求中标识的虚拟地址被确定为在与一组特定寄存器关联的虚拟地址范围内。在这种情况下,路由控制器220可以将这组特定寄存器应用到存储器存取请求。如果虚拟地址并不在任何范围内,那么路由控制器220可以经由第一路线路由存储器存取请求。

在一些实施方案中,第一虚拟地址范围会与第二虚拟地址范围重叠。在这种情况下,路由控制器220可以选择范围中的一者,并且可以将与所选择的范围关联的一组寄存器应用到存储器存取请求。

如果虚拟地址并不在范围内(方框550—否),那么过程500可以包括经由至主存储器的第一路线路由存储器存取请求(方框530)。例如,如果路由控制器220确定虚拟地址并不在范围内,那么路由控制器220可以经由至存储器控制器240和/或主存储器250的第一路线路由存储器存取请求,如本文结合方框530所述。

在一些实施方案中,当偏移值满足第一阈限值或第二阈限值时,路由控制器220确定虚拟地址并不在范围内。第一阈限值可等于零,并且第二阈限值可对应于长度值。例如,当偏移值小于零时,路由控制器220可以确定虚拟地址并不在范围内。例如,假设路由控制器220接收标识出虚拟地址900的存储器存取请求。另外,假设基址值为1,000。在这个示例中,偏移值等于-100(900-1,000=-100)。由于-100小于零,这个偏移值指示虚拟地址900在范围外(例如,因为该范围从1,000开始)。

另外或替代地,当偏移值大于或等于长度值时,路由控制器220可以确定虚拟地址并不在范围内。例如,假设偏移值等于300,并且假设长度值等于200。由于偏移值大于长度值,路由控制器220确定虚拟地址并不在范围内,并且经由所述第一路线路由存储器存取请求。在这个示例中,基址值1,000标识该范围的起始地址1,000,并且长度值200标识该范围的结束值1,199(例如,在1,000与1,199之间存在200个值)。产生偏移值300(1,300-1,000)的虚拟地址1,300在这个范围外。类似地,生成等于长度值的偏移值200的虚拟地址1,200将会在范围外。

因此,当偏移值小于零时,或者当偏移值大于或等于长度值时,路由控制器220可以确定虚拟地址并不在范围内。通过使用偏移值确定虚拟地址是否在范围内,相较直接将虚拟地址与范围的结束值比较,路由控制器220可以减少确定虚拟地址是否在范围内所需要的计算资源的量。

如果虚拟地址在范围内(方框550—是),那么过程500可以包括确定是否允许请求存取类型(方框560)。例如,如果路由控制器220确定虚拟地址在范围内,那么路由控制器220可以确定是否允许存储器存取请求中标识的存取类型。

在一些实施方案中,当偏移值满足第一阈限值和第二阈限值时,路由控制器220确定虚拟地址在范围内。第一阈限值可等于零,并且第二阈限值可对应于长度值。例如,当偏移值大于或等于零时,或者当偏移值小于长度值时,路由控制器220可以确定虚拟地址在范围内。例如,假设路由控制器220接收标识出虚拟地址1,300的存储器存取请求。另外,假设基址值为1,000。在这个示例中,偏移值等于300(1,300-1,000=300)。由于300大于零,这个偏移值指示虚拟地址1,300可为在范围内(例如,取决于长度值)。

继续其中偏移值等于300的以上示例,假设长度值等于500。由于偏移值小于长度值,路由控制器220确定虚拟地址在范围内。在这个示例中,基址值1,000标识该范围的起始地址1,000,并且长度值500标识该范围的结束值1,499(例如,在1,000与1,499之间存在500个值)。产生偏移值300(1,300-1,000)的虚拟地址1,300在这个范围内。

在一些实施方案中,路由控制器220可以通过读出存取控制位(例如,包括在浮动寄存器中),确定是否允许请求存取类型。存取控制位的值可以提供是允许还是拒绝特定存取类型(例如,读出存取、写入存取等等)的指示。

如果请求存取类型不被允许(方框560—否),那么过程500可以包括经由至主存储器的第一路线路由存储器存取请求(方框530)。例如,如果路由控制器220确定请求存取类型不被允许(例如,基于读出存取控制位),那么路由控制器220可以经由至存储器控制器240和/或主存储器250的第一路线路由存储器存取请求,如本文结合方框530所述。另外或替代地,当请求存取类型不被允许时,路由控制器220可以提供对错误的指示。

作为示例,假设标识出特定虚拟地址的存储器存取请求包括对写入主存储器250的请求。另外,假设存取控制位指示特定虚拟地址或与特定虚拟地址关联的物理地址是只读的。在这种情况下,路由控制器220经由向主存储器250的第一路线(例如,包括IOMMU 230)路由存储器存取请求。IOMMU 230可以拒绝存取,可以提供错误等等。

如果请求存取类型是允许的(方框560—是),那么过程500可以包括通过将偏移值和浮动值组合,确定与虚拟地址对应的物理地址(方框570)。例如,如果路由控制器220确定请求存取类型是允许的(例如,基于读出存取控制位),那么路由控制器220可以将偏移值和浮动寄存器中标识的浮动值组合,以便确定对应于虚拟地址的物理地址。

作为示例,存储器存取请求可以包括读出请求,并且存取控制位可以指示读出请求是允许的。另外或替代地,存储器存取请求可以包括写入请求,并且存取控制位可以指示写入请求是允许的。在这些情况下,路由控制器220可以基于虚拟地址和浮动寄存器中标识的浮动值,计算对应于虚拟地址的物理地址。

在一些实施方案中,路由控制器220通过将偏移值和浮动值组合(例如,加入、减去等等),确定物理地址。例如,假设路由控制器220已经确定偏移值300,如本文其它地方所述。另外,假设路由控制器220标识浮动寄存器中的浮动值400。路由控制器220可以将这些值加入以确定物理地址值700(300+400=700)。

如进一步在图5中示出,过程500可以包括经由至主存储器的第二路线路由存储器存取请求(包括物理地址)(方框580)。例如,路由控制器220可以将存储器存取请求向与主存储器250关联的确定物理地址进行路由。在一些实施方案中,路由控制器220经由至主存储器250的第二路线路由存储器存取请求。

如本文其它地方所述,至存储器控制器240和/或主存储器250的第二路线可不包括IOMMU 230。另外或替代地,相较第一路线,第二路线可能需要更少对存储器存取请求的处理。另外或替代地,第二路线可以具有相对于第二路线较低的至存储器控制器240和/或主存储器250的时延(例如,较低平均时延)。另外或替代地,经由第二路线来路由的存储器存取请求可以经由不同于与经由第一路线来路由的存储器存取请求关联使用的算法的算法进行地址变换。.另外或替代地,第二路线可以使用一或多种预测算法(例如,缓冲、前瞻等等),相对于第一路线来提高性能。另外或替代地,第一路线可以基于存储器存取请求来致使将执行一组操作,并且第二路线可以基于存储器存取请求来致使将执行该组操作中的子集。

将存储器存取请求路由到主存储器250可以致使信息从对应于存储器存取请求中标识的虚拟地址的物理地址读出和/或向对应于存储器存取请求中标识的虚拟地址的物理地址写入。在一些实施方案中,路由控制器220和/或存储器控制器240在多个外围装置210和/或一个外围装置210与中央处理单元之间提供高速缓存一致性。例如,存储器控制器240可向第一装置的高速缓存控制器提供第二装置写入主存储器250的特定物理地址的指示。高速缓存控制器可以修改与第一装置关联的高速缓存,以便确保高速缓存一致性。例如,高速缓存控制器可以将与特定物理地址关联的经高速缓存的写入操作标记为无效,或者可以刷新与特定物理地址关联的经高速缓存的读出操作。

以此方式,路由控制器220可提供一种加速与特定存储器资源(诸如帧缓冲器)关联的存储器存取请求的方式。另外,路由控制器220可以允许外围装置(诸如图形处理单元)在虚拟化计算环境中操作,同时以接近非虚拟化计算环境的水平的水平执行。

虽然图5示出过程500的示例方框,但是在一些实施方案中,过程500包括除了图5所绘那些外的额外方框、更少方框、不同方框或不同地布置的方框。另外或替代地,过程500的方框中的两个或更多个可以并行执行。

图6A-6E是与图5所示示例过程500相关的示例实施方案600的图示。图6A-6E示出经由包括IOMMU 230的第一路径路由存储器存取请求的各种路由决策的示例。

如图6A所示,并且如由附图标记605所示,假设GPU 210将存储器存取请求提供给路由控制器220。如图所示,假设存储器存取请求标识虚拟地址100,标识写入存取类型,并且标识要写入与虚拟地址100对应的物理存储器地址的一些信息。假设路由控制器220接收请求,并且确定浮动寄存器435中存储的启用位的值。如由附图标记610所示,假设启用位存储值0,其指示了经由至主存储器250的第二路线(例如,不包括IOMMU 230的路线)路由存储器存取请求禁用。因此,如由附图标记615所示,路由控制器220经由包括IOMMU 230的第一路线将存储器存取向存储器控制器240进行路由。

出于图6B的目的,假设路由控制器220从GPU 210处接收相同存储器存取请求。然而,在这种情况下,假设路由控制器220确定经由第二路线来进行的路由启用(例如,确定启用位存储值1)。如由附图标记620所示,假设路由控制器220确定基址寄存器405中存储的基址值200。如由附图标记625所示,路由控制器220从虚拟地址值100中减去基址值200,以便生成偏移值-100(100–200=-100)。如由附图标记630所示,路由控制器220确定偏移值为小于零,并且因此虚拟地址100在与经由第二路线来进行的路由关联的虚拟地址范围外。因此,如由附图标记635所示,路由控制器220经由包括IOMMU 230的第一路线将存储器存取向存储器控制器240进行路由。

如图6C所示,并且如由附图标记640所示,假设GPU 210将不同存储器存取请求提供给路由控制器220。如图所示,假设存储器存取请求标识虚拟地址800,标识写入存取类型,并且标识要写入与虚拟地址800对应的物理存储器地址的一些信息。出于图6C的目的,假设经由第二路径来进行的路由启用,并且基址值为等于200(例如,如图6B所示)。

如由附图标记645所示,假设路由控制器220从虚拟地址值800中减去基址值200,以便生成偏移值600(800–200=600)。由于偏移值为大于零,路由控制器220确定将偏移值与长度寄存器410中存储的长度值比较。如由附图标记650所示,假设路由控制器220确定长度寄存器410中存储的长度值500。如由附图标记655所示,路由控制器220将偏移值与长度值比较,确定偏移值大于长度值,并且因此确定虚拟地址800并不在要经由第二路径路由的虚拟地址范围内。因此,如由附图标记660所示,路由控制器220经由包括IOMMU 230的第一路线将存储器存取向存储器控制器240进行路由。

如图6D所示,并且如由附图标记665所示,假设GPU 210将不同存储器存取请求提供给路由控制器220。如图所示,假设存储器存取请求标识虚拟地址600,标识写入存取类型,并且标识要写入与虚拟地址600对应的物理存储器地址的一些信息。出于图6D的目的,假设经由第二路径来进行的路由启用,基址值为等于200,并且长度值为等于500。

如由附图标记670所示,路由控制器220从虚拟地址值600中减去基址值200,以便计算偏移值400(600–200=400)。如由附图标记675所示,路由控制器220确定偏移值400小于长度值500。基于这一确定,路由控制器220确定虚拟地址600在与经由第二路线来进行的路由关联的虚拟地址范围内。

假设图6E继续图6D所示示例,并且由路由控制器220接收的存储器存取请求中标识的虚拟地址600在与经由第二路线来进行的路由关联的虚拟地址范围内。如图6E所示,并且如由附图标记680所示,假设路由控制器220确定浮动寄存器435中存储的存取控制位存储值1,其指示了只读存取控制启用。假设存储器存取请求标识写入操作。因此,并且如由附图标记685所示,路由控制器220经由包括IOMMU 230的第一路线将存储器存取向存储器控制器240进行路由。然而,如果存储器存取请求标识读出操作,那么路由控制器220将会确定对应于虚拟地址600的物理地址,并且将会经由至存储器控制器240的第二路线(例如,不包括IOMMU 230的路线)路由存储器存取请求。

如上指示,图6A-6E仅作为示例来提供。其它实例是可能的,并且可不同于关于图6A-6E所述那样。

图7A和图7B是与图5所示示例过程500相关的另一示例实施方案700的图示。图7A和图7B示出经由不包括IOMMU 230的第二路径路由存储器存取请求的路由决策的示例。

如图7A所示,并且如由附图标记705所示,假设GPU 210将存储器存取请求提供给路由控制器220。如图所示,假设存储器存取请求标识虚拟地址699,标识写入存取类型,并且标识要写入与虚拟地址699对应的物理存储器地址的一些信息。如由附图标记710所示,假设启用经由第二路线来进行的路由,并且还启用了写入存取。如由附图标记715所示,路由控制器220从虚拟地址值699中减去基址值200,以便计算偏移值499(699–200=499)。如由附图标记720所示,路由控制器220确定偏移值499为大于零,并且小于长度值500。基于这一确定,路由控制器220确定虚拟地址699在与经由第二路线来进行的路由关联的虚拟地址范围内。

如图7B所示,并且如由附图标记725所示,假设路由控制器220确定浮动寄存器435中存储的浮动值400。如由附图标记730所示,路由控制器220将浮动值400加入偏移值499,以便生成物理地址值899(499+400=899)。如由附图标记735所示,路由控制器220经由不包括IOMMU 230的第二路线将存储器存取请求(包括标识出物理地址899的信息)向存储器控制器240进行路由。

如上指示,图7A和图7B仅作为示例来提供。其它实例是可能的,并且可不同于关于图7A和图7B所述那样。

前述公开内容提供说明和描述,但是并不旨在穷举或将实施方案限为所公开的精确形式。根据上述公开内容,修改和变化是可能的,或者可以从实施方案实践中获得。

如本文所使用,装置或部件旨在广泛地解释为硬件、固件或硬件与软件的组合。

一些实施方案在本文中结合阈值进行描述。如本文所使用,满足阈值可指大于阈值、多于阈值、高于阈值、大于或等于阈值、小于阈值、少于阈值、低于阈值、小于或等于阈值、等于阈值等等的值。

将会清楚,在如图所示实施方案中,如本文所述的系统和/或方法可以许多不同形式软件、固件和硬件实施。用于实施这些系统和/或方法的实际软件代码或专用控制硬件并不限制实施方案。因此,系统和/或方法的操作和行为在不参考特定软件代码的情况下进行描述,应当理解,软件和硬件可设计成基于本文中的描述实施系统和/或方法。

即使各特征的特定组合在权利要求中陈述和/或在本说明书中公开,这些组合也不旨在限制可能实施方案公开内容。实际上,这些特征中的许多特征可以未在权利要求中具体陈述和/或在本说明书中公开的方式组合。虽然以下所列出的每个从属权利要求可直接取决于仅仅一个权利要求,但是可能实施方案公开内容包括与权利要求组中的每个其它权利要求组合的每个从属权利要求。

本文中使用的元件、动作或指令不应被解释为关键或必要的,除非明确描述如此。此外,如本文所使用,冠词“一个”和“一种”旨在包括一或多个项目,并且可与“一或多个”可互换地使用。类似地,“组”旨在包括一或多个项目,并且可与“一或多个”可互换地使用。在仅预期一个项目的情况下,使用术语“一个”或类似语言。另外,如本文所使用,术语“具有”旨在是开放性的术语。另外,短语“基于”旨在表示“至少部分基于”,除非另外明确说明。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1