裝置支援很大的 BAR,系統就一定能分配嗎?

BAR
Base Address Register,基底位址暫存器

裝置支援很大的 BAR,系統就一定能分配嗎?

BAR
Base Address Register,基底位址暫存器

選擇步驟後,圖中對應的元件與下方解說會加上重點標示。完整圖與所有解說會持續顯示;也可用方向鍵切換步驟。

圖只列資源重新配置的閱讀主線;正式操作仍須先妥善停止使用該資源,並保留平台與裝置的相依條件。

本章角色與事件Resize先查支援與可用空間,改大小後重寫BAR。讀取支援大小與資源選擇可配置的大小確認 BAR 與上層路徑有效停用解碼 → 改大小 → 重寫位址

作者依 Base 6.0 繪製的教學示意;省略與本章無關的交換。

BAR(Base Address Register,基底位址暫存器)描述裝置資源;Resizable BAR(可調大小的 BAR)讓軟體從支援大小中選擇。配置還須通過上層視窗與平台資源限制。本章把「可選大小」接回 Chapter 4 的完整位址路徑,再介紹其他資源描述方式。

  1. 支援大小與可用空間一起看

    硬體能使用某大小,不代表平台有足夠且連續的合法範圍可分配。

    Figure 7-174 找到每個可調BAR的 Capability/Control,再用 Figure 7-176 讀支援大小。

    Base 6.0 §7.8.6,pp.1135–1138。

  2. 依規則修改大小與地址

    未配置資源時不能直接重新啟用解碼;上層視窗也須和新範圍一致。

    軟體先清 Memory Space Enable,再改 BAR Size。變更後對應BAR內容未定義,必須重新設定有效基址。

    Base 6.0 §7.8.6,p.1135;路徑背景見Chapter 4。

  3. 最後核對整條路徑

    EA(Enhanced Allocation,增強配置)與FPB(Flattening Portal Bridge,扁平化入口橋接)各有適用拓樸。

    重新確認資源對齊、範圍與橋接視窗,再開啟符合條件的存取。其他配置機制也要先辨識,不能同時把同一資源算兩次。

    Base 6.0 §6.23、§6.26,pp.810、812、819–821。

想調整 BAR,如何從能力找到可配置的範圍?

先沿 Extended Capability List 找到 ID=0015h、Version=1 的 Resizable BAR 結構。Figure 7-174 顯示每個可調 BAR 各有一組 Capability 和 Control;第一組 Control 的 Number of Resizable BARs 才告訴我們總共有幾組。再依 Figure 7-177 的 BAR Index 找原本的 BAR;Index=0 指向 Configuration Space offset 10h,64-bit BAR 則指向較低的 DWORD。

【模擬資料】以下資料為教學用途建立,不代表特定硬體或平台。假設某 Endpoint 的 BAR0 是 32-bit Memory BAR,Resizable BAR 結構起點為 R,只有一組 Capability/Control。Capability(R+04h)讀到 00005000h,Control(R+08h)讀到 00000820h;Control 中代表更大尺寸的支援位元均為零。平台目前只有一段符合條件的 256 MiB 範圍可用,沒有可用的 1 GiB 範圍。

讀取位置讀值與欄位下一步
Capability R+04hbit12=1、bit14=1Table 7-152:分別支援 256 MiB、1 GiB
Control R+08hBAR Index=0;Number of Resizable BARs=1;BAR Size=8Table 7-153:目前選擇 220+8 bytes,即 256 MiB
平台資源可分配 90000000h–9FFFFFFFh範圍為 256 MiB,基址符合大小對齊

兩個支援位元提供選項;BAR Size 是目前設定。大小編碼 8 對應 256 MiB,編碼 10 對應 1 GiB。寫入未宣告支援的編碼會產生 undefined(規格未定義)的結果。1 GiB 仍可由 32-bit BAR 表示;規格只允許 64-bit BAR 宣告 4 GiB 或更大的選項。

假設之後平台騰出 C0000000h–FFFFFFFFh,並確認上層 Bridge Window 可以涵蓋這個 1 GiB 範圍。系統先依裝置與平台要求停止使用資源,再清除 Command Register 的 Memory Space Enable,將 BAR Size 寫為 10。此時對應 BAR 的內容為 undefined;軟體重新寫入基址 C0000000h,確認整條路徑後才重新啟用 Memory Space Enable。若資源未獲配置,則不啟用解碼。停止裝置工作的方法需查裝置與平台文件;完整 Window 配置見 Chapter 4。

一般 Resizable BAR 可由 PF(Physical Function,實體功能)實作,不改變 SR-IOV 的 VF BAR 設定。需要調整 VF(Virtual Function,虛擬功能)資源時,應在 PF 的 Configuration Space 查找獨立的 VF Resizable BAR Capability;該 Capability 不存在於 VF。VF BAR Size 變更前須清除 SR-IOV Control 的 VF MSE,之後重設 VF BAR;實際大小還須考慮 System Page Size。相關作用範圍見 Chapter 26。

SR-IOV
Single Root I/O Virtualization,單根I/O虛擬化

PCIe Base 6.0 §7.8.6,Figures 7-174、7-176、7-177,Tables 7-152、7-153,印刷/PDF pp.1134–1142;§7.8.7,p.1142。

EA 的 entry 如何描述一段資源?

EA
Enhanced Allocation,增強資源配置

EA(Enhanced Allocation,增強配置)在適用的永久連接拓樸中,以 entry 描述資源。先看 Figure 6-26 確認 Function 和 Bridge 兩側是否適用,再從 §7.8.5 找 entry。Type 0 的第一筆 entry 位於 Capability 起點加 04h;Type 1 有額外的第二個 DWORD,第一筆從 08h 開始。

【模擬資料】假設另一個永久連接的 Type 0 Function,其 EA 起點為 E,第一筆 entry 的三個 DWORD 依序為 80FF0022h、A0000000h、0000FFFCh。Figure 7-168/Table 7-148 顯示 Entry Size=2,表示首個 DWORD 後面還有兩個 DWORD,所以這筆共 12 bytes,下一筆從 E+10h 開始。BEI(BAR Equivalent Indicator,對應 BAR 的編號)=2 指向 offset 18h;Enable=1,Writable=0。Primary Properties=00h 是 Non-Prefetchable Memory,Secondary Properties=FFh 表示須使用 Primary 定義。

再看 Figure 7-169:Base 與 MaxOffset 的 Field Size 均為 0,兩者都是 32-bit。Base 的低兩個地址位元補 00b,得到 A0000000h;MaxOffset 的低兩位補 11b,得到 0000FFFFh。因此涵蓋 A0000000h–A000FFFFh,共 64 KiB。這是該 entry 的資源範圍;對應的 BAR2 必須硬接為零,不能把同一筆資源再算成另一個 BAR 需求。

Enable=0 不表示這段資源可轉配給其他 Function。Bridge 的 EA 也不必列出所有下游資源,軟體仍須搜尋下游 Function;Memory Space Enable 與 I/O Space Enable 的規則仍適用。

PCIe Base 6.0 §§6.23、7.8.5.2–7.8.5.3,Figure 6-26、Figures 7-168–7-169、Tables 7-148、7-150,印刷/PDF pp.810–812、1129–1133。

Hierarchy ID 和 FPB 要分別查什麼?

FPB
Flattening Portal Bridge,扁平化入口橋接器

在多個 Hierarchy 的系統裡,單靠 Routing ID(路由識別碼)不一定能跨階層區分 Function。§6.25 使用 System GUID 與 Authority ID、Hierarchy ID,以及該階層中的 Routing ID 一起識別。假設同一系統有 Hierarchy 0001h 和 0002h,兩者都出現 Routing ID 0300h;階層不同,不能當成同一個 Function。這個例子假設系統識別資訊有效;若 Authority ID=00h,System GUID 並無意義,不能拿它當有效的全球識別資訊。

Hierarchy ID Message 由 Downstream Port 在軟體要求下產生,接收端的 Upstream Port 可透過 Hierarchy ID Extended Capability 回報資訊。Figure 2-55/2-56 分別是 Non-Flit/Flit Mode 的訊息格式,§7.9.17 描述接收後的 Capability;實際如何使用資訊仍由平台決定。

FPB(Flattening Portal Bridge,扁平化入口橋接)處理另一個問題:如何分配 Routing ID 與 Memory Space。先看 Figure 6-28 定位採用 FPB 的邏輯 Bridge,再看 Figure 6-29 的 Switch 扁平化,最後以 Figure 6-30 理解 bit vector 如何將資源區段指派給 Secondary Side。這是需要支援與設定的可選機制,不能直接套用到未啟用 FPB 的 Bridge。

PCIe Base 6.0 §2.2.8.6.4,Figures 2-55/2-56,pp.185–186;§6.25,pp.815–816;§6.26.1,Figures 6-28–6-30,pp.819–821;§7.9.17,pp.1268–1271。印刷頁與 PDF 頁相同。

Hierarchy ID Message 的 System GUID 要從哪裡讀?

先讀 §2.2.8.6.4 與 Table 2-31,確認這是 PCI-SIG Defined Type 1 VDM:Message Code 7Fh、Vendor ID 0001h、Subtype 01h。它使用帶資料的 MsgD,Length 為 4 DW,也就是 16 bytes;TC 為 000b,Attr 與 Tag 為 Reserved;Routing 011b 表示 Broadcast from Root Complex。若要回顧 Message Code 與 Subtype 的差別,可先看 Chapter 36。

DW
Double Word,4 bytes的資料單位
TC
Traffic Class,流量類別

接著依模式選 Figure 2-55(Non-Flit)或 Figure 2-56(Flit)。Hierarchy ID 在 Header 的 bytes 8–9;byte 13 是 GUID Authority ID;bytes 14–15 是 System GUID 的高 16 bits。Payload 的 bytes 16–31 則包含 System GUID 的低 128 bits。因此,完整 System GUID 是高 16 bits 與低 128 bits 合成的 144 bits;只保存 Payload 會漏掉高位元。§6.25 列出各 byte 與 GUID 位元的對應。

比對系統身分時,依 §6.25 完整比較 Authority ID、System GUID 和 Hierarchy ID,再結合該 Hierarchy 內的 Routing ID。Authority ID 00h 時,依 Table 6-17,System GUID 沒有意義且必須為零,不能用它宣稱已取得有效的全球識別。接收端可以各自選擇是否檢查訊息格式,不得檢查 Reserved bits;若已實作的檢查發現違規,則在接收 Port 回報 Malformed TLP。

TLP
Transaction Layer Packet,交易層封包

版本與來源

本章以 PCI Express Base Specification Revision 6.0(6.0-1.0-PUB)為準,文件頁與 PDF 頁相同。案例的配置與讀值均為作者假設,並非實機測量。

完整來源定位 / Complete source locations
  • §7.8.6 Resizable BAR Extended Capability, pp.1134–1137; §7.8.6.2 Resizable BAR Capability Register, Figure 7-176 and Table 7-152, pp.1137–1140; §7.8.6.3 Resizable BAR Control Register, Figure 7-177 and Table 7-153, pp.1140–1142; §7.8.7 VF Resizable BAR Extended Capability, p.1142.
  • §6.23 Enhanced Allocation, Figure 6-26, pp.810–812; §7.8.5.3 Enhanced Allocation Per-Entry Format (Offset 04h or 08h), Figures 7-168–7-169, Tables 7-148 and 7-150, pp.1129–1133.
  • §2.2.8.6.4 Hierarchy ID Message, Table 2-31 Hierarchy ID Message, Figures 2-55 Hierarchy ID Message - Non-Flit Mode and 2-56 Hierarchy ID Message - Flit Mode, pp.185–186; §6.25 Hierarchy ID Message, Table 6-17 System GUID Authority ID Encoding, pp.815–817; §6.26.1 Introduction, Figures 6-28–6-30, pp.819–821; §7.9.17 Hierarchy ID Extended Capability, pp.1268–1271.