何谓“4G以上解码”?

何谓“4G以上解码”?

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

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

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

答案1

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

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

通常,人们在安装多张 PCIe 卡时会启用此功能,例如三重和四重 SLI 以及使用 GPGPU 计算模块(例如 NVIDIA 的 Tesla)。它在工作站和服务器中更常用。


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

答案2

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

这通常是可以的,因为 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。

答案3

如果您运行的是 32 位操作系统,您几乎肯定需要关闭此功能,否则操作系统可能根本看不到您的某些硬件。由于这会将您的视频内存映射到约 3.5Gb 的可用空间,因此您应该使用随附的任何工具,并确保它不会使用比您需要的更多的内存,因为这些内存将无法供您的操作系统和应用程序使用。大多数可以限制为 128 或 256 Kb。如果您使用的是 64 位操作系统,内存为 8Gb 或更多,您可能可以将其关闭,除非您使用昂贵的显卡玩游戏。

答案4

相关内容