什么是“4G以上解码”?

jmo*_*oon 14 bios memory

我一直在处理一个问题,如果我没有在 BIOS 设置中启用“4G 以上解码”,我的服务器系统将无法使用一定数量的存储设备启动。

谷歌结果给出了这个:““4G 以上解码”的定义是允许用户为 64 位 PCIe 设备启用或禁用内存映射 I/O 到 4GB 或更大的地址空间,因为主 VGA 卡应该始终是映射到 4GB 地址以下。” ( https://www.asus.com/support/FAQ/1004170/ )

但这对于不太了解计算机的人来说意味着什么?

小智 14

由于从来没有官方答案,这是第一个谷歌结果之一:

这允许 64 位 PCIe 设备使用 64 位地址空间中的地址。由于 32 位操作系统无法访问 64 位地址空间*,因此该选项是出于兼容性原因。在大多数情况下,它不需要启用。根据我的经验,大多数主板默认关闭此设置。如果您有 64 位操作系统,启用它通常没有坏处。

通常,人们在安装了许多 PCIe 卡时启用它,例如带有三重和四重 SLI 以及使用 GPGPU 计算模块,例如 NVIDIA 的 Tesla。它更常用于工作站和服务器。

由于这两种设置都不会导致 64 位操作系统出现问题,因此大多数情况下您可以启用或禁用它而不会产生任何不良影响。
______________
*?注意32位处理器,或32位模式的处理器,可以访问2 32 个字节,即2 2 ×2 30 = 4?千兆字节?(4?GiB)。

  • OP 可能有一些不寻常的 PCIe 设备,其中包含 BIOS 认为 CPU 需要访问的大量板载高速内存。 BIOS 可能有错误,在这种情况下,BIOS 更新可能会修复它。但 BIOS 也可能是正确的。我在配备 Xeon Phi 协处理器和大量板载 RAM 的台式机上也遇到了同样的问题。在这种情况下,BIOS 是正确的。 (2认同)

小智 9

在 x86 PC 上,内存空间在系统中是共享的。系统内存从下往上映射(0 -> xGB),PCI 内存空间位于系统内存空间的上部(xxx --> FFFFFFFF 4GB-1)。请注意,“内存空间”不是“内存”。这只是硬件解码和声明事务的地址范围。

这通常是可以的,因为 PCI/PCIe 设备通常为其 PCI BAR(基地址范围)请求合理的内存量,例如 64K 或更少。BAR 是诸如设备特定寄存器之类的东西所在的地方,也是设备驱动程序访问以控制设备的地方。非常大的BAR不适用于大多数设备,因为它们使用DMA引擎来传输数据而不是主机CPU执行PIO访问(性能非常差),因此它们不需要将其内部存储映射到BAR。

例如,一旦开始使用 GPU 类型设备,高端设备就会要求非常大的 PCI BAR 空间,例如 32GB 或更多。如果您的 PCI 内存空间限制为 32 位,则没有可用的地址范围来容纳 32GB。因此,BIOS PCI 枚举开始在枚举期间支持 64 位 PCI BAR 分配。这通常开始于大约 12 年前,一些最早支持它的算法仍然存在错误或限制。如果 BAR 大于 8GB,某些系统会挂起。自那时以来,PCI 枚举算法得到了改进。

因此,“高于 4GB 解码”意味着 BIOS PCI 枚举“允许”分配高于 4GB(最大 32 位)的 PCI BAR 内存范围。它甚至可以对小型 PCI BAR 执行此操作,只要它们将自己报告为 64 位即可。

请注意,在 PCI/PCIe 设备中,PCI BAR 是 32 位的。如果一个PCI BAR想要支持64位,它会“组合”2个32位BAR来存储64位地址。具有“64位PCI BAR 2”的设备意味着其BAR 2位于所分配地址的低32b,而BAR 3则变为高32b。

另请注意,由于 PAE,32 位 x86 仍然可以访问 4GB 以上的 PCI BAR。