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 可能出现什么问题

如果关闭 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 卡后开机卡死、黑屏、光标闪烁。
  • 单独插设备正常,多设备一起插就异常。

如果你正在排查 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 设计