8.5 Virtualization Enhancements(Optional)
虚拟增强可以使用具有多个Controller的NVM subsystem来提供虚拟或者是物理HOST直接的I/O访问。NVM subsystem由Primary Controller和secondary controller组成,secondary controller由primary controller来动态的分配资源。一个Host可以给Primary Controller发送Identify命令,在Controller List中发现和本Primarycontroller相关联的secondary controller。
可以向Primary controller中发送Virtualization Management命令来为一个controller分配或者移除Controller资源。
.Virtual Queue(虚拟队列) 资源(VQ Resource):一种管理一个Submission Queue(SQ)和一个Completion Queue(CQ)的Controller资源的类型(参见8.5.1节)。
.Virtual Interrupt(虚拟中断)资源: 一种管理一个Interrupt Vecor(中断向量)的Controller资源的类型(参见8.5.2节)。
Filexible Resource是可以分配给Primary Controller或者Secondary Controller之一的Controller资源。Virtualzation Management命令用来在Primary Controller和它的其中一个Secondary Controller之间分配Flexible Resource.可以使用Virtualzation Management命令修改Primary Controller对Flexible Resource的分配,并且这些分配将在除去Controller Reset(例如:cc.en1->0)之外的任何Controller等级的Reset中生效。Secondary Controller的 Flexible Resource资源的分配或移除只有在Secondary Controller Offline状态时执行。
Private Resource(私有资源)是永久分配给Primary或者Secondary Controller的资源。这些资源不支持Virtualization Management命令支持。
Primary Controller允许有Private Resource和Fexible Resource混合的资源类型。如果有混合,那么Private Resource应当占据资源Identify中从0开始的低连续资源范围。Secondary Controller应当有特定资源类型的所有all Private和所有的Flexible Resource。分配到Secondary Controller的Controller资源应当占据identify里一片从0开始的连续的范围。如果一个特定的Controller资源类型在Primary Controller Capabilityes Structure的Controller Resource Types字段被表明了支持,那么所有的Secondary Controller都应当可以将此Controller Resource作为Flexible Resource被分配到。图262展示了当Controller Resource 类型作为Flexible Resource被申请时的Controller Resource申请模式。
对于每个Controller Reousrce类型的支持情况,Primary Controller Capabilities Structure(参见图114)定义了如下结构:
.Flexible Resource的总数量。
.这个Primary Controller的Private Resource的总数量。
.可以使用Virtualization Management命令分配给Secondary Controller的Flexible Resource的总数量。
.Primary Controller的分配情况。
Primary 和Secondary Controller可以实现本文档里的所有特性,除非是有命令被清除的表明了是只有Primary Controller能用。建议只有Primary Controller主持7.14节所描述的特权操作,比避免当有不可信的Host使用Secondary Controller是不会影响到整个NVM subsystem。
Identify命令中的Secondary Controller List Struct反悔了Secondary Controller和资源分配的拓扑结构。Secondary Controller 应当在Offline 状态下被配置资源。Virtualization Management命令被用来切换Secondary Controller的Online和Offline状态。然健8.5.3节查看Online和Offline的细节。
为了支持Virtualization Enhancements(虚拟增强)功能,NVM subsystem应当支持一下几点:
.有一个或多个Primary Controller,其中的每一个都应当支持:
.一个或多个Secondary Controller。
.一组未分配的Flexible Resource,支持这些资源分配到Primary Controller和灵活的分配个相关的Secondary Controller。
.在Identify Controller Data Structure里的OACS字段中表明支持Virtualization Management命令。
.Virtualization Management命令。
.Primary Controller Capabilities Structure的定义(Identify Command CNS=14h)。
.Secondary Controller List在Figure115中的定义(Identify Command CNS=15h)。
.Namsepace Management Capability(参见8.12节)。
.一个或更多个Secondary Controller
.Flexible Resources,他们应当支持一下操作:
.只通过一个Primary Controller去分配和移除。
.在同一时刻只分配给一个Controller。
在一个同时支持虚拟化增强(Virtualization Enhancements)Capability和SR-IOV(参见8.5.4)的NVM subsystem中,所有是SR-IOV PFs的Controller都是Primary Controller,所有是SR-IOV VFs的Controller都是和本Primary Controller相关的Secondary Controller。
8.5.1 VQ Resource Definition
一个虚拟的队列资源(Virtual Queue Resource)是一种管理一个CQ和SQ的Controller Resource。对于一个分配给Controller的VQ Resource,它的Resource identify等于它的Queue identify。
Primary Controller Capabilities Structure中的Controller Resource Types字段决定了是否VQ Resource被支持。如果VQ Resource不被支持,Primary Controller和它对应的Secondary Controller的所有Queue都是Private Resource。本节的下面描述假定了VQ Resource是被支持的。
使用Virtualization Management命令去给Secondary Controller分配VQ Resource。分配的VQ Resource数量会被显示在Secondary Controller List中。也可以使用Get Feature命令去获取Number of Queue。
如果没有给Secondary分配VQ Resource,那么它将保持Offline状态。它将不会转变到Online状态直到它获得了Admin Queue和至少1个IO Queue的VQ Resource。
支持VQ Resource的Primary Controller应当至少有2个Queue,以确保在任何时候都有最少1个Admin Queue和1个IO Queue。
Primary Controller可以使用Virtualization Management中的Primary Controller Flexible Allocation action参数来分配VQ Resource。申请的VQ Resource在一次Controller Level Reset并且是跨电源周期的Reset之后才能生效。当前的VQ Resource数量在Primary Controller Capability Struct中体现。也可以使用Get Feature命令查看number of Queue。
8.5.2 VI Resource Definition
8.5.3 Secondary Controller State and Resource Configuration
8.5.4 Single Root I/O Virtualization and Sharing
PCI-SIG Single Root I/O Virtualization and Sharing Specification(SR-IOV)定义了允许多个系统镜像(SIs)的PCI Express的扩展,像是运行在虚拟机管理程序上的虚拟机,共享PCI硬件资源。SR-IOV的主要优点是消除了虚拟机管理程序参与IO操作的可能性,而IO操作可能是限制某些虚拟化环境中存储性能的一个重要因素,允许运行在虚拟机上的SI直接访问PCI硬件资源。
Pyhsical Function(PF)是支持SR-IOV功能的一种PCIE Function,反过来又允许它支持一个或多个Virtual Function(VFs)。这些PFs和VFs可以支持NVME Controller共享同一个NVM subsystem上的Multi-path I/O and namespace sharing的能力(参见1.4.1节).
SR-IOV的VFs使用NVM Express Class Code(参见2.1.5节),应当完全兼容NVM Express Controller.这确保为非虚拟化开发的应用软件能够在虚拟的SI中正常的运行。
对于不支持或者不需要用SR-IOV的主机,PF的Controller能够作为单独的标准Controller运行。
对于一个是PF的Controller来说,对SR-IOV Capability的寄存器VF BAR0, VF BAR1, VF BAR2, VF BAR4, VF BAR5,的要求和PCI寄存器BAR0, BAR1, BAR4, BAR5,相同,就像在第2.1.10,2.1.11,2.1.14,2.1.15中描述的一样。对于一个是PF的Controller来说,SR-IOV的Capability寄存器中的VF BAR2不应当支持Index/Data Pair(参见2.1.12节)。
为了适应SR-IOV地址范围的隔离要求,VF BAR2和VF BAR3可能支持一个64位的可预取的内存寄存器空间,这个空间应当仅仅被用来存放VFs设备的MSI-X Tables和MSI-X PBAs.MSI-X Table Bir=’2’(参见2.4.3)和MSI-X PBA BI=‘2’(参见2.4.4)对于一个是Vf的Controller来说是有效的。