天天看點

nvme1.3 Virtualization Enhancements(Optional)

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申請模式。

nvme1.3 Virtualization Enhancements(Optional)

對于每個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來說是有效的。

繼續閱讀