为什么 SUSE Linux 无法识别整个物理 RAM?

-5 linux memory

我们为 HP ProLiant DL380 Gen9 计算机配备了 512 GB 的物理 RAM。计算机的 BIOS 正确显示安装了 512 GB 的物理内存。但遗憾的是,操作系统SUSE Linux Enterprise Release 11 Service Pack 4 显示的总内存只有504.7 GB,远小于预期的512 GB。我在 Gnome 系统监视器中看到总内存数字 504.7 GB,当我在终端会话中执行命令“free -m”时,它显示总内存大小为 516780 兆字节,对应于 504.7 GB。这让我很恼火,因为我想为在此服务器上运行的软件使用完整的 512 GB 物理 RAM。我不想白白丢掉 7.3 GB 的 RAM。在 Internet 上搜索并没有帮助我找出为什么 Linux 仅识别 504.7 GB 的总内存而不是实际安装的 512 GB。此外,我在计算机的 BIOS 中没有看到任何可以解释这种奇怪的 7.3 GB RAM 丢失的内容。所以,我现在问一下这个社区的高手:如何配置Linux操作系统来识别和使用完整的512GB物理内存?

eww*_*ite 7

令人沮丧的是,管理具有 512GB RAM 的高端服务器的人专注于此。

运行free -g

如果服务器POST为 512GB,则表示 RAM 是健康的。

Linux 内核和系统 BIOS 保留了一些 RAM,这是正常的。这不是一个错误,它不是一个旨在从您购买的 RAM 数量中剥夺您的计划。就是这样:

256GB 服务器:

#  free -g
             total       used       free     shared    buffers     cached
Mem:           252        152         99          0          0          2
Run Code Online (Sandbox Code Playgroud)

或者这个 64GB RAM 系统:

在此处输入图片说明

  • 这只是日常……就像,任何接触过硬件的人都知道这是理所当然的。 (3认同)
  • -1 *令人沮丧的是,管理具有 512GB RAM 的高端服务器的人专注于此。* 首先,它不是高端服务器。我有一个机架的服务器,里面有所有这些,还有更多,但按照现代标准,它们已经过时了。(G9 Proliant DL380 的最大内存为 3.0 TiB)其次,这种说法通过在技术话语中注入情感和冲突而降低了答案的有效性。 (2认同)
  • @Xalorous“硬件保留内存”至少有一部分内存被保留用于比操作系统更低的级别 - BIOS、硬件等,这适用于 Windows、Solaris、BSD、Linux 和所有其他操作系统。您可能没有注意到,因为不同操作系统报告内存使用的方式不同,但它确实存在。 (2认同)

841*_*104 5

我不使用 SUSE,但 CentOS 表现出类似(或相同)的行为。通常这必须与 BIOS 保留有关。

考虑安装了 8 个 16GB ECC DIMM 的 CentOS 7 系统。

# dmidecode -t 17 | grep Size
    Size: 16384 MB
    Type Detail: Registered (Buffered)
    Size: No Module Installed
    Type Detail: Synchronous
    Size: 16384 MB
    Type Detail: Registered (Buffered)
    Size: No Module Installed
    Type Detail: Synchronous
    Size: 16384 MB
    Type Detail: Registered (Buffered)
    Size: No Module Installed
    Type Detail: Synchronous
    Size: 16384 MB
    Type Detail: Registered (Buffered)
    Size: No Module Installed
    Type Detail: Synchronous
    Size: 16384 MB
    Type Detail: Registered (Buffered)
    Size: No Module Installed
    Type Detail: Synchronous
    Size: 16384 MB
    Type Detail: Registered (Buffered)
    Size: No Module Installed
    Type Detail: Synchronous
    Size: 16384 MB
    Type Detail: Registered (Buffered)
    Size: No Module Installed
    Type Detail: Synchronous
    Size: 16384 MB
    Type Detail: Registered (Buffered)
    Size: No Module Installed
    Type Detail: Synchronous
Run Code Online (Sandbox Code Playgroud)

那应该有 128GB 的​​内存。但是,CentOS 仅报告 125GB 的系统内存。

# free -h
              total        used        free      shared  buff/cache   available
Mem:           125G         65G         56G        113M        4.3G         56G
Swap:          3.8G          0B        3.8G
Run Code Online (Sandbox Code Playgroud)

其余部分被内核尊重以供 BIOS/硬件使用。

# dmesg | grep e820
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x00000000000993ff] usable
[    0.000000] BIOS-e820: [mem 0x0000000000099400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007de21fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007de22000-0x000000007deb0fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007deb1000-0x000000007dfb9fff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000007dfba000-0x000000007e1dffff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007e1e0000-0x000000007f364fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007f365000-0x000000007f7fffff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x0000000080000000-0x000000008fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed3ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000207fffffff] usable
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] e820: last_pfn = 0x2080000 max_arch_pfn = 0x400000000
[    0.000000] e820: update [mem 0x80000000-0xffffffff] usable ==> reserved
[    0.000000] e820: last_pfn = 0x7de22 max_arch_pfn = 0x400000000
[    0.000000] e820: [mem 0x90000000-0xfed1bfff] available for PCI devices
[    0.948608] e820: reserve RAM buffer [mem 0x00099400-0x0009ffff]
[    0.948610] e820: reserve RAM buffer [mem 0x7de22000-0x7fffffff]
Run Code Online (Sandbox Code Playgroud)

Linux 和 Windows 在表示上的唯一区别是 Windows 对正在发生的事情更清楚一点。

Windows 10 总内存与可用内存

在 Linux 中,您必须查看dmesg.

# dmesg | grep Memory
[    0.000000] Memory: 131808356k/136314880k available (6441k kernel code, 2132248k absent, 2374276k reserved, 4265k data, 1620k init)
Run Code Online (Sandbox Code Playgroud)