本发明一般地涉及快速外围组件互连(PCie)交换机,其中央处理单元(CPU)连接在PCIe交换机的非透明网桥(NTB)之后,尤其涉及一种用于从次要PCIe域访问主要PCIe域中的设备的方法与装置。
背景技术:
传统的单CPU和端点设备
图1示出了PCIe交换机域中传统的单CPU网络100。最上层的PCIe设备为CPU网络100的PCIe控制器102,可以直接存储访问CPU存储器104。这种传统布局的最上层设备(PCIe控制器)称为“根联合体”(树的根级)。从“根级”向下还示出了PCIe交换机106,并且终端处为PCIe设备端点108。CPU网络100采用通信目的的共享并行总线架构103,其中,所有设备共享地址、数据和控制线的通用集合。
CPU主机110通常执行通过“枚举”来确定CPU网络100的配置的操作系统。所述枚举查找交换机106和端点108,并要求对CPU网络100中所有资源的总所有权。1型和2型配置读写命令用于发现交换机106、设备端点108以及设备端点108和交换机106所拥有的内存资源。将PCIe地址空间中的内存地址分配给交换机106和设备端点108的所有资源。为所有交换机106配置基础和限位交换机寄存器,以使CPU网络100中的任何点均理解如何将周围的内存事务从设备端点到设备端点进行路由。CPU主机110和设备端点108可以读取并写入CPU网络100中任何地方的内存资源。因此,CPU主机110可以配置设备端点108以便进行使用,并且一旦将设备端点108设置用来执行功能和从CPU存储器104读取以及向CPU存储器104写入,则设备端点108可以独立行动。
例如,设备端点108的一种类型为以太网控制器108a,可以对其进行设置以访问来自CPU存储器104的发送和接收描述符,这些描述符指向CPU主机110管理的缓冲区。以太网控制器108a可以与一个或多个PCIe设备(例如,以太网设备)相关联。每个以太网设备可以在其发送描述符环(TX环)中独立发送由发送描述符描述的缓冲区内容,并且以太网控制器108a可以接收数据并经由CPU存储器104中的接收描述符环(RX环)通过其DMA功能直接发送这些数据至接收缓冲区。根据以太网设备编程和PCIe标准,以太网控制器108a可以经由称为MSI/MSI-x消息的PCIe内存事务向CPU主机110发送中断。这是在映射到PCIe的CPU内存空间中击中CPU主机110设备/中断寄存器是一种内存事务。
用于此目的的交换机被广泛使用,并且成本相对较低。CPU网络100被称为实现单个PCIe域的透明PCIe网络。然而,从另一个网络域访问该PCIe域需要使用专门的设备驱动程序或专门的硬件。
技术实现要素:
由前述可知,本领域技术人员可以理解,在不需要专门的设备驱动程序或硬件的情况下,已经出现了从一个PCIe域访问另一PCIe域中的设备的技术需求。根据本公开,提供了一种通过利用商品型PCIe交换机在PCIe结构中的CPU上使用未经修改的PCIe设备驱动程序来从次要PCIe域访问主要快速外围组件互连(PCIe)域中的设备的方法与装置,从而大大降低或基本消除与传统PCIe结构实现方式相关联的问题和缺点。
一种用于从次要PCIe域访问主要PCIe域中的设备的方法,包括:确定使主要PCIe域中的设备的哪一个或多个虚拟功能对于所述次要PCIe域可用。在与所述一个或多个虚拟功能相关联的主要PCIe域中安装虚拟功能驱动程序。将与所述一个或多个虚拟功能对应的信息提供给所述次要PCIe域。根据所述信息,在所述次要PCIe域中安装与所述一个或多个虚拟功能相关联的虚拟功能驱动程序。所述次要PCIe域中的虚拟功能驱动程序具有与所述主要PCIe域中的虚拟功能驱动程序相同的性质。根据所述次要PCIe域中的虚拟功能驱动程序访问所述主要PCIe域中的设备。
本发明描述了相比于常规PCIe结构实现方式的许多技术优势。例如,一个技术优点在于,在不使用专门的设备驱动程序和硬件的情况下,使次要PCIe域访问主要PCIe域中的设备。另一个技术优点在于,从主要PCIe域提供信息,以使次要PCIe域安装设备驱动程序,其中,所述设备驱动程序具有与主要PCIe域中相应设备驱动程序相同的性质。通过以下附图、说明书和权利要求书,其它技术优点对于本领域技术人员来说可以是显而易见的且可以认识到。
附图说明
为了更全面的理解本发明及其优点,现结合附图参考以下描述,相同的附图标记表示相同的部件,其中:
图1示出了PCIe交换机域中传统的单CPU系统;
图2示出了图1所示的主要PCIe域通过非透明网桥(NTB)主要和次要端点与次要PCIe域互连;
图3示出了主要PCIe域与次要PCIe域之间的转换方案;以及
图4示出了从次要域访问主要域中设备的方法。
具体实施方式
以下进行讨论的图1至图4以及用于描述本专利文档中本发明原理的各实施例仅示意性说明,而不应解释为对本发明范围的限制。本领域技术人员应理解,本发明原理可以在任何类型的适当设置的设备或系统中进行实现。一幅图中所示出并讨论的特征可以是当地在一个或多个其它附图中实现。
本发明描述了一种使正常写入的PCIe设备驱动程序在PCIe结构的根联合体上运行的系统,即使其不在这种根联合体上并且实际上位于NTB之后,其中,所述NTB仅仅能够向所述设备实际存在于其中的PCIe结构进行内存转换,也能够犹如该系统在能够访问所述设备的CPU根联合体上运行一样。所述系统通过对于操作系统可用的软件允许访问通常用于独立虚拟机或CPU的对称多处理(SMP)内核的虚拟功能、物理功能或设备队列。所述系统避免了对设备驱动程序进行复杂变化,并且避免了为此目的需要新型PCIe交换机硬件。
通过非透明网桥连接的CPU的PCIe网络
图2示出了CPU网络200,其中,图1所示的主要PCIe域220与次要PCIe域222通过称为非透明网桥(NTB)主要端点207的新型端点耦合在一起。主要PCIe域220中的NTB主要端点207紧邻NTB次要端点208a,所述NTB次要端点208a是次要PCIe域222的设备端点208。次要PCIe域222包括与主要PCIe域220类似的结构,其中具有CPU主机210、CPU存储器204、建立根联合体的PCIe控制器202、PCIe交换机206以及PCIe设备端点208,比如,NTB次要端点208a,所有组件均通过高速内部总线203相互连接。
起初构想PCIe网络只具有一个根联合体,在本发明中也是这样认为的,因为主要根联合体和次要根联合体是不同域(例如,主要PCIe域220和次要PCIe域222,如图所示)的一部分。“非透明桥接”允许多个根联合体通过它们各自的独立域在共同的PCIe网络中运行。NTB主要端点207和NTB次要端点208a是允许对许可内存事务从NTB的一侧穿到另一侧的性质进行编程的PCIe设备。在本发明的上下文中,这类特征允许NTB主要端点207之后的次要PCIe域222中的次要根联合体访问主要PCIe域220中PCIe设备的设备寄存器或存储。这些类型的网桥已由不同供应商开发有一段时间,并且被广泛使用而且价格低廉。
单PCIe域中的单根I/O虚拟化(SR-IOV)
针对传统的单CPU网络100和设备端点,上述对以太网控制器108a进行了描述。例如,可以将以太网控制器108a配置成从CPU存储器104读取,用以读取TX环中的描述符和缓冲区并读取来自以太网电缆的数据,并将其写入CPU的RX环中的接收缓冲区。
以太网SR-IOV控制器允许CPU主机110建立更多的RX和TX描述符、缓冲区以及环以便用于以下目的,例如,提供一个或多个虚拟机在CPU主机110上运行,建立对称多处理(SMP)系统中多CPU操作以使CPU内核发送和接收数据并获得性能优势,例如,但不限于,减少缓存一致性冲突并实现多个队列以便对每一SMP内核分配队列。
SR-IOV抽象允许虚拟机或每个CPU执行上下文(例如,但不限于“设备驱动程序”)具有自己独立的接收/发送环、描述符和缓冲区用以根据具体情况获得性能优势或其它优势。
多根CPU系统使用的单根I/O虚拟化(SR-IOV)
随着单根I/O虚拟化(SR-IOV)PCIe设备的出现,出现了允许上述多根联合体访问来自不同域的单根I/O虚拟化设备的虚拟功能的应用程序。
举例说明,在单CPU的示例中,给定的SR-IOV设备(比如,以太网控制器108a)可以具有物理功能(PF)230和64个虚拟功能(VF)232,并且这些功能可以被一个CPU访问。CPU主机110可以具有2个SMP内核和2个VF或1个带有2个队列的VF,每个内核1个队列,从而获得性能优势。类似地,可以给CPU上的10个虚拟机分配10个VF,使得每个虚拟机看上去似乎有其自己的VF以太网控制器。PF 230用于配置并管理设备端点108的功能,比如,实现虚拟化并显示PCIe VF 232。VF 232与设备端点108上的PF 230相关联,并代表设备端点108的虚拟化实例。每个VF 232都有其自己的PCI配置空间并与PF 230和其它VF 232共享设备端点108上的一个或多个物理资源,例如,外部网络端口。VF 232的性质完全就像VF 232的驱动程序对以太网控制器108a具有总控制。这是因为驱动程序与存在于非SR-IOV设备中的相同接收和发送环合作。以太网控制器108a起到以太网交换机的作用,使得每个VF 232不知道也不需要知道其它的VF 232。
主要PCIe域220包括在管理操作系统中管理PF 230的PF驱动程序116。通过PF驱动程序116对VF 232以及用以支持VF 232的其它硬件和软件资源进行配置和设定。PF驱动程序116采用传统的驱动程序功能用以访问管理操作系统的网络I/O资源。PF驱动程序116也用作对设备端点108上分配给VF 232的资源进行管理的方法。主要PCIe域220还包括安装用以管理VF 232的VF驱动程序118。由VF驱动程序118执行的任何操作均不影响同一设备端点108上的任何其它VF 232或PF 230。VF驱动程序118的功能和任何PCIe设备驱动程序一样,比如,读取并写入VF 232配置空间。对VF 232的访问由PF驱动程序230来管理。
VF 232的配置寄存器是独立的,使得独立的虚拟机驱动程序或不同CPU核心上下文中的驱动程序可以像独立设备一样对其进行访问。因此,非透明网桥的另一侧上的第二域中的CPU可以配置其自己的VF驱动程序并且也利用主要域中的设备端点108。但是,第二域中需要专门的虚拟功能驱动程序来提供合适的访问。
在次要PCIe 222的一侧写入专门的虚拟功能驱动程序是众所周知的。例如,主要PCIe域220中的CPU主机110可以使用配置周期来查找以太网控制器108a并在设备配置层级中定义其位置、分配其总线、设备和功能编号,然后为其程序基址寄存器(BAR)分配主要PCIe域220中PCIe存储器位置。一经定义,驱动程序映射到BAR的访问,并针对其在其域内使用的虚拟功能编程接收/发送环信息和MSI/MSI-x中断寄存器等。
为了使次要PCIe域222中的CPU访问虚拟功能,主要域根联合体和次要域根联合体之间通常存在通信协议,以使次要PCIe域222找出主要PCIe域220上VF 232的内存地址信息,并通过NTB次要端点208a和NTB主要端点207设置内存转换以对其进行访问。此时,实际上,次要驱动程序通过转换到它们的内存地址基本上可以对VF 232 BAR执行相同的编程功能。在需要配置读取或写入周期的情况,通过通信机构将这些周期传递给主要侧根联合体,并由专门的驱动程序软件代表次要侧根联合体来执行。在需要对其它功能进行编程的情况,比如MSI-x中断,次要侧根联合体为NTB主要端点207中的转换寄存器发送有关MSI-x“地址”和“数据”的信息以击中次要PCIe域222中的CPU主机210。采用相同或相似的机制来实现其它这样的要求,例如,确保分配给次要PCIe域222的来自主要PCIe域220中VF 232的DMA击中CPU存储器204。
上述在次要PCIe域222的一侧写入专门的虚拟功能驱动程序在不需要多根I/O虚拟化(MR-IOV)规范的情况下进行执行。上述在次要PCIe域222的一侧写入专门的虚拟功能驱动程序通过SR-IOV实现MR-IOV,并且这些专门的软件机制在本文中称为“共享SR-IOV”方法。然而,这些专门的软件机制在维护方面非常昂贵。为了避免专门的驱动程序,一种可选方法是在专门的硬件中处理这种能力。专门的PCIe交换机硬件已得到实施,以使次要域中的CPU执行诸如配置周期的主要根功能并绕过对专门写入的驱动程序的需求。在该可选方法中,将维护开销转移到硬件方面。然而,这个可选方法没有解决在使用标准的PCIe硬件实现方式时的问题。
运行未经改变的虚拟设备驱动程序
本发明描述了一种用于在次要PCIe域222上运行未经改变的虚拟设备驱动程序以及其它类型的未经改变的驱动程序的系统,而不需要专门的虚拟功能驱动程序或专门的硬件。本发明中描述的实现方式的一些优点包括,避免对虚拟设备驱动程序进行专门的共享SR-IOV软件的改变,这些改变对在次要PCIe域222中使用次要CPU网络上的VF有必然影响,从而在维护方面非常昂贵。可以避免支持可能需要释放给主要PCIe域220的专门改变,因为其可以被认为是对驱动程序的修改。通过在次要PCIe域222上运行未经改变的虚拟设备驱动程序以及其它类型的驱动程序,不需要专门的硬件,因为现有广泛普及的廉价非透明网桥硬件可以在不加修改的情况下被使用。具有多个物理功能的设备可以提供相同或相似益处,并且具有多个队列的设备也可以跨域进行使用,从而产生相同或相似益处。
本发明描述了一种包括在CPU主机110和210中执行的应用程序(在本文中称为共享SR-IOV管理器)的系统,其具有到操作系统的良好定义的接口,并且提供需要使次要CPU主机210和未经改变的虚拟功能驱动程序找到BAR和配置空间的机制,以对需要什么来使其将“想到”的VF得以存在进行初始化并获得与主要PCIe域220中的VF同样高水平的性能,同时始终“相信”这种功能和设备在其自身域中存在。
作为说明性示例,在主要PCIe域220中的CPU主机110和次要PCIe域222中的CPU主机210上,主要PCIe域220中的共享SR-IOV管理器212和次要PCIe域222中的共享SR-IOV管理器214包括代码主体,使主要PCIe域220和次要PCIe域222传送以及交换信息并向操作系统提供良好定义的接口,用以检索或修改位于不同域中的标准数据或功能。可以先在主要PCIe域220中的CPU主机110上执行共享SR-IOV管理器212,并在次要PCIe域222中的CPU主机210枚举其PCIe总线之前进行初始化。通过NTB主要端点207和NTB次要端点208a或者通过可在不同域之间设计的任何其它机制,通信可以在PCIe总线上进行。
在PCIe总线上进行通信的情况下,主要PCIe域220的CPU主机110枚举并确定例如在以太网控制器108a中的VF 232的内存资源,可以视情况而定,包括带有转换和/或通信功能的NTB主要端点207。次要PCIe域222的CPU主机210也枚举其PCIe结构,并定位其NTB次要端点208a。
主要PCIe域220的CPU主机110通过PF驱动程序116采用可能需要的参数加载以太网控制器108a的PF 230,这些参数使得所需数量的VF 232(max_vfs=nnn)出现。对一个或多个目的和域将可用的VF 232的总线、设备、功能和内存地址被加载在主要PCIe域220的共享SR-IOV管理器212中。通过通信机制,指导次要PCIe域222的共享SR-IOV管理器214获得有关包括每个VF BAR的主要PCIe域220地址空间中VF 232的信息,以及其可能需要用于所描述的功能的任何其它信息,比如,根据PCIe标准,其所位于的BAR以及MSI-x表偏移的PCIe内存地址。主要PCIe域220可以判断其会使多少个VF对于次要PCIe域222可用。
次要共享SR-IOV管理器214从主要共享SR-IOV管理器212收集对于从主要地址空间创建地址转换以访问在主要PCIe域220中的授权BAR内存来说有必要的信息。如有需要,这可以是VF 232的BAR和MSI-x表的BAR。此外,主要PCIe域220的共享SR-IOV管理器212提供对于次要PCIe域222将可用的所有VF 232的配置空间的模拟副本。
图3示出了次要PCIe域222和主要PCIe域220之间地址转换的示例。可以改变针对VF 232的BAR的次要PCIe域222内的次要模拟配置空间,以包含通过NTB次要端点208a转换到主要PCIe域220中VF 232的相应BAR的PCIe地址。另外,为这些VF配置操作系统已知的PCIe层级、能力、区域等或具体的CPU功能。配置空间是照原样使用还是改进使用,以下将进一步进行详细描述。
一旦次要共享SR-IOV管理器214接收到与主要PCIe域220中VF 232对应的信息,则此时可以在次要PCIe域222中启动虚拟功能驱动程序,即,VF驱动程序218,并且其可以使用PCIe驱动程序通常使用的特定操作系统功能来初始化主要PCIe域220中的VF 232。次要PCIe域222也安装与主要PCIe域220中PF驱动程序116运行方式类似的PF驱动程序216。以下为可以进行使用的功能的示例性列表,并且其在次要PCIe域222中对VF 232的改进用途将在以下进一步进行详细描述。本领域技术人员将理解也可以使用其它功能。这些功能包括pci_request_regions及其请求区域或BAR地址的同级功能、dma_map_page和dma_map_single及其取消映射功能、用于MSI/MSI-x功能的request_irq以及pci_enable_device、pci_set_master和pci_enable_msix功能(以及AER、内存、许多其它操作系统和配置空间级别功能)。
由于次要PCIe域222中的VF驱动程序218启动或探寻其PCIe设备类型,VF驱动程序218可以执行通过标准操作系统功能发生的以下初始化,这些标准操作系统功能的操作在某些情况下被次要共享SR-IOV管理器214所使用的良好定义的接口改变。功能pci_request_regions用于特定VF 232待使用的BAR。取决于次要共享SR-IOV管理器214是否希望使该VF用在次要PCIe域222中,该功能可以成功或失败。次要共享SR-IOV管理器214使用到pci_request_regions代码的良好定义的接口,以使次要共享SR-IOV管理器214来调节这种使用。假设允许使用VF 232,则初始化可以继续。VF驱动程序218可以记录VF 232的BAR地址,并且基于内存的读取和写入到BAR寄存器可以转换成到主要PCIe域220中的BAR。
诸如pci_enable_device和pci_set_master的功能以及其它功能可以实现能够对PCIe寄存器执行配置读写数据周期并为设备端点108执行各种能力的代码。本发明的操作是通过次要共享SR-IOV管理器214的良好定义的接口将该操作委派给主要PCIe域220。以下为可以实现这种方式的可能方法的示例列表。config_read和config_write命令可以被传递给主要PCIe域220并执行,并且在次要PCIe域222中返回并模拟结果。实际的PCI功能本身可以通过次要共享SR-IOV管理器214与主要PCIe域220进行交互,但是,采用所述传递给主要PCIe域220可以提供更透明的方法。在一些情况下,出于不同的所需目的,可以对传递给主要PCIe域220的操作进行修改。例如,如有需要,在调用pci_enable_device或pci_set_master功能时,次要共享SR-IOV管理器214可以通过这些功能调节访问控制,也可以拒绝请求。可能需要对操作进行修改以根据需要对操作进行正确的模拟。
如有必要,VF驱动程序218可以采用pci_enable_msi或pci_enable_msix或其它适当功能启用MSI或MSI-x。VF驱动程序218也可以调用request_irq来为特定的MSI-x向量或为MSI中断设置本地CPU中断处理程序。这些功能对以太网控制器108a采用专门创建的数据应当击中的PCIe“总线”侧(或DMA侧)地址已经进行了定义,所述专门创建的数据可以为所需的中断击中APIC或其它CPU架构寄存器。次要共享SR-IOV管理器214可以通过其良好定义的接口类似地修改这个功能。应对MSI/MSI-x消息的计算地址进行正确计算以通过从主要PCIe域220到次要PCIe域222的网桥采用计算数据(其通常不需要修改)转换CPU中断寄存器。也可以使用其它方法,比如,上述涉及委派给主要PCIe域220的这些方法。
VF驱动程序218此时可以设置RX和TX描述符环以及指向缓冲区的描述符。VF驱动程序218编程入VF 232 BAR的地址是由dma_map_page和dma_map_single计算的“总线”侧(或DMA侧)地址。这些功能的目的是向以太网控制器108a提供以太网控制器108a应该读取或写入的“总线”侧地址,因为(此处未描述的原因)“PCIe总线”侧地址不总是1-1映射到物理地址。与这些功能接口连接的次要共享SR-IOV管理器214可以向内存地址提供调整,使得以太网控制器108a可以通过主要PCIe域220的NTB主要端点207读取并写入次要PCIe域222中的RX/TX队列和缓冲区。
VF驱动程序218运行并在其域内为其认为是VF 232的那些定位,并且可以以上述类似的方式根据其域内的内存资源配置并运行以太网控制器108a。中断处理程序的操作以及以太网控制器108a的拆卸和释放根据上述相同的成熟原则运行。可以使操作系统功能或其最低层的config_read和写入命令由次要共享SR-IOV管理器214在需要时对主要PCIe域220进行直接操作。对BAR的内存访问和“PCIe总线”侧或DMA地址的编程被透明地处理,并且已经获得了通过PCIe结构的速度运行效益。对BAR的次要侧访问被映射,并且次要PCIe域222向主要PCIe域220映射到CPU主机210存储器204及其系统寄存器的PCIe“窗口”。
图4示出了用于从次要PCIe域222访问主要PCIe域220中设备的示例过程400。过程400开始于框402,其中,主要PCIe域220中的CPU主机110执行枚举进程,以便发现存在什么设备,比如交换机106和设备端点108以及相关的内存资源,并为发现的设备分配内存地址。在块404中,由CPU主机110执行的共享SR-IOV管理器212识别用于主要PCIe域220中的VF 232的总线、设备、功能和基址寄存器。共享SR-IOV管理器212在块406中确定使哪些VF 232对于次要PCIe域222(以及任何其它次要域)可用。在块408中,次要PCIe域222中的CPU主机210执行枚举过程,以便发现存在什么设备,比如交换机206和设备端点208以及相关的内存资源,并为发现的设备分配内存地址。由CPU主机210执行的次要PCIe域222的共享SR-IOV管理器214在块410中与主要PCIe域220中的共享SR-IOV管理器212通信,以接收与所述对于次要PCIe域222可用的VF 232相对应的合适信息。在框412中,根据共享SR-IOV管理器214接收到的信息,对与主要PCIe域220中授权VF 232对应的VF驱动程序218进行实例化。在框414中,利用VF驱动程序218,次要PCIe域222可以访问以太网控制器108a的VF 232。VF驱动程序218在次要PCIe域222中的运行情况就像主要PCIe域220中的VF驱动程序118访问以太网控制器108a的VF 232。因此,不需要写入专门的驱动程序,并且不要求专门的硬件来允许次要域访问主要域中的设备。
上述实现方式用以说明本发明所述系统的一个示例。通过共享SR-IOV管理器212和214,以这样一种方式,即,用在主要域中的原有虚拟功能驱动程序可以安装并用在次要域中,任何物理功能、虚拟功能或基址寄存器或基址寄存器的一部分均可以被传送,以便在任何次要PCIe域中被发现并使用。应理解,可以想到根据相同或相似原理操作的其它实现方式(例如,透明地允许操作或系统或低级功能或高级功能来使虚拟功能驱动程序不变地进行运行)。这种实现方式的示例包括:使次要共享SR-IOV管理器214在次要PCIe域222枚举期间,对主要PCIe域220中一个或多个VF的配置空间进行预配置,所述配置空间在枚举过程中可以被查找到,然后可以将这种模拟配置用来使次要虚拟功能驱动程序对其进行配置并利用。根据需要,可以静态或动态地创建预配置的配置,以便对从主要地址空间到次要地址空间转换的合适BAR地址进行设置。根据执行者的需要,可以静态或动态地执行MSI/MSIx的dma_map_single、dma_map_page和dma_map的处理。内存访问和/或配置空间可以对MSI-x表进行访问。次要CPU主机210可以在其在枚举过程期间枚举NTB次要端点208a之后使模拟设备和/或模拟配置空间显示。如有需要,可以暂停枚举来运行通信机制,并且可以增加模拟设备和/或模拟配置空间。可以通过模拟方式经由对于PCIe设备在使用中的公知“热插拔”机制将模拟设备和/或模拟配置空间加入到次要PCIe域222中。
正如执行者所期望的,为了操作简单,可以使次要PCIe域222知道所有VF或只是一些特殊的VF。可以使次要PCIe域222对提供多个队列的VF进行访问,以使SMP系统的CPU内核自己可以访问RX/TX环和缓冲区,如出于同一目的在主要PCIe域220中完成一样。
还可以容易地使同一系统对各种类型的驱动程序进行操作,其中所述系统修改操作系统较高和较低级别的PCI功能以使PCIe设备驱动程序不经改变地运行。例如,多个物理功能驱动程序允许多个物理功能独立地访问一个或多个设备。特别是,可以以同一方式在次要PCIe域222上配置用于公共以太网控制器的物理功能驱动程序,即,通过向次要PCIe域222输出人工配置空间和设备树信息并允许相同类型的低级别和高级别操作系统功能对其进行查找和配置。设备驱动程序可以具有用于访问一个或多个物理资源的多个队列。可以以类似的机制使包含多个队列的设备对次要PCIe域222中的CPU主机210可用,其中每个所述队列可以独立控制通用设备,并且每个次要PCIe域222可以对分配给其自己使用的各队列进行配置。举一个示例来说,可以使模拟PCIe设备和/或模拟配置空间可用,并且次要PCIe域222可以针对以太网控制器108a示例中描述的所有益处(SMP队列、虚拟机或任何其它虚拟化目的)编程各队列。
此外,本文中所描述的系统并不限于通过操作系统功能来操作,也可以在任何软件系统中进行操作以获得避免对关键驱动程序进行改变的相同优点,其中所述关键驱动程序可以通过允许对设备控制进行单独PCIe访问的VF、基于队列的VF或其它功能操作。应理解,本发明中列出的功能名称是众所周知的LINUX操作系统功能,但本文所述系统的操作并不限于使用该操作系统或这些功能。可以将本文所述系统应用到任何虚拟化目的的设备中,比如存储控制器或具有SR-IOV型功能、多个物理功能、多个队列或任何虚拟化功能的任何类型的控制器。
在一些实施例中,所述一个或多个设备的部分或所有功能或进程由计算机程序来实现或支持,其中所述计算机程序形成于计算机可读程序代码并在计算机可读介质中得以体现。短语“代码”包括任何类型的计算机代码,包括源代码、目标代码和可执行代码。短语“计算机可读介质”包括能够由计算机访问的任何类型的介质,比如:只读存储器(ROM)、随机存取存储器(RAM)、硬盘驱动器、压缩盘(CD)、数字视频盘(DVD)或者任何其它类型的存储器。
对本专利文档中使用的特定词语和短语的定义进行阐述可能是比较有利的。术语“包括”和“包含”及其衍生物是指没有限制的包括。术语“或”是包含的意思,是指和/或。短语“与......有关联”和“与其相关联”及其衍生物指包括、包括在内、与......互连、包含、包含在内、连接到或与......连接、耦合到或与......耦合、与......通信连接、配合、交织、并列、接近于、密切相关或与......密切相关、具有、具有......的特性等等。
虽然本发明已经对某些实施例以及通常相关联的方法进行了描述,这些实施例的变化和变换对于本领域技术人员而言是显而易见的并且很容易辨别。因此,示例实施例的上述描述并不限定或限制本发明。例如,虽然采用单个次要PCIe域对各实施例进行表示,这些实施例适用于包括多个次要PCIe域的场景。在不脱离所附权利要求所限定的本发明范围的情况下,也可以做出其它变化、替换和修改。