Above 4G Decoding 是什麼?為什麼多 PCIe 設備、NAS 擴展卡和大顯存顯卡建議開啟

解釋 BIOS 中 Above 4G Decoding 的作用、4GB 地址邊界的歷史原因、MMIO 和 BAR 資源分配邏輯,以及它和 JMB585 擴展卡、NAS、多顯卡、Resizable BAR / SAM 的關係。

Above 4G Decoding 是主板 BIOS 裡的一個底層 PCIe 資源分配選項。它常見於 NAS、小主機、工作站、多顯卡主機、軟路由、HBA / SATA 擴展卡和本地 AI 機器的調試過程中。

簡單說,它的作用是:允許 64 位系統把 PCIe 設備需要的 MMIO 地址空間,分配到 4GB 以上的物理地址範圍。

這句話聽起來很底層,但它解決的問題很現實:當主板上插了顯卡、NVMe、網卡、SATA 擴展卡、採集卡、HBA 等多個 PCIe 設備時,如果所有設備都擠在 4GB 以下的老地址空間裡搶位置,就可能出現資源分配失敗、設備不識別,甚至開機卡死。

為什麼會有 4GB 這個邊界

4GB 邊界來自 32 位時代的歷史包袱。

32 位地址空間最大只能尋址:

1
2^32 bytes = 4GB

現代電腦早就是 64 位 CPU 和 64 位作業系統,記憶體也經常是 16GB、32GB、64GB 甚至更多。但主板在開機自檢和 PCIe 設備初始化時,仍然需要考慮舊式相容性。很多 PCIe 設備的資源映射預設會先被安排在 4GB 以下的地址空間內。

問題在於,4GB 以下的空間並不全是給記憶體用的。系統還要在裡面劃出一部分地址給硬體設備使用。

這就是 MMIO

MMIO 是什麼

MMIO 是 Memory-Mapped I/O,記憶體映射輸入輸出。

CPU 不能像讀寫普通記憶體那樣直接「摸到」PCIe 設備內部的暫存器和顯存。它需要把設備的一部分暫存器、緩衝區或顯存窗口映射到系統地址空間中。CPU 讀寫這段地址,就等於在和設備通信。

可以粗略理解為:

  • 設備需要一塊地址範圍。
  • 主板給它分配一段系統物理地址。
  • CPU 訪問這段地址時,實際訪問的是 PCIe 設備。

這塊映射區域不是真的普通 RAM,而是硬體設備占用的地址窗口。

在舊式預設配置下,很多設備的 MMIO 區域會被限制在 4GB 以下,常見就是 3GB 到 4GB 附近那段空間。設備少時通常沒問題,設備一多就開始擁擠。

BAR 是什麼

每個 PCIe 設備都會透過 BAR 向主板宣告自己需要多少地址空間。

BAR 是 Base Address Register,基地址暫存器。它的作用是告訴主板:

1
我需要一塊 MMIO 空間,請給我分配一個地址範圍。

顯卡、NVMe、SATA 控制器、網卡、HBA、USB 擴展卡都可能需要 BAR 空間。設備越多,占用的地址窗口越多。顯卡這類設備還可能需要更大的映射空間。

如果 4GB 以下可用 MMIO 空間不夠,主板就可能無法給後插入的設備分配資源。

不開啟它,可能出現什麼問題

如果關閉 Above 4G Decoding,主板會更傾向於把 PCIe 設備資源塞進 4GB 以下的地址空間。設備少時看不出來,設備多時就可能出現問題。

常見場景包括:

  • 一塊獨立顯卡。
  • 一個或多個 NVMe SSD。
  • 一張 JMB585 / ASM1166 SATA 擴展卡。
  • 一張 2.5G / 10G 網卡。
  • 一個 Wi-Fi / 藍牙模組。
  • 額外的 HBA、採集卡、USB 擴展卡。

這些設備都要向主板申請 BAR / MMIO 地址空間。如果 4GB 以下空間被占滿,主板可能會出現:

  • 某張 PCIe 卡無法識別。
  • BIOS 裡看不到設備。
  • Linux / Windows 裡設備缺失或報資源錯誤。
  • 開機卡在 POST 階段。
  • 黑屏或光標閃爍。
  • 多設備同時插入時才出問題,單獨插每張卡又正常。

在 JMB585 SATA 擴展卡場景裡,很多人會遇到插卡後主板卡在 BIOS 前,或者加了 NVMe、網卡後擴展卡突然不識別。除了 Option ROM、CSM、PCIe Gen 速率之外,PCIe 地址空間分配也是一個值得排查的方向。

開啟 Above 4G Decoding 後發生了什麼

開啟:

1
Above 4G Decoding = Enabled

等於告訴主板:允許把支援 64 位地址的 PCIe 設備 MMIO 資源,分配到 4GB 以上的地址空間。

這樣,PCIe 設備不必全部擠在 4GB 以下的小空間裡。主板可以把部分設備的 BAR / MMIO 映射放到更高地址,減少資源衝突。

對現代 64 位系統來說,這通常是合理配置。尤其是以下機器:

  • 多盤 NAS。
  • 多網卡軟路由。
  • 插了 SATA / HBA 擴展卡的小主機。
  • 多顯卡工作站。
  • AI 推理或訓練機器。
  • 同時有獨顯、NVMe、採集卡、擴展卡的桌面主機。

它的目標不是提升普通軟體性能,而是讓硬體資源分配更寬鬆。

它和 JMB585 / SATA 擴展卡有什麼關係

JMB585 這類 SATA 擴展卡本身不一定需要很大的 MMIO 空間。但問題往往不是它單獨需要多少,而是整台機器上所有 PCIe 設備一起搶地址空間。

例如一台小主機裡可能同時有:

  • 一個 NVMe 系統盤。
  • 一個板載網卡。
  • 一個 Wi-Fi 模組。
  • 一張 JMB585 五口 SATA 擴展卡。
  • 可能還有獨立顯卡或其他控制器。

如果 BIOS 資源分配比較保守,JMB585 可能成為最後一個被初始化的設備。前面的設備已經占掉不少 4GB 以下資源,到它申請 BAR 時,主板就可能分配失敗或進入異常狀態。

這時開啟 Above 4G Decoding,可以讓主板把一部分設備資源安排到 4GB 以上,從而降低衝突機率。

它不能修復壞卡,也不能解決所有 PCIe 鏈路訓練問題,但在「多設備插滿後才異常」的場景裡非常值得嘗試。

它和 Resizable BAR / SAM 的關係

很多人是因為顯卡效能設定才第一次見到 Above 4G Decoding。例如 NVIDIA / AMD 顯卡相關的:

  • Resizable BAR
  • Re-Size BAR
  • ReBAR
  • Smart Access Memory
  • SAM

它們和 Above 4G Decoding 有關係,但不是同一個東西。

Above 4G Decoding 是基礎條件。它允許 PCIe 設備的 MMIO 資源被分配到 4GB 以上。

Resizable BAR 是進一步的能力。傳統情況下,CPU 訪問顯卡顯存時,通常只能通過較小窗口分段訪問,例如 256MB 級別的映射窗口。啟用 ReBAR 後,CPU 可以一次性映射更大範圍的顯存,理論上能減少訪問切換開銷。

很多主板要求先開啟 Above 4G Decoding,再開啟 Resizable BAR。所以可以理解為:

  • Above 4G Decoding:先允許設備地址放到 4GB 以上。
  • Resizable BAR / SAM:再允許顯卡 BAR 窗口變大。

對 NAS 和 SATA 擴展卡來說,重點通常不是 ReBAR,而是前者提供的 PCIe 地址空間。

開啟它有什麼副作用

對現代 64 位 Windows、Linux、Ubuntu、Debian、TrueNAS、Proxmox 等系統來說,開啟 Above 4G Decoding 通常沒有明顯負面影響。

但仍然要注意幾點:

  • 老舊 32 位作業系統可能不適合開啟。
  • 某些很老的 BIOS 或古董 PCIe 設備可能相容性不好。
  • 修改 BIOS 後如果無法啟動,可以清 CMOS 或恢復預設設置。
  • 如果啟用了 ReBAR / SAM,還要確認顯卡、主板、系統和驅動都支援。

在現代硬體和 64 位系統上,它通常是建議開啟的底層良性配置,尤其是設備較多時。

什麼時候建議開啟

以下情況建議開啟 Above 4G Decoding

  • 使用 64 位作業系統。
  • 主板上插了多張 PCIe 設備。
  • 有獨立顯卡,尤其是 4GB 以上顯存的顯卡。
  • 使用 JMB585、ASM1166、HBA、陣列卡、採集卡等擴展設備。
  • 組裝多盤 NAS 或軟路由。
  • 使用多顯卡、AI 算力卡或本地大模型機器。
  • 插上某張 PCIe 卡後開機卡死、找不到特定 PCIe 卡。
  • 單獨插設備正常,多設備一起插就異常。

如果你正在排查 JMB585 SATA 擴展卡 POST 階段卡死,推薦把它和這些設定一起檢查:

  • 關閉 CSM
  • 禁用不需要的 Storage OpROM
  • 將 PCIe 速率從 AutoGen3 改成 Gen2
  • 開啟 Above 4G Decoding
  • 更換 PCIe 插槽。

在 BIOS 裡一般叫什麼

不同主板廠商命名略有差異,常見名稱包括:

1
2
3
4
5
Above 4G Decoding
Above 4GB MMIO BIOS assignment
Memory Mapped I/O above 4GB
64-bit PCIe decoding
PCI 64-bit Resource Handling

常見位置包括:

  • Advanced
  • PCIe Settings
  • PCI Subsystem Settings
  • Chipset
  • North Bridge
  • IO Ports
  • Boot

有些主板會把它和 Resizable BAR 放在一起,有些則藏在高級 PCIe 或芯片組選項裡。

小結

Above 4G Decoding 的核心作用,是讓主板可以把 PCIe 設備的 MMIO / BAR 地址空間分配到 4GB 以上。它解決的不是驅動問題,而是 BIOS / PCIe 資源分配層面的地址空間問題。

對只有少量設備的普通電腦來說,它可能看起來無感。對多盤 NAS、多網卡軟路由、插了 JMB585 / ASM1166 SATA 擴展卡的小主機、多顯卡工作站、本地 AI 主機來說,它就很重要。

如果你遇到插上 PCIe 擴展卡後卡 BIOS、黑屏、光標閃爍、設備不識別,或者多設備同時插入才出問題,Above 4G Decoding = Enabled 是一個值得優先檢查的 BIOS 設置。它不是萬能藥,但它能讓現代 64 位硬體擺脫 4GB 以下地址空間的舊限制,減少 PCIe 資源衝突。

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計