用于输入/输出计算资源控制的系统和方法与流程

文档序号:15072240发布日期:2018-08-01 00:06阅读:364来源:国知局

本公开总体涉及计算系统领域,并且更具体地涉及隔离输入/输出(i/o)计算资源。



背景技术:

许多软件应用程序被设计为在多个处理核心或服务器上并行运行。但是,没有有效的i/o资源划分技术可用于以足够小的粒度隔离i/o资源。

附图说明

通过以下结合附图的详细描述,将容易理解实施例。为了便于描述,相似的附图标记表示相似的结构元件。在附图的图中通过举例而非限制的方式来说明实施例。

图1是根据各种实施例的结合有本公开的i/o资源隔离技术的说明性计算系统的示例框图。

图2是根据各种实施例的结合有本公开的i/o资源隔离技术的说明性计算系统的详细示例框图。

图3是根据各种实施例的用于在存储器存取期间提供标签标识符(标签id)的示例过程流程图。

图4示出根据一些实施例的被配置为存储标签id的示例性模型专用寄存器(msr)。

图5是根据各种实施例的用于在存储器存取期间向i/o设备提供标签id的示例过程流程图。

图6示出根据各种实施例的可以包括进程地址空间标识符(pasid)并且可以用于隔离i/o资源的示例事务层分组(tlp)前缀。

图7示出根据各种实施例的可用于使能pasid能力以用于硬件设备中的队列的分配的示例性pasid扩展能力结构。

图8示出根据各种实施例的可用于支持pasid能力以用于在硬件设备中的队列的分配的示例pasid能力寄存器。

图9示出根据各种实施例的示例每队列pasid寄存器。

图10示出根据一些实施例的示例每队列接收描述符尾部寄存器。

图11是根据各种实施例的用于保护i/o设备划分的示例过程流程图。

图12是根据各种实施例的用于利用主机设备的硬件设备的资源的示例过程流程图。

具体实施方式

本文公开了用于隔离输入/输出计算资源的系统和方法。例如,在一些实施例中,主机设备可以包括处理器和与处理器耦合的逻辑,逻辑用于识别用于主机设备的进程或容器的标签id。标签id可以标识主机设备的硬件设备的队列对,用于从处理器到硬件设备的出站事务,出站事务由进程或容器实施。逻辑可以进一步将标签id映射到与使用所识别的队列对的、从硬件设备到处理器的入站事务相关联的pasid。进程或容器可以使用pasid通过所识别的队列对来实施出站事务。

硬件设备可以包括逻辑,其用于执行对由主机设备发起并与指示硬件设备的队列对的pasid相关联的出站事务的特权检查。pasid可以是与出站事务相关联的主机设备的进程或容器的pasid。逻辑可以通过将pasid与存储在硬件设备的每队列pasid寄存器中的pasid值相比较来执行特权检查,并且至少部分地基于比较的结果而允许出站事务。

在计算方面,处理器不再主要通过增加时钟频率来“扩大”。相反,每一代处理器都在增加内核的数量。为了利用这些多个核心,软件可以运行并行的工作负载。在具有专用i/o资源的指定内核上运行工作负载成为扩展性能的最佳实践。从安全角度来看,可能需要隔离i/o资源。几种技术包括存取控制服务(acs)、i/o存储器管理单元(iommu)提供的地址转换服务(ats)和单根i/o虚拟化(sr-iov)虚拟功能(vf)机制。sr-iov被设计成在例如用于具有多功能(mf)、单功能(sf)和/或vf能力的pcie设备的外围组件快速互连(pcie)设备级别上提供i/o隔离。

但是,这些隔离级别可能不足以支持利用高核心数处理器部署的服务器所需的精细粒度调度。此外,出现的“基于容器”的虚拟化的用途意味着多个(例如,数千个)“虚拟执行环境”可以在任何给定的时间点在这些高核心数服务器上活动。高核心数和大量活动“线程”的这种组合可能对共享i/o设备提出挑战。由于引入高吞吐量/低延迟网络适配器(例如25/50/100gbs以太网网络接口控制器(nic))和非易失性和持久性存储器技术,这些挑战可能会加剧。

例如,从今天的10gbsnic变化到100gbsnic,每个数据包的处理时间可能会从1,230ns降到12.3ns。以这些分组速率运行可能需要在由多个工作负载共享的服务器上处理网络分组的方式发生实质性改变。此外,当前一代的基于nand的非易失性存储器(nvm)设备可以驱动单个服务器上的数百万个i/o设备用于分布式存储工作负载,并结合更高容量的nic,这可能需要高i/o资源利用率。

以与主机中央处理单元(cpu)和动态随机存取存储器(dram)或高速缓存资源被划分的方式相同的方式划分i/o资源可能是可取的。

标准pci(例如,nic操作)包括可以利用本文中描述的实施例的队列基础结构。为了允许多个工作负载实例驱动同一pcie设备上的每个专用io资源(例如,接收和发送队列),粒度资源隔离机制的伪设备(例如队列)级别是必需的。入站直接存储器存取(dma)i/o存取(iommu)可用于提供伪设备粒度的安全存取。举例来说,在一些实施例中,主机设备可识别用于主机设备的进程或容器的pasid且将pasid与主机设备的硬件设备的个别队列对相关联。队列对可以包括两个互补的队列,这些队列在与pasid关联时可以由进程或容器拥有。

也可能需要在出站cpui/o存取的一方提供伪设备级别的安全i/o存取。sr-iov可能是解决问题的方法之一。通过总线、设备、功能(bdf),每个独立资源可以作为单独的伪设备暴露。支持sr-iov的pcie设备可以注册用于资源隔离的空间重新映射。

在扩展方面,sr-iov的使用可以用于100+级别的实例隔离。然而,对于通常需要一千(1000+)级实例的操作系统级虚拟化来说,sr-iov可能是不够的。实际上,现代网络接口卡已经提供了一千多个队列,但是没有安全的方法可以将这些队列暴露给用户空间进程。

这里公开的各种实施例可以提供用于解决出站cpui/o安全存取问题的技术。在实施例中,cpu运行时上下文可以记录唯一标识符(id),其可以由出站请求事务用于端点来检查其特权。这个唯一id可能属于专用的i/o资源。例如,唯一id可以表示存取资源所属的已划分的资源id或命名空间id。对于每个孤立执行实例(例如进程,容器),id可以是唯一的,以便可以在上下文交换期间加载它。执行实例的最大数量可能取决于唯一id的位宽。所描述的实施例可以利用现有的设备隔离机制(例如,iommu,acs用于mf,sr-iov)的所有功能,并且为频繁出站寄存器更新提供细粒度的安全方法。

例如,当cpu尝试存取i/o(例如,存储器映射i/o(mmio)或端口映射i/o(pio))时,出站事务可以携带唯一id到pcie端点(例如,i/o设备)。关联的标签id可以识别专用i/o设备的命名空间。根联合体可以将标签id与pcie事务相关联,pcie事务可以是从原始存储器请求转换的。将标签id与出站事务相关联可能有不同的方法。例如,定制的tlp前缀可以被定义并用作标签id,这可能是麻烦的并且可能需要扩展现有的pcie规范。

这里公开的实施例可以利用iommu的pasid功能和pcie规范的pasidtlp前缀。例如,pasidtlp前缀可以用于入站dmai/o事务,用于实例级iommu转换,以及用于并行dma存取中的已划分的i/o的隔离,如上面简要讨论的。pasidtlp前缀可以在随后的出站i/o事务中重用以定义标签id。

通常,pasidtlp前缀可能不会用于出站事务。然而,之前在入站事务中使用的pasid(例如,pasidtlp前缀)可以在出站事务中使用,因为它可以被系统辨识。例如,pasidtlp前缀形式的标签id可以由pcie设备(例如nic)辨识。因此,pcie设备可以使用标签id在寄存器存取期间执行特权检查。

在下面的详细描述中,参考形成本文一部分的附图,其中相同的附图标记始终表示相同的部分,并且其中通过示例性的方式示出了可以实施的实施例。应该理解的是,在不脱离本公开的范围的情况下,可以利用其他实施例并且可以进行结构或逻辑上的改变。因此,下面的详细描述不是限制性的。

各种操作可以以最有助于理解所要求保护的主题的方式依次被描述为多个离散的动作或操作。然而,描述的顺序不应该被解释为暗示这些操作必须是顺序相关的。特别是,这些操作可能不会按照呈现的顺序执行。所描述的操作可以以与所描述的实施例不同的顺序来执行。在附加实施例中可以执行各种附加操作和/或可以省略所描述的操作。

为了本公开的目的,短语“a和/或b”意指(a)、(b)或(a和b)。为了本公开的目的,短语“a,b和/或c”是指(a)、(b)、(c)、(a和b)、(a和c)、(b和c)或(a,b和c)。

说明书使用短语“在实施例中”或“在各实施例中”,其可以分别指代一个或多个相同或不同的实施例。此外,关于本公开的实施例使用的术语“包括”,“包含”,“具有”等是同义的。如本文中所使用的,术语“逻辑”可以指的是执行一个或多个软件或固件程序的专用集成电路(asic)、电子电路、处理器(共享的、专用的或成组的)和/或存储器(共享的、专用的或成组的)、组合逻辑电路和/或提供所述功能的其他合适的硬件,是这些的一部分,或包括这些。如本文所使用的,术语“输入/输出资源”或“i/o资源”可以指位于pcie设备中的硬件可配置组件(例如,接收/发送队列对和请求/响应队列对)。如本文所使用的,术语“容器”可以指用于在单个控制主机上运行多个隔离访客系统的操作系统级虚拟化环境。

图1是根据各种实施例的结合有本公开的i/o资源隔离技术的说明性计算系统100的示例框图。计算系统100可以包括主机设备182和一个或多个硬件设备(例如,pciei/o设备,下文中的i/o设备)184。主机设备182可以包括cpu,其包括一个或多个处理核心104,与cpu(处理核心)104耦合的交换结构106以及与交换结构106和iommu110耦合的根联合体112。在一些实施例中,主机设备182可以被提供在片上系统(soc)上。

计算系统100可以包括与cpu(处理核心)104耦合的逻辑120,根据本文中描述的实施例,其被配置为管理cpu(处理核心)104和i/o设备184之间的事务,诸如从cpu104到i/o设备184的出站事务。逻辑120可以识别用于主机设备182的进程或容器132的标签id130,并且经由结构106将标签id130提供给根联合体112。标签id130可以标识i/o设备的一部分(例如,队列对134)用于从cpu104到i/o设备184中的选定一个(例如,由标签id130标识的队列对134)的、由进程或容器132实施的出站事务。逻辑120可以在根联合体112的级别配置映射表,以将标签id130映射到pasid。映射到的pasid可以与从i/o设备184到cpu104的入站事务相关联,该入站事务使用所识别的队列对134(例如,由iommu110提供)。例如,逻辑120可以与逻辑组件124相关联,以在pasid储存库126中存储与i/o设备184和cpu104之间的入站事务相关联的pasid。逻辑120可以被配置为按需从pasid储存库中检索pasid126。根联合体112可以使用pasid经由所识别的队列对来实施cpu104和i/o设备184之间的出站事务。在硬件设备级别,逻辑120可以使得确定队列对134是否是pasid使能的,例如是否可以执行与pasid相关联的事务。基于该确定的结果,可以执行与进程132相关联的事务。下面详细讨论这些和其他实施例。

图2是根据各种实施例的结合有本公开的i/o资源隔离技术的说明性计算系统100的详细示例框图。为了描述的目的,图1和图2的相似组件用相同的数字表示。

如参考图1所描述的,主机设备182可以包括一个或多个处理核心104。这些处理核心104可以单独地或以任何期望的组合被分配给在主机设备182上运行的各种进程或容器。如本文所使用的,术语“实例”可能指的是一个进程或容器。多个实例可以在主机设备182上并行运行,通过将不同的处理核心104分配给它们。例如,在图2的计算系统100中,处理核心104中的一个,即核心3,由虚线142示出为被分配给特定实例“实例x”或由特定实例“实例x”所拥有。计算系统100的其他资源也可以被分配给不同实例从而实现并行操作,如在此详细讨论的。

主机设备182可以包括系统代理和根联合体112。系统代理和根联合体112可以通过包括将处理器联合体连接到计算系统100的i/o子系统和存储器子系统的一个或多个硬件组件,来提供根联合体功能。

如上所述,主机设备182可以包括交换结构(例如,环形总线)106。交换结构106可以提供核心104与主机设备182的其他组件之间的通信路径。

如上面进一步描述的,主机设备182可以包括iommu110(图2中未示出),其可以用于将i/o总线(未示出)连接到主存储器,并且可以将物理地址映射到虚拟地址,并且可以将虚拟地址重新映射到物理地址。系统代理和根联合体112可以与iommu110通信。

主机设备182可以包括逻辑120(例如,以特权代理的形式)220。特权代理220可以被配置为执行各种资源隔离操作,诸如将不同的核心104分配给不同的实例,以及将i/o资源划分用于不同的实例,如下所述。在各种实施例中,特权代理220可以包括用于不同的i/o设备184的不同的设备内核驱动程序。

主机设备182还可以包括集成存储器控制器(imc)188。imc188可以管理去往和来自处理器内核104的数据流。

i/o设备184可以包括任何合适的联网和存储硬件设备,诸如pcie兼容联网和存储硬件设备。例如,图2中所示的i/o设备184包括nic122。在各种实施例中,计算系统100可以包括比图1中示出的示例更多或更少的硬件设备。例如,计算系统100可以包括多于一个的nic,或者可以包括被配置用于根据非易失性存储器主机控制器接口规范(nvmhci)存取固态驱动器(ssd)的非易失性存储器快速(nvme)控制器(未示出)。例如,计算系统100可以包括两个或更多个nic(如本文中参照nic122所讨论的那样配置)和/或两个或更多个nvme控制器。

i/o设备184可以与特权代理120通信。图2示出了位于特权代理220和nic122之间的通信路径114。特权代理220可以使用通信路径114分别在主机设备182上运行的不同实例之间划分和隔离nic122的资源,如下文所述。不同的i/o设备184可以包括不同数量的队列对(并且还可以支持不同的队列方案)。

每个i/o设备184可以包括一个或多个伪设备(队列对)。如本文所使用的,“队列对”可以指两个互补队列(例如,接收队列和发送队列,请求队列和响应队列,或提交队列和完成队列)。如图所示,nic122可以包括多个队列对伪设备(队列对)134。这里公开的各种技术可以使主机设备182的特权代理220能够将i/o设备184的各种队列对分配给在主机设备182上运行的实例。该分配的粒度可以是单个队列对级别,这是通过常规资源分配技术不能实现的能力。

每个i/o设备184可以与系统代理和根联合体108通信。例如,nic122可以经由通信路径114与系统代理和根联合体112耦合。

计算系统100可以包括根表、一个或多个上下文表、一个或多个pasid表以及一个或多个分页结构(未示出)。pasid表中的条目可以包括pasid和用于对被标记有相应的pasid的请求进行转换的第一级转换结构的根。

i/o设备184可以包括或有权存取用于为其中的一个或多个队列对存储pasid值的寄存器。在图2的例子中,nic122可以在与相应的队列对100、200(未示出)、300(未示出)等相关联的寄存器134的部分中存储pasid,例如“100”、“200”,“300”。存储在与队列对相关联的寄存器中的pasid值可以指示主机设备182“拥有”哪个实例或具有分配给它的那个队列对。

主机设备182(例如,逻辑120)可以识别主机设备182的进程或容器(实例)的标签id,并且将标签id映射到与i/o设备184的单独队列对相关联的pasid。在与pasid关联后,队列对可以由实例拥有。如本文所使用的,当实例可以排除其他实例地使用队列对时,队列对可以被该实例“拥有”或“分配给”该实例。被配置为执行本文讨论的主机设备182的操作的逻辑可以分布在主机设备182的任何数量的合适的组件中。例如,在一些实施例中,本文讨论的主机设备182的逻辑可以被包括在特权代理220(其可以是例如特权软件代理)中。

参照图2的例子,主机设备182可以包括用于识别用于实例x的标签id(例如与命名空间id100相对应的标签id100)的逻辑。如已知的,命名空间是被配置为将与事务(例如,入站或出站)相关联的进程组合在一起的软件构造。事先,命名空间id100可以与伪设备(队列对)100相关联。主机设备182可以将标签id100与关联于nic122的队列对100(例如,在之前的事务中)的pasid进行映射,从而将队列对100分配给实例x。在一些实施例中,特权代理220可以执行该关联。因此,可以使用命名空间id100的指定的实例x现在被允许使用一个队列对。专用队列对寄存器可以与这个id相关联。在命名空间100的上下文中,工作负载实例x可以在核心3上的容器x中执行。当主机设备182正在执行不可缓存的读取或写入(ncrd/ncwr)事务时,标签id100可以由根联合体112取得,然后被用于到nic122的pcie事务中,如图2所示。nic122可利用命名空间id100来执行关于与队列对寄存器144相关联的资源id的特权检查。

相应地,可以如参照图1-2简要讨论地设置cpu与已划分的pcie设备资源之间的虚拟通道。虚拟通道可以由两个区段(segment)组成:cpu(处理器核心)104和根联合体112之间的区段,以及根联合体112和pcie设备(例如i/o设备184,例如nic122)之间的区段。

从cpu(处理器核心)104到根联合体112的第一区段可以提供在mmio/pio存储器请求/响应期间携带新的标签id(例如由命名空间id所识别)。如果pcie设备(nic122)具有pasidtlp功能,则从根联合体112到pcie设备(nic122)的第二区段可以利用pasidtlp前缀(如上所述)来携带pcie事务中的标签id(例如命名空间id)。在寄存器存取请求到达设备(nic122)之后,设备可以通过将标签值与与每个资源(例如,在nic122中的每个队列对寄存器144)相关联的预配置的资源id进行比较来执行特权检查(例如,检查许可)。

如上所述,具有pasidtlp能力的设备(nic122)通常可以将带有pasidtlp前缀的入站事务请求发送给主机设备182的根联合体112。在本文中讨论的实施例中,主机设备182可以请求i/o设备184(例如,nic122)支持从根联合体122接收具有pasidtlp前缀的出站请求。硬件设备182的扩展能力可以如下所述由扩展能力报头通告。

总之,所描述的实施例提供:在由主机设备182发起的mmio/pio存取期间携带标签(例如命名空间id)值,通过pasidtlp将标签值(例如,命名空间id)发送到pcie设备,对寄存器存取执行特权检查,并执行安全的i/o资源划分。

图3是根据各种实施例的用于在存储器存取期间提供标签id的示例过程流程图300。过程300可以例如由主机设备182执行。

在302处,主机设备182可以从cpu104接收存储器存取(例如,mmio/pio)请求,例如不可缓存的读取或写入(ncrd/ncwr)事务请求。

在304处,主机设备182可以确定存储器存取请求是否包括标签id。存储器请求可以与标签id关联,标签id的值可以来自特定的寄存器。例如,主机设备182可以在请求之前从队列对池中识别队列对作为未使用的队列对,生成与所识别的队列对相关联的标签id,并且使得针对该队列对的标签id被存储在寄存器中。寄存器可以是模型专用寄存器(msr)。

图4示出根据一些实施例的被配置为存储标签id的示例msr。如所示出的,可以引入msr400来存储运行时标签id(例如,命名空间id)。例如,msr400可以是32位宽的寄存器,其中可以使用最低有效20位来存储标签值。分配用于存储标签id的20位的大小可以允许大约一百万个隔离的已划分的资源。msr寄存器中的标签id值可以在任务上下文交换期间被加载(例如,由逻辑120)。相应地,标签id值可以被存储在任务控制块中。

参考图3,如果主机设备182在304处确定存储器请求不包括标签id,例如所请求的地址不代表i/o设备,则过程300可以移动到306,其中,dram存取可以是以常规方式来执行,例如通过imc188。如果主机设备182在304处确定存储器请求包括标签id,则主机设备182可以在308处从存储器请求中检索标签id值,并将其提供给到相应的根联合体112。

在310处,如果pcie端点是具有pasid能力的,则主机设备182可以将标签id值转换成可以在pcie子系统中使用的pasid,并且执行与pasid值相关联的存储器映射请求。例如,主机设备182可以将标签id映射到与使用所识别的队列对的入站事务相关联的pasid,例如,与标签id中提供的具有相同值的1:1传递映射(pass-throughmapping)(例如,为了节省一些寄存器空间)。任何存储器存取失败都可能导致mmio/pio异常,这可能会导致异常进展序列(exceptionprogresssequence)。

图5是根据各种实施例的用于在存储器存取期间向i/o设备提供标签id的示例过程流程图500。过程500可以例如由主机设备182执行,诸如在pcie根联合体级别。假定参照图3-4描述的过程已经完成。

在502处,主机设备182可以通过mmio/pio地址确定pcie目的地bdf编号。通常使用术语“bdf编号”(例如,在pcie规范中)来标识pcie设备。因此,bdf可以被认为是一种格式,并且bdf编号是以该格式存在的值。bdf编号可以填充到请求事务中,并且可以在响应事务中用作请求者id。

在504处,主机设备182可以确定所请求的事务的端点(例如,图3中标识的队列对)是否被使能有pasid能力。换句话说,可以确定端点是否可以接受并辨识与请求的事务相关联的pasid。

如果端点被确定为是具有pasid能力的设备,则在506处,主机设备182可以将pasid包括在pasidtlp前缀(图6)中并且填充pcie事务分组。例如,为了封装(encapsulate)pcie事务,需要填充一些必要的数据。内容可以包括pasidtlp中的bdf编号、地址和pasidid。换句话说,可以写入必要的数据用于要执行的事务。

在508处,主机设备182可以将pcie事务生成到端点。pcie根联合体可能会检查pcie事务完成是成功还是失败。

图6示出根据各种实施例的可以包括pasid并且可以用于隔离i/o资源的示例性tlp前缀600。具体而言,与出站事务相关联的实例的pasid可被包括在tlp前缀600的pasid字段602中。tlp前缀600的结构可以是在pciexpress规范中规定的结构,但不能如本文中公开的用于支持i/o计算资源隔离。

使用pasidtlp前缀可以是从根联合体到端点携带标签id的不同方式之一,并且被用作示例,而不是限制本公开。使用pasidtlp前缀的原因是因为它包含在标准的pciexpress规范中。此外,pcie设备实现一组用于入站和出站事务目的的pasid寄存器可能是合理的。通常,只要主机设备的cpu和上述硬件设备的端点被配置为相互通信,任何定制的tlp前缀都可以被定义为采用标签id。图6的tlp前缀的格式可以不限于本文中描述的示例。

为了通告pasidtlp前缀的能力,可以在pcie配置空间中使用扩展能力报头。由于pasid通常用于到根联合体的入站请求(例如dma),因此pciexpress规范没有描述端点能够用pasidtlp前缀来处理接收事务。这个能力可以被添加到规范中,以便通告端点的与pasid相关联的接收能力。

图7说明根据各种实施例的可用于使能pasid能力以用于i/o设备184中的队列的分配的示例pasid扩展能力结构700。pasid扩展能力结构700可以包括pasid扩展能力报头702、pasid控制寄存器704和pasid能力寄存器800(参考图8描述)。pasid扩展能力结构可以是pciexpress规范中规定的结构,但是其在本文中公开的用于支持i/o计算资源隔离的用途不是。pasid扩展能力结构可以被包括在i/o设备184中。根据各种实施例,pasid控制寄存器可以用于支持用于i/o设备184中的队列分配的pasid能力。具体地,pasid控制寄存器704的全局pasid使能(en)字段(未示出)可由主机设备182设置以允许主机设备182(例如,特权代理120)使能pasid扩展。如果i/o设备184支持pasid,则该能力可以在pasid扩展能力结构700中被通告,但是该能力可以仅在设置全局pasid使能字段后被使能。pasid控制寄存器400的其余字段可以按照pciexpress规范中的规定使用。pasid控制寄存器400可以是只读的。

图8示出了根据各种实施例的示例性pasid能力寄存器800,其可以被用来支持pasid能力以用于i/o设备184中的队列的分配。特别地,pasid能力寄存器800的最大pasid宽度(maxpasidwidth)字段802可以由主机设备182设置为值m,使得2m大于或等于i/o设备184的队列的数量(以便每个队列可以与唯一的pasid相关联,如果需要的话)。

为了与现有的pcie设备兼容,可以定义一个兼容的扩展标志来通告从根联合体接收带有pasidtlp前缀的出站请求的能力。如图7所示,字段“c”[bit3]标志804可用于通告该扩展。pasid能力寄存器800的剩余字段可以按照pciexpress规范中的规定来使用。pasid能力寄存器800从软件的角度来看可以是只读的,但是可以由i/o设备184来设置。

图9示出根据各种实施例的示例每队列pasid寄存器900。每队列pasid寄存器900可以与i/o设备184的特定队列相关联。每队列pasid寄存器900可以是一组32位全局寄存器,其数量可以取决于该设备支持多少个队列对。每个32位寄存器可以属于一个队列对。

每队列pasid寄存器900可以包括例如pasid字段902、pasid使能字段908和两个保留字段910和912。pasid字段902可以用于存储与队列相关联的pasid(例如,如在将队列分配给实例时由主机设备182提供给i/o设备184的)。

pasid_en字段908可以用作每队列pasid已使能指示符。这个字段也可以被称为pasid_en[n],其中n是i/o设备184内的队列对的索引。pasid_en字段908可以是单个位,当被设置时,指示i/o设备184被允许使用将pasid包括在pasid字段902中的tlp。因此,只有在pasid_en字段908被设置的情况下,pasid字段902才可以生效。换句话说,只有在pasiden字段908的位被设置的情况下,i/o设备184才可能能够使用存储在pasid字段902中的pasid值。在指定的队列对的pasid_en未被设置时,不可能在指定的队列对上发生特权检查。保留字段910和912可以被保留用于未来目的。

尽管在图9中示出了每个字段的特定示例数量的位以及针对每个字段的特定初始值,但这些仅仅是示例,并且可以使用任何适当数量的位或初始值。另外,每队列pasid寄存器可以采用与图1中给出的示例完全不同的形式。

如参考图1-9所述,配置资源分配的请求可以由特权驱动器软件执行,诸如图1-2的逻辑120(特权代理220)。在实施例中,这样的软件可以在系统100的内核内部运行。特权代理220可以承担分配和拆分i/o资源到用户空间实例(进程/容器)的责任。当用户空间实例申请特定的设备资源时,内核知道该实例正在使用哪个命名空间id(标签id)。内核设备驱动程序获取该命名空间id并将其放入相关联的i/o资源的特定pasid寄存器(图9)。对于每个进程上下文交换(processcontextswitch),可以将命名空间id加载到msr中,以提供命名空间id到标签id值的映射。当mmio读/写事务发生时,msr中的标签id值可以被cpu用来生成带有pasidtlp前缀的pcie消息。

图10是根据各种实施例的用于保护i/o设备划分的示例过程流程图1000。过程500可以例如由主机设备182(诸如在内核内运行的特权代理220)来执行。

在1002处,主机设备182可以从孤立的用户空间实例接收存储器存取请求,如参照图3所描述的。例如,该请求可以是经由诸如i/o设备184(nic122)之类的i/o设备的读或写存储器存取请求。

在1004处,主机设备182可以确定尚未使用的队列对是否可以被用在请求中指定的i/o设备(例如,i/o设备184)中用于所请求的事务。如果没有未使用的队列对可用(例如,所请求的i/o设备的所有队列对都被分配给了其他实例),则过程1000可以前进到1006并返回错误。

否则,过程1000可以前进到1008,在此,主机设备182可以确定指定的i/o设备是否具有pasid能力。如果确定i/o设备不具有pasid能力,则过程1000可以前进到1010,在1010处,主机设备182可以确定i/o设备的其他队列对是否可能被分配给另一个命名空间。如果确定i/o设备的其他队列对被分配给另一个命名空间,则在1012处,过程1000可以返回错误。否则,过程1000可以前进到1016。

如果在1008处确定指定的i/o设备是具有pasid能力的,如参考图8所描述的那样,在1014处,主机设备182可以将指定的队列对pasid_en标志设置为1(或者使i/o设备184将指定的队列对pasid_en标志设置为1),以使得i/o设备184能够针对指定的队列对用pasid确认或执行事务,如参照图9所描述的。主机设备182还可以采用所请求的进程的命名空间id来设置每队列pasid寄存器。

在1016处,主机设备182可以将该队列对从可用队列对的池中拆分(例如,作为软件清理过程的一部分)并且重新初始化要在所请求的事务中使用的队列对(例如,通过重置队列对)。

在1018处,主机设备182可以验证和确认事务的成功。

图11是根据各种实施例的用于利用主机设备182的i/o设备184的资源的示例过程流程图1100。过程1100可以由例如主机设备182(例如,特权代理110)执行。例如,主机设备182可以包括其上具有指令的一个或多个计算机可读介质(例如代理110),所述指令响应于被主机设备的一个或多个处理器执行,可以使主机设备用于执行过程1100。

在1102处,主机设备182可以识别用于主机设备的进程或容器的标签id。标签id可以识别主机设备的硬件设备的针对位于处理器和硬件设备之间的出站事务的队列对,所述出站事务由所述进程或容器实施。

在1104处,主机设备182可以将标签id映射到与位于硬件设备和使用所识别的队列对的处理器之间的入站事务相关联的pasid,以便由进程或容器经由所识别的队列对来使能出站事务。

在一些实施例中,1102可以包括从队列对的池中识别队列对作为未使用的队列对,生成与所识别的队列对相关联的标签id,并且将针对该队列对的标签id存储在主机设备的寄存器中。

在一些实施例中,过程1100还可以包括确定队列对是否是pasid使能的,并且基于确定的结果,由主机设备将pasid包括在tlp前缀中。方法1100还可以包括根据存储器请求并且与pasidtlp前缀相关联地将事务生成到队列对,以使用队列对来执行事务。在一些这样的实施例中,方法1100可以进一步包括:设置硬件设备的每队列pasid寄存器的pasid使能指示符,以使得硬件设备能够使用队列对来执行事务;使用命名空间id来设置每pasid寄存器,队列pasid寄存器;以及重新初始化要在事务中使用的队列对。

图12是根据各种实施例的用于利用主机设备182的i/o设备184的资源的另一示例过程流程图1200。过程1200可以由例如i/o设备184(例如,nic122)执行。例如,nic122可以包括用于执行过程1200的硬件解决方案。在一些实施例中,nic122可以包括一个或多个计算机可读介质,其上具有指令,所述指令响应于被主机设备的一个或多个处理器执行,可以使主机设备用于执行过程1200。

在1202处,i/o设备184可将指示硬件设备的队列对的pasid与存储在硬件设备的每队列pasid寄存器中的pasid值进行比较。该pasid可以是与出站事务相关联的主机设备的进程或容器的pasid。

在1204处,i/o设备184可以至少部分地基于比较的结果来执行出站事务或使得出站事务被执行。

在一些实施例中,过程1200还可以包括在1202之前确定pasid能力寄存器的pasid扩展能力指示符被设置,并且确定与队列对相关联的每队列pasid寄存器的pasid使能指示符被设置。

在过程1200的一些实施例中,pasid扩展能力寄存器可以提供出站事务的执行,出站事务可以包括pcie事务,并且i/o设备184可以是pcie设备。

以下段落描述了本文公开的各种实施例的示例。

示例1是一种主机设备,包括:处理器;与处理器耦合的逻辑,用于:识别用于主机设备的进程或容器的标签标识符(标签id),其中标签id识别主机设备的硬件设备的针对从所述处理器到所述硬件设备的出站事务的队列对,所述出站事务由所述进程或容器实施;以及,将所述标签id映射到与从所述硬件设备到所述处理器的入站事务相关联的进程地址空间标识符(pasid),其中所述进程或容器使用pasid经由所识别的队列对来实施出站事务。

示例2可以包括示例1的主题,其中逻辑用于:从队列对的池中识别队列对作为未使用的队列对;生成与所识别的队列对相关联的标签id;以及使针对所述队列对的标签id存储在主机设备的寄存器中。

示例3可以包括示例2的主题,其中,出站事务包括要对与硬件设备相关联的存储器进行存取的请求,其中该逻辑用于:接收存储器存取请求;确定存储器存取请求是否包括标签id;以及基于确定的结果,将标签id提供给第二逻辑。

示例4可以包括示例3的主题,其中标签id包括与存储器请求相关联的命名空间标识符。

示例5可以包括示例4的主题,其中逻辑用于:确定队列对是否被使能有pasid能力;以及基于确定的结果,将标签id包括在事务层分组(tlp)前缀中的pasid字段中;以及根据所述存储器请求并且与所述pasidtlp前缀相关联地将事务生成到所述队列对,以使得由所述进程或容器使用所述队列对来执行所述事务。

示例6可以包括示例5的主题,其中事务是外围组件快速互连(pcie)事务,并且其中,硬件设备是pcie设备。

示例7可以包括示例5的主题,其中所述逻辑是第一逻辑,其中所述主机设备还包括与所述处理器耦合的第二逻辑,所述第二逻辑用于:设置硬件设备的每队列pasid寄存器的pasid使能指示符,以使得硬件设备能够使用队列对来执行事务;使用命名空间标识符来设置每队列pasid寄存器;以及重新初始化要在事务中使用的队列对。

示例8可以包括示例7的主题,还包括与处理器耦合的第三逻辑,用于将与位于硬件设备和处理器之间的入站事务相关联的pasid存储在pasid储存库中,其中该逻辑用于从pasid储存库中检索pasid。

示例9是一种硬件设备,包括:逻辑,用于对由主机设备发起并与指示硬件设备的队列对的进程地址空间标识符(pasid)相关联的出站事务执行特权检查,其中pasid是与出站事务相关联的主机设备的进程或容器的pasid,其中,执行所述特权检查包括将所述pasid与存储在所述硬件设备的每队列pasid寄存器中的pasid值进行比较,并且至少部分地基于比较的结果而允许所述出站事务。

示例10可以包括示例9的主题,其中,所述逻辑用于在将与队列对相关联的pasid与存储在每队列pasid寄存器中的pasid值进行比较之前,:确定pasid扩展能力寄存器的pasid扩展能力指示符被设置;以及确定与队列对相关联的每队列pasid寄存器的pasid使能指示符被设置,其中pasid扩展能力寄存器提供出站事务的使能,并且其中出站事务包括外围组件快速互连(pcie)事务,并且其中所述硬件设备是输入-输出(i/o)pcie设备。

示例11可以包括示例10的主题,其中,pasid被包括在事务层分组(tlp)前缀中,其中,pasid扩展能力指示符指示硬件设备执行与pasidtlp前缀相关联的出站事务的能力。

示例12可以包括示例9至11中的任一个的主题,其中逻辑用于从主机设备接收pasid。

示例13是一种利用主机设备的硬件设备的资源的方法,包括:由主机设备识别用于主机设备的进程或容器的标签标识符(标签id),其中标签id识别所述主机设备的硬件设备的针对位于所述处理器和所述硬件设备之间的出站事务的队列对,所述出站事务由所述进程或容器实施;以及由所述主机设备将所述标签id映射到与位于硬件设备和处理器之间的入站事务相关联的进程地址空间标识符(pasid),以便由进程或容器通过所识别的队列对使能出站事务。

示例14可以包括示例13的主题,进一步包括:由主机设备从队列对池中识别所述队列对作为未使用的队列对;由主机设备生成与所识别的队列对相关联的标签id;以及由所述主机设备使得将针对所述队列对的标签id存储在所述主机设备的寄存器中。

示例15可以包括示例14的主题,其中,出站事务包括要对与硬件设备相关联的存储器进行存取的请求,其中该方法还包括:由主机设备接收存储器存取请求;以及通过主机设备确定存储器存取请求是否包括标签id,其中标签id包括与存储器请求相关联的命名空间标识符。

示例16可以包括示例15的主题,还包括:由主机设备确定队列对是否是pasid使能的;以及基于确定的结果,由主机设备将pasid包括在事务层分组(tlp)前缀中;以及由所述主机设备根据所述存储器请求并且与所述pasidtlp前缀相关联地将事务生成到所述队列对,以使用所述队列对来执行所述事务。

示例17可以包括示例16的主题,还包括:由主机设备设置硬件设备的每队列pasid寄存器的pasid使能指示符,以使得硬件设备能够使用队列对来执行事务;由主机设备使用命名空间标识符来设置每队列pasid寄存器;以及由主机设备重新初始化要在事务中使用的队列对。

示例18可以包括示例14至17中的任何一个的主题,还包括:由主机设备从与主机设备相关联的pasid储存库中检索pasid。

示例19是一种利用主机设备的硬件设备的资源的方法,包括:由主机设备的硬件设备将指示硬件设备的队列对的进程地址空间标识符(pasid)与存储在所述硬件设备的每队列pasid寄存器中的pasid值进行比较,其中所述pasid是与所述出站事务相关联的所述主机设备的进程或容器的pasid;以及至少部分基于比较的结果由所述硬件设备执行所述出站事务或使得所述出站事务被执行。

示例20可以包括示例19的主题,还包括:在将与队列对相关联的pasid与存储在每队列pasid寄存器中的pasid值进行比较之前,由硬件设备确定pasid扩展能力寄存器的pasid扩展能力指示符被设置;以及由所述硬件设备确定与所述队列对相关联的每队列pasid寄存器的pasid使能指示符被设置,其中,所述pasid扩展能力寄存器提供对出站事务的执行,其中,出站事务包括外围组件快速互连(pcie)事务,并且其中,硬件设备是pcie设备。

示例21可以包括示例20的主题,还包括:由硬件设备从主机设备接收pasid。

示例22可以包括示例19至21中的任一个的主题,其中pasid被包括在事务层分组(tlp)前缀中。

示例23可以包括示例22的主题,其中pasid扩展能力指示符指示硬件设备执行与pasidtlp前缀相关联的出站事务的能力。

示例24是其上具有用于利用主机设备的硬件设备的资源的指令的一个或多个计算机可读介质,所述指令响应于被装置的一个或多个处理设备执行,使得该装置用于:识别用于主机设备的进程或容器的标签标识符(标签id),其中所述标签id识别所述主机设备的硬件设备的针对位于所述处理器和所述硬件设备之间的出站事务的队列对,出站事务由所述进程或容器实施;以及将所述标签id映射到与位于所述硬件设备和所述处理器之间的入站事务相关联的进程地址空间标识符(pasid),以便由所述进程或容器经由所述识别的队列对来使能出站事务。

示例25可以包括示例24的主题,其中,所述指令使得所述装置:从队列对池中识别所述队列对作为未使用的队列对;生成与所识别的队列对相关联的标签id;以及使得将针对所述队列对的标签id存储在主机设备的寄存器中。

示例26可以包括示例25的主题,其中出站事务包括要对与硬件设备相关联的存储器进行存取的请求,其中所述指令使得所述装置:接收存储器存取请求;以及确定存储器存取请求是否包括标签id,其中标签id包括与存储器请求相关联的命名空间标识符。

示例27可以包括示例26的主题,其中所述指令使所述装置:确定所述队列对是否是pasid使能的;以及基于确定的结果,将所述pasid包括在事务层分组(tlp)前缀中;以及根据所述存储器请求并且与所述pasidtlp前缀相关联地将事务生成到所述队列对,以使用所述队列对来执行所述事务。

示例28可以包括示例27的主题,其中所述指令使所述装置:设置硬件设备的每队列pasid寄存器的pasid使能指示符,以使得硬件设备能够使用队列对来执行事务;使用命名空间标识符来设置每队列pasid寄存器;以及重新初始化要在事务中使用的队列对。

示例29是其上具有用于利用主机设备的硬件设备的资源的指令的一个或多个计算机可读介质,所述指令响应于被装置的一个或多个处理设备执行而使所述装置:将指示硬件设备的队列对的进程地址空间标识符(pasid)与存储在硬件设备的每队列pasid寄存器中的pasid值进行比较,其中pasid是与出站事务相关联的主机设备的进程或容器的pasid;以及至少部分地基于比较的结果来执行出站事务或使得所述出站事务被执行。

示例30可以包括示例29的主题,其中,所述指令使得所述装置:在将与队列对相关联的pasid与存储在每队列pasid寄存器中的pasid值进行比较之前,确定pasid扩展能力寄存器的pasid扩展能力指示符被设置;以及确定与队列对相关联的每队列pasid寄存器的pasid使能指示符被设置,其中pasid扩展能力寄存器提供对出站事务的执行,其中,出站事务包括外围组件快速互连(pcie)事务,并且其中,硬件设备是pcie设备。

示例31可以包括示例30的主题,其中,所述指令使得所述装置从主机设备接收pasid。

示例32可以包括示例29至31中的任一个的主题,其中pasid被包括在事务层分组(tlp)前缀中。

示例33可以包括示例32的主题,其中,pasid扩展能力指示符指示硬件设备执行与pasidtlp前缀相关联的出站事务的能力。

示例34是主机设备,包括:用于识别用于主机设备的进程或容器的标签标识符(标签id)的单元,其中标签id标识主机设备的硬件设备的针对所述处理器和所述硬件设备之间的出站事务的队列对,所述出站事务由所述进程或容器来实施;以及用于将所述标签id映射到与位于所述硬件设备和所述处理器之间的入站事务相关联的进程地址空间标识符(pasid),以便由所述进程或容器经由所识别的队列对来使能出站事务的单元。

示例35可以包括示例34的主题,还包括:用于从队列对池中识别队列对作为未使用的队列对的单元;用于生成与所识别的队列对相关联的标签id的单元;以及用于使得将针对所述队列对的所述标签id存储在主机设备的寄存器中的单元。

示例36可以包括示例35的主题,其中出站事务包括对与硬件设备相关联的存储器进行存取的请求,其中该设备还包括:用于接收存储器存取请求的单元;以及用于确定存储器存取请求是否包括标签id的单元,其中标签id包括与存储器请求相关联的命名空间标识符。

示例37可以包括示例36的主题,还包括:用于确定所述队列对是否是pasid使能的的单元;以及用于将所述pasid包括在事务层分组(tlp)前缀中的单元;以及用于根据所述存储器请求并且与所述pasidtlp前缀相关联地将事务生成到队列对,以使用所述队列对来执行所述事务的单元。

示例38可以包括示例37的主题,还包括:用于设置硬件设备的每队列pasid寄存器的pasid使能指示符,以使得硬件设备能够使用队列对来执行事务的单元;用于使用命名空间标识符来设置每队列pasid寄存器的单元;以及用于重新初始化要在事务中使用的队列对的单元。

示例39可以包括示例35至38的主题,还包括:用于从与主机设备相关联的pasid储存库中检索pasid的单元。

示例40是硬件设备,包括:用于将指示硬件设备的队列对的进程地址空间标识符(pasid)与存储在硬件设备的每队列pasid寄存器中的pasid值进行比较的单元,其中,pasid是与出站事务相关联的主机设备的进程或容器的pasid;以及,用于至少部分地基于比较的结果来由硬件设备执行出站事务或使得出站事务被执行的单元。

示例41可以包括示例40的主题,还包括:用于在将与队列对相关联的pasid与存储在每队列pasid寄存器中的pasid值进行比较之前,确定pasid扩展能力寄存器的pasid扩展能力指示符被设置的单元;以及用于确定与所述队列对相关联的每队列pasid寄存器的pasid使能指示符被设置的单元,其中,pasid扩展能力寄存器提供对出站事务的执行,其中出站事务包括外围组件快速互连(pcie)事务,并且其中,硬件设备是pcie设备。

示例42可以包括示例40的主题,还包括:用于从主机设备接收pasid的单元。

示例43可以包括示例40至42中的任一个的主题,其中pasid被包括在事务层分组(tlp)前缀中。

示例44可以包括示例43的主题,其中,pasid扩展能力指示符指示硬件设备执行与pasidtlp前缀关联的出站事务的能力。

包括在摘要中描述的内容的所示实施方式的以上描述不旨在是穷尽的或将本公开的实施例限制到所公开的精确形式。虽然本文出于说明目的描述了特定实施方式和示例,但是如相关领域的技术人员将认识到的,在本公开的范围内各种等同修改是可能的。

根据以上详细描述,可以对本公开的实施例进行这些修改。以下权利要求中使用的术语不应被解释为将本公开的各种实施例限制于说明书和权利要求书中所公开的具体实施方式。相反,范围完全由下面的权利要求来决定,这些权利要求应根据既定的权利要求解释理论来解释。

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