'free' 和 '/proc/meminfo/ 报告的总内存比 'dmidecode' 少

'free' 和 '/proc/meminfo/ 报告的总内存比 'dmidecode' 少

我们在主机托管中心有一台服务器(真正的物理服务器,而不是虚拟机),运行 64 位 Debian(uname -r:)3.16.0-4-amd64

/proc/meminfo报告总内存约 4 GiB:

$ head -n 1 /proc/meminfo
MemTotal:        4051692 kB

free报告相同(我只看了total列;我没有谈论已使用、可用、共享、缓冲区、缓存):

$ free -k
             total       used       free     shared    buffers     cached
Mem:       4051692    3867356     184336     220908      63948    1203596
-/+ buffers/cache:    2599812    1451880
Swap:     15728208     652540   15075668

还有dmesg | grep Memory

$ dmesg | grep Memory
[    0.000000] Memory: 4034240K/4185236K available (5287K kernel code, 949K rwdata, 1836K rodata, 1208K init, 840K bss, 150996K reserved)

但是 dmidecode 报告 4 * 2 GiB = 8 GiB 的 RAM,如果我理解正确的话:

$ sudo dmidecode --type memory

# dmidecode 2.12
SMBIOS 2.6 present.

Handle 0x0008, DMI type 5, 24 bytes
Memory Controller Information
    Error Detecting Method: 64-bit ECC
    Error Correcting Capabilities:
        Single-bit Error Correcting
    Supported Interleave: One-way Interleave
    Current Interleave: One-way Interleave
    Maximum Memory Module Size: 4096 MB
    Maximum Total Memory Size: 16384 MB
    Supported Speeds:
        Other
    Supported Memory Types:
        DIMM
        SDRAM
    Memory Module Voltage: 3.3 V
    Associated Memory Slots: 4
        0x0009
        0x000A
        0x000B
        0x000C
    Enabled Error Correcting Capabilities:
        Single-bit Error Correcting

Handle 0x0009, DMI type 6, 12 bytes
Memory Module Information
    Socket Designation: DIMM1A
    Bank Connections: 0 1
    Current Speed: Unknown
    Type: DIMM SDRAM
    Installed Size: 2048 MB (Single-bank Connection)
    Enabled Size: 2048 MB (Single-bank Connection)
    Error Status: OK

Handle 0x000A, DMI type 6, 12 bytes
Memory Module Information
    Socket Designation: DIMM1B
    Bank Connections: 2 3
    Current Speed: Unknown
    Type: DIMM SDRAM
    Installed Size: 2048 MB (Single-bank Connection)
    Enabled Size: 2048 MB (Single-bank Connection)
    Error Status: OK

Handle 0x000B, DMI type 6, 12 bytes
Memory Module Information
    Socket Designation: DIMM2A
    Bank Connections: 4 5
    Current Speed: Unknown
    Type: DIMM SDRAM
    Installed Size: 2048 MB (Single-bank Connection)
    Enabled Size: 2048 MB (Single-bank Connection)
    Error Status: OK

Handle 0x000C, DMI type 6, 12 bytes
Memory Module Information
    Socket Designation: DIMM2B
    Bank Connections: 6 7
    Current Speed: Unknown
    Type: DIMM SDRAM
    Installed Size: 2048 MB (Single-bank Connection)
    Enabled Size: 2048 MB (Single-bank Connection)
    Error Status: OK

Handle 0x002A, DMI type 16, 15 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: Single-bit ECC
    Maximum Capacity: 16 GB
    Error Information Handle: Not Provided
    Number Of Devices: 4

Handle 0x002C, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x002A
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 2048 MB
    Form Factor: DIMM
    Set: None
    Locator: DIMM1A
    Bank Locator: BANK0
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1333 MHz
    Manufacturer: Micron        
    Serial Number: 501C6FDC
    Asset Tag: AssetTagNum0
    Part Number: 9JSF25672AZ-1G4D1 
    Rank: Unknown

Handle 0x002E, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x002A
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 2048 MB
    Form Factor: DIMM
    Set: None
    Locator: DIMM1B
    Bank Locator: BANK1
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1333 MHz
    Manufacturer: Micron        
    Serial Number: 2A1C6FDC
    Asset Tag: AssetTagNum1
    Part Number: 9JSF25672AZ-1G4D1 
    Rank: Unknown

Handle 0x0030, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x002A
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 2048 MB
    Form Factor: DIMM
    Set: None
    Locator: DIMM2A
    Bank Locator: BANK2
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1333 MHz
    Manufacturer: Micron        
    Serial Number: 511C6FDC
    Asset Tag: AssetTagNum2
    Part Number: 9JSF25672AZ-1G4D1 
    Rank: Unknown

Handle 0x0032, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x002A
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 2048 MB
    Form Factor: DIMM
    Set: None
    Locator: DIMM2B
    Bank Locator: BANK3
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1333 MHz
    Manufacturer: Micron        
    Serial Number: 4B1C6FDC
    Asset Tag: AssetTagNum3
    Part Number: 9JSF25672AZ-1G4D1 
    Rank: Unknown

我遗漏了什么?这是主机托管中心的服务器,因此不幸的是我无法轻松看到实际安装的内容。

编辑: man dmidecode说“通常情况下,DMI 表中包含的信息是不准确的、不完整的或完全错误的。”也许 dmidecode 只是报告了错误的数据?

编辑:这不是重复的为什么 Linux 会奇怪地报告“可用”内存?。这个问题是关于可用内存,以及缓冲区和缓存占用内存而引起的混淆。我不是关注可用内存,只关注总内存。不要让我的命令用法free欺骗你:我没有用它来查看可用内存量,只查看总内存量。如果有人仍然认为这个问题是重复的,请解释我为什么,因为我不明白。

编辑:dmidecode -t1根据 Lenniey 的要求

$ sudo dmidecode -t1
# dmidecode 2.12
SMBIOS 2.6 present.

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: Supermicro
        Product Name: X8SIL
        Version: 0123456789
        Serial Number: 0123456789
        UUID: 49434D53-0200-9037-2500-379025009946
        Wake-up Type: Power Switch
        SKU Number: To Be Filled By O.E.M.
        Family: To Be Filled By O.E.M.

答案1

Supermicro X8SIL 主板的手册可在此处找到: http://www.supermicro.com/manuals/motherboard/3420/MNL-1130.pdf

第 32 页(又名 2-10)表明,如果使用无缓冲(UDIMM)单列内存,则使用 1 GB DIMM 时支持的最大内存量仅为 4 GB,使用 2 GB DIMM 时支持的最大内存量仅为 8 GB。

使用双列 UDIMM,最大容量为 16 GB。

只有使用寄存式(RDIMM)四列内存模块才能达到 32 GB 的最终最大容量,并且使用它们时内存总线速度会受到影响。

通过对“Micron 9JSF25672AZ-1G4D1”进行谷歌搜索,我找到了以下信息: https://www.compuram.biz/memory_module/mt9jsf25672az-1g4d1/micron.htm

这似乎可以证实美光科技 (MT) 9JSF25672AZ-1G4D1 确实是 2 GB 大小的无缓冲单列内存模块。

手册第 34 页(或 2-13 页)指出,当仅使用 4 GB RAM 时,其中很大一部分将分配给系统设备,无法使用。这可能至少解释了安装 8 GB 时缺少的部分内存。不幸的是,手册没有详细描述 8 GB 情况下的系统设备分配。

答案2

@roel-schroeven:差异是由于各种命令所查看的内容不同而造成的。

诸如“free”之类的命令查看系统内存,如操作系统(内核)所报告的。

这 ”解码“命令查看系统硬件 DMI 表,如系统 BIOS 中的 SMBIOS 驱动程序所报告的 - 请参阅上文关于DMI起源的问题

因此,dmidecode 将显示已安装的硬件,但不会显示操作系统必须使用的硬件。这可能会产生误导,因为它可能包括没有操作系统驱动程序但仍然出现在硬件列表中的扩展卡。此外,由于它显示升级选项,这可能会进一步混淆情况。

BIOS 列表无法始终显示正确的信息(您提到的“不准确、不完整或完全错误”免责声明),例如对于 RAM,根据设置的内容和可用的错误更正类型,BIOS 将无法检测错误等扩展信息。在理想情况下,这应该导致“错误状态:不可用”之类的信息,但目前还没有。

答案3

事实证明其中一个内存模块有故障,导致系统忽略该模块以及同一通道中的另一个模块。

现在我们的办公室里有服务器,我们看到确实有 4 个 DIMM 模块,每个 2 GB。我逐个测试了这些模块,发现有一个模块有故障。

(这并不能解释为什么 dmidecode 对所有四个模块都显示“错误状态:正常”。我认为这可以通过手册页中的引述“通常,DMI 表中包含的信息是不准确、不完整或完全错误的。”来解释)

相关内容