我的系统是否使用了所有可用的 RAM?

cpr*_*prn 4 memory ram dmidecode

我在不应该使用它的主板上安装了 16GB 的 RAM。我应该购买更好的主板还是根本不改变任何东西?它似乎工作正常。

内存:Crucial Ballistix Sport "(8GBx2) DDR3 PC3-12800"
主板:Asrock N68C-S UCC "系统内存最大容量:8GB"

  1. gnome-control-center.real info撒谎?

    Memory: 15,7GB
    
    Run Code Online (Sandbox Code Playgroud)
  2. 是否dmidecode -t16说我的主板可以占用 2x 8GB 或 8GB 总容量?

     Maximum Capacity: 8 GB
     Number Of Devices: 2
    
    Run Code Online (Sandbox Code Playgroud)
  3. 是否free -h撒谎说有11个15GB的使用?

                 total       used       free     shared    buffers     cached
    Mem:           15G        11G       4,2G       7,8G       140M       9,3G
    
    Run Code Online (Sandbox Code Playgroud)
  4. 这个输出不应该是dmidecode -t 171600 MHz 速度吗?

    Handle 0x0010, DMI type 17, 27 bytes
            Size: 8192 MB
            Speed: 400 MHz
    Handle 0x0012, DMI type 17, 27 bytes
            Size: 8192 MB
            Speed: 400 MHz
    
    Run Code Online (Sandbox Code Playgroud)

Liz*_*rdx 6

小故事:

如果您的主板发布,并且您的系统启动,并且 free/top 显示您的 ram 为 16 gB,那么它可以工作。即使主板制造商也可能低估系统板的容量,因此真正的测试是内存是否正确安装,正确匹配,运行,即启动,并稳定运行,即不崩溃,然后它可以工作。您还可以通过尝试将所有内存用于某事或其他事情来进行测试,并查看系统是否保持稳定。因为你有非常好的内存,很重要,低等级的内存很可能无法在 16gB 下工作。这就是为什么他们不说它支持 16gB 而是选择更保守的 8gB 的原因。

你的工具,如 free、top,报告系统的真实内存,并没有说谎,这是内核可以访问的可用内存。读取 dmi 数据的工具确实会撒谎,因为 dmi 会根据填写该数据的公司随机撒谎。

gnome-control-center.real 信息会撒谎吗?

Memory: 15,7GB
Run Code Online (Sandbox Code Playgroud)

不,它告诉你真相。

dmidecode -t16 是否说我的板子总共可以占用 2x 8GB 或 8GB?

 Maximum Capacity: 8 GB
 Number Of Devices: 2
Run Code Online (Sandbox Code Playgroud)

它说总共8GB。在查看样本类型 16(在本例中是我的)时,您可以清楚地看到它。容量是指阵列的容量。这是一个单一的内存阵列。该阵列据称(尽管在您的情况下是错误的)容量为 8gB(在我的情况下是正确的),在我的情况下,它有 4 个设备。在您的情况下,它有 2 个设备。请注意,不幸的是,您无法通过一个插槽中可以使用的最大棒来推断总容量。也就是说,您可以有 4 个插槽,容量为 8gB,但每个插槽最多 4gB,这意味着您可以使用 4x2gG 或 2x4gB,但不能使用 4x4gB。

Handle 0x0012, DMI type 16, 15 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: None
        Maximum Capacity: 8 GB
        Error Information Handle: Not Provided
        Number Of Devices: 4
Run Code Online (Sandbox Code Playgroud)

free -h 是否说谎说使用了 15GB 中的 11 个?

不,免费是告诉你真相。top会告诉你同样的事实(尽管内核认为什么是免费或不免费的问题非常神秘,并且随着这些工具的实现而变化,但这与这个问题的主题相去甚远)。这是内核向用户空间报告它可以访问的内存以及使用的内存。

dmidecode -t 17 的这个输出不应该是 1600 MHz 的速度吗?

这取决于您的系统。以及 dmidecode 如何解释数据。我对问题的这一部分生疏了。

长长的故事:

由于我不得不大量处理 ram 报告问题,因此我必须发现 dmidecode ram 数据报告的质量差异。请注意,这不是 dmidecode 的错,因为它的工作是报告 dmi 数据,而不是解释或纠正它。

第一:dmidecode本质上报告两组数据: 1:有人填写的一些数据,即主板供应商的低薪无人机有一个表格要填写,要么懒得做,要么做适用于一种模型,然后只需将该数据复制到另一个模型。2:真实数据,比如一个ram槽是否有ram,大小,类型,速度等。

因此,在系统板内存容量的情况下,dmidecode 不会根据运行时可用于 dmidecode 的任何实际技术规格告诉您容量。它正在做的是重复上述数据不足的人被告知在运送硬件之前填写以检查某些框的数据。

一些主板供应商完美地提供了这些数据,您可以完全相信他们的陈述。其他人提供完全无意义的陈述,这导致 dmidecode 正确报告安装的 4x2gB ram,但容量为 4gB。

例如,我相信 dmidecode 几乎总是(如果不是总是)告诉您有关已安装内存的准确信息,非常准确,但是 dmi 数据通常会包含有关容量的错误数据。

当我不得不处理这个问题时,我总是使用每棒报告作为权威,并且我总是让它覆盖关于实际容量的dmidecode数据,因为后者不是真实数据。

# can be true, false, totally off, or pure fiction re capacity
# the rest of the data is usually pretty good though
dmidecode -t 5 

# extremely accurate and reliable, per stick information. Trust it.
dmidecode -t 6 

# same as 5, might be right re maximum capacity, might not be
dmidecode -t 16 

# extremely accurate, can trust it, but can't learn max 
dmidecode -t 17 capacity.
Run Code Online (Sandbox Code Playgroud)

基本上这取决于主板供应商,他们是否正确填写了 5 和 16 使用的数据字段?我会给你一个例子,清楚地显示他们不想填写的字段。

Handle 0x001A, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0012
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 72 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: DIMM3
        Bank Locator: BANK3
        Type: DDR2
        Type Detail: Synchronous
        Speed: 400 MHz
        Manufacturer: Manufacturer3
        Serial Number: SerNum3
        Asset Tag: AssetTagNum3
        Part Number: PartNum3
Run Code Online (Sandbox Code Playgroud)

您可以通过 dmi 数据以及 /sys 中的所有数据看到这一点,其中包括未填写、供应商填写一半或填写错误的数据。速度后面的项目没有填写正确。我个人最喜欢的是这个,它在内部比你想象的要常见得多:

[Field Name]: To be filled by O.E.M.
Run Code Online (Sandbox Code Playgroud)

你会认为在这个时代会有一些东西可以告诉系统它到底是什么,但遗憾的是事实并非如此。

我可以向您展示数百个机器 dmidecode 数据实例来证明这个问题,但实际上您只需要看到一两个。我倾向于认为更好的主板制造商倾向于更好地填写他们的 dmi 数据集,而低端制造商往往不会这样做,但对此没有硬性规定。

作为基本规则,这是您可以信任的来自 dmidecode 和 ram 的信息:

DMI type 5
# Almost nothing in there except some generic information
Error Detecting Method: 64-bit ECC
Error Correcting Capabilities::
                None
Associated Memory Slots: 4
Enabled Error Correcting Capabilities:
                None


DMI type 6
Socket Designation: DIMM3
Current Speed: 167 ns
Installed Size: 2048 MB (Double-bank Connection)
Enabled Size: 2048 MB (Double-bank Connection)
Error Status: OK # probably

DMI type 16
Number Of Devices: 4

DMI type 17
Data Width: 72 bits
Size: 2048 MB
Locator: DIMM0
Bank Locator: BANK0
Type: DDR2
Type Detail: Synchronous # usually anyway
Run Code Online (Sandbox Code Playgroud)

来自吉尔斯,在评论中:

dmidecode 可能会少报最大容量的另一个原因是当板制造时 X GB 棒还不存在(或者板制造商出于某种原因懒得用它们进行测试),因此板将 Y GB 记录为Y < X 的最大值,但是当 X GB 棒出现时,它们就会起作用。

关键是要意识到 dmidecode 报告的内存阵列的最大容量不是计算出来的,它只是某人在为主板创建 dmi 表时输入的一些数据。我通常相信供应商的主板文档而不是 dmi 数据,但正如这张海报所发现的那样,即使这样也不可靠。