參考文檔
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是否支援該寄存器,暫不關心。