天天看點

SR-IOV Spec 筆記

參考文檔

    PCI Local Bus Specification, Revision 3.0

    PCI Bus Power Management Interface Specification, Revision 1.2

    PCI Express Base Specification, Revision 2.1

    Multi-Root I/O Virtualization and Sharing Specification, Revision 1.0

    Address Translation and Sharing, Revision 1.1

1. 概述

    SR-IOV出現前,虛拟化的缺點:

        在SI和硬體間,VMM截獲并模拟IO;降低了IO效率,且消耗主控端CPU和記憶體資源。

    TA: Translation Agent;可選的;用于将TLP中的總線位址轉換為存儲器實體位址,與rc功能重疊;

    ATPT: Address Translation and Protection Table

        位于rc和系統記憶體之間。

        疑問:TA和APTP與VT-d無關?

    ATC: 位于TA或pcie裝置内(如果存在)

    ACS:Access Control Service;可選的;

    一個pcie裝置中可以有多個功能(最多8個;使能ARI時,最多256個);每個功能都有獨立的配置和BAR空間;

    pcie裝置sr-iov capability中的MSE比特如果被清零,則所有VF的存儲空間都不能通路了;

    ARI使能時,一個pcie裝置中最多有256個PF;VF的總線号可以是0-255之間;

        疑問:那一個pcie裝置最多有多少個VF?

            答:理論上限65536 - pcie總線中已占用的route id。page 22

        疑問:軟體配置附加總線号?如果軟體沒有配置足夠的附加總線号,則使用到額外附加總線時的VF将不可見。

        疑問:主控端總線枚舉階段,VF的總線号和bar空間就配置設定好了嗎?

2. 初始化和資源配置設定

    2.1 sr-iov資源發現

        2.1.1

            VF不支援I/O空間,僅支援memory space;    

            一個PF的多個VF的memory space是連續配置設定的(VF間可能有間隙);

        2.1.2

            指定PF的第n個VF的Routing ID = PF的routing id + first vf offset + (n - 1) * vf stride;

            VF個數上限:理論上限為65536,但是不能與已存在的routing id存在交疊,且VF的總線号不能小于與之關聯的PF的總線号;            

            當pcie switch的second bus number和subordinate bus number間沒有足夠的總線号時,支援sr-iov的裝置的vf個數将被減小,甚至sr-iov功能不能被使能;

        2.1.4 中斷資源配置設定

            VF支援MSI和MSI-X,不應支援INTx。

    2.2 重置機制

        正常重置後,已使能的VF将被去使能。

        VF的功能級重置僅影響VF的狀态,不影響VF的配置空間。

        PF的功能級重置,将導緻已使能的VF去使能。

    2.4 VF遷移:略

3. 配置

    3.3 SR-IOV Extended Capability

        3.3.2

            SR-IOV不支援vf migration。vf遷移指的是同一個pcie裝置中有多個pf,vf在多個pf間的遷移。

        3.3.3 SR-IOV control寄存器

            3.3.3.5 ARI Capable Hierarchy

                當RP或switch的下遊端口使能ARI功能後,軟體将pcie裝置的第一個pf的該比特置位。

                vf的routing id不受device id和func id的限制。

                    疑問:考慮到vf routing id的擷取方法,ARI對于VF的意義是什麼呢?

        3.3.5 InitialVFs

            對于SR-IOV,該字段與TotalVFs相等。

            如果VF Migration是使能的,且VF由使能切換為去使能然後再使能,該字段可能變化,因為VF遷移值其他PF了。

        3.3.8 Function Dependency Link

            該字段描述的是pf間的依賴關系;

            該字段填寫依賴鍊中下一個pf的功能号,最後一個pf填寫第一個pf的功能号;

            互相依賴的pf及其vf必須被配置設定給同一個虛拟機;實際操作過程中,将vf配置設定給虛拟機失敗時,可考慮是否為這個原因。

        3.3.12 Supported Page Size

            PF支援的頁大小的集合;每個bit代表一個頁大小;如果第n個比特置一,則支援2**(n + 12)位元組的頁大小,0 <= n <= 31;

            示例:Supported Page Size = 0x00000553,則表示支援4KB, 8KB, 64KB, 256KB, 1MB, 4MB大小的頁。

        3.3.13 System Page Size

            由軟體配置;僅能有一個比特置一;置一的比特必須在Supported Page Size集合中;

            示例:System Page Size = 1,則表示頁大小為4KB。

            含義:表示該PF的所有VF的bar必須以System Page Size對齊;

        3.3.14 VF BAR0, VF BAR1, VF BAR2, VF BAR3, VF BAR4, VF BAR5

            配置方式:與PF的bar寄存器一樣:通過寫全1,然後讀回來确定bar空間的大小。

            含義:BAR0表示該PF的所有VF的bar0的基位址;BAR0映射的空間大小為: 一個VF的bar0的大小 * NumVFs;其他BAR同理;

            PF中所有VF的bar0的大小是一樣的;其他bar也是;

    3.4 PF/VF配置空間頭

    3.5 PCI Express Capability

    3.6 PCI Standard Capability

    3.7 PCI Express Extended Capability

        相應寄存器在VF和PF間的差異,主要展現為VF是否支援該寄存器,暫不關心。        

繼續閱讀