为什么 Ubuntu 无法检测到我 64 位系统上的所有 RAM?

为什么 Ubuntu 无法检测到我 64 位系统上的所有 RAM?

可能重复:
Ubuntu 64 位系统仅能检测到 3.1 GB 的内存

已识别问题:BIOS 错误。请参阅下面的 dmesg 输出。

问题是:如何解决这个问题?自 2.6.32 以来所做的更改引入了这个问题。Canonical 或内核维护人员可以提供补丁来修复这个问题吗?我该向谁咨询这个问题?

感谢大家!

原始问题:

我认为 Ubuntu 10.10 附带的 64 位 2.6.35 内核存在问题。我有一台 Gigabtye GA-970A-UD3,配有 AMD FX-8120 处理器、16GB DDR3-1333、nVidia GTX550Ti 和 OCZ Agility 3 120GB SSD。

我安装了 Ubuntu 10.10,以便使用 2.6.35 内核获得 SSD TRIM 支持。但是,成功安装操作系统后,系统监视器仅报告 3.2GB。它看到 FX-8120 的 8 个核心,并且uname -a报告x86_64。此外,dmidecode显示四组内存已满。怀疑内存有问题,我将 16GB 换成了其他制造商的 8GB,但问题仍然存在。使用 2.6.35 内核的 10.10 在 64 位上不会看到超过 4GB 的内存。

我在配备 24GB RAM 的 i7-960 上安装了 64 位 10.04 LTS,它可以看到全部 24GB。当我在 FX-8120 机器上启动 64 位 10.04 LTS 时,它可以看到全部 16GB 和 8 个内核。

显然,2.6.32 和 2.6.35 之间发生了一些变化,影响了内存支持。

我追求 2.6.35 的 TRIM 支持,但不想以损失 75% 的 RAM 为代价。我正在寻找一些指导或建议。是否需要新的内核标志,或者我是否需要获取 2.6.33 及更高版本的自定义版本才能同时解决 TRIM 支持和内存问题。

任何帮助都值得感激!

更新:安装的 10.04 LTS 版本是 Ubuntu 下载站点为 10.04 64 位版本提供的任何 ISO。我在安装时打开了“下载更新”,因此 10.04 LTS 当前在使用该 ISO 的全新安装上执行的任何操作都是我正在运行的。我可以为请求的任何命令提供输出,以确定此机器的确切版本/修订版本。我还将在我的 i7-960 上测试启动 10.10,看看它是否报告 4GB 而不是 24GB。这将消除芯片组支持作为一个潜在问题,因为它会跨越架构界限并表明存在内核问题。

更新 2:这是一个 BIOS 错误。

dmesg 输出片段:

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 2.6.35-22-generic (buildd@allspice) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu4) ) #33-Ubuntu SMP Sun Sep 19 20:32:27 UTC 2010 (Ubuntu 2.6.35-22.33-generic 2.6.35.4)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-2.6.35-22-generic root=UUID=9129347f-e2a2-4b97-965c-800823aaf090 ro quiet splash
[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009a000 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000cfda0000 (usable)
[    0.000000]  BIOS-e820: 00000000cfda0000 - 00000000cfdd1000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000cfdd1000 - 00000000cfe00000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000cfe00000 - 00000000cff00000 (reserved)
[    0.000000]  BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
[    0.000000]  BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
[    0.000000]  BIOS-e820: 0000000100000000 - 000000042f000000 (usable)
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] DMI 2.4 present.
[    0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved)
[    0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable)
[    0.000000] No AGP bridge found
[    0.000000] last_pfn = 0x42f000 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: uncachable
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-C7FFF write-protect
[    0.000000]   C8000-FFFFF uncachable
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 000000000000 mask FFFF80000000 write-back
[    0.000000]   1 base 000080000000 mask FFFFC0000000 write-back
[    0.000000]   2 base 0000C0000000 mask FFFFF0000000 write-back
[    0.000000]   3 base 0000CFE00000 mask FFFFFFE00000 uncachable
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
[    0.000000] e820 update range: 00000000cfe00000 - 000000042f000000 (usable) ==> (reserved)
[    0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13040MB of RAM.
[    0.000000] ------------[ cut here ]------------
[    0.000000] WARNING: at /build/buildd/linux-2.6.35/arch/x86/kernel/cpu/mtrr/cleanup.c:971 mtrr_trim_uncached_memory+0x2d8/0x303()
[    0.000000] Hardware name: GA-970A-UD3
[    0.000000] Modules linked in:
[    0.000000] Pid: 0, comm: swapper Not tainted 2.6.35-22-generic #33-Ubuntu
[    0.000000] Call Trace:
[    0.000000]  [<ffffffff8106077f>] warn_slowpath_common+0x7f/0xc0
[    0.000000]  [<ffffffff810607da>] warn_slowpath_null+0x1a/0x20
[    0.000000]  [<ffffffff81af7970>] mtrr_trim_uncached_memory+0x2d8/0x303
[    0.000000]  [<ffffffff81af2910>] setup_arch+0x422/0x79e
[    0.000000]  [<ffffffff815864c9>] ? printk+0x68/0x6f
[    0.000000]  [<ffffffff81aed9f3>] start_kernel+0xdd/0x390
[    0.000000]  [<ffffffff81aed341>] x86_64_start_reservations+0x12c/0x130
[    0.000000]  [<ffffffff81aed43f>] x86_64_start_kernel+0xfa/0x109
[    0.000000] ---[ end trace a7919e7f17c0a725 ]---
[    0.000000] update e820 for mtrr

dmidecode -t 内存:

# dmidecode 2.9
SMBIOS 2.4 present.

Handle 0x0005, DMI type 5, 24 bytes
Memory Controller Information
    Error Detecting Method: 64-bit ECC
    Error Correcting Capabilities:
        None
    Supported Interleave: One-way Interleave
    Current Interleave: One-way Interleave
    Maximum Memory Module Size: 1024 MB
    Maximum Total Memory Size: 4096 MB
    Supported Speeds:
        70 ns
        60 ns
    Supported Memory Types:
        Standard
        EDO
    Memory Module Voltage: 3.3 V
    Associated Memory Slots: 4
        0x0006
        0x0007
        0x0008
        0x0009
    Enabled Error Correcting Capabilities:
        None

Handle 0x0006, DMI type 6, 12 bytes
Memory Module Information
    Socket Designation: A0
    Bank Connections: 1
    Current Speed: 53 ns
    Type: Other Unknown EDO
    Installed Size: 4096 MB (Double-bank Connection)
    Enabled Size: 4096 MB (Double-bank Connection)
    Error Status: OK

Handle 0x0007, DMI type 6, 12 bytes
Memory Module Information
    Socket Designation: A1
    Bank Connections: 2
    Current Speed: 53 ns
    Type: Other Unknown EDO
    Installed Size: 4096 MB (Double-bank Connection)
    Enabled Size: 4096 MB (Double-bank Connection)
    Error Status: OK

Handle 0x0008, DMI type 6, 12 bytes
Memory Module Information
    Socket Designation: A2
    Bank Connections: 3
    Current Speed: 53 ns
    Type: Other Unknown EDO
    Installed Size: 4096 MB (Double-bank Connection)
    Enabled Size: 4096 MB (Double-bank Connection)
    Error Status: OK

Handle 0x0009, DMI type 6, 12 bytes
Memory Module Information
    Socket Designation: A3
    Bank Connections: 4
    Current Speed: 53 ns
    Type: Other Unknown EDO
    Installed Size: 4096 MB (Double-bank Connection)
    Enabled Size: 4096 MB (Double-bank Connection)
    Error Status: OK

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

Handle 0x002A, DMI type 17, 27 bytes
Memory Device
    Array Handle: 0x0029
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: DIMM
    Set: None
    Locator: A0
    Bank Locator: Bank0/1
    Type: Unknown
    Type Detail: None
    Speed: 1333 MHz (0.8 ns)
    Manufacturer:  
    Serial Number:  
    Asset Tag:  
    Part Number:  

Handle 0x002B, DMI type 17, 27 bytes
Memory Device
    Array Handle: 0x0029
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: DIMM
    Set: None
    Locator: A1
    Bank Locator: Bank2/3
    Type: Unknown
    Type Detail: None
    Speed: 1333 MHz (0.8 ns)
    Manufacturer:  
    Serial Number:  
    Asset Tag:  
    Part Number:  

Handle 0x002C, DMI type 17, 27 bytes
Memory Device
    Array Handle: 0x0029
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: DIMM
    Set: None
    Locator: A2
    Bank Locator: Bank4/5
    Type: Unknown
    Type Detail: None
    Speed: 1333 MHz (0.8 ns)
    Manufacturer:  
    Serial Number:  
    Asset Tag:  
    Part Number:  

Handle 0x002D, DMI type 17, 27 bytes
Memory Device
    Array Handle: 0x0029
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: DIMM
    Set: None
    Locator: A3
    Bank Locator: Bank6/7
    Type: Unknown
    Type Detail: None
    Speed: 1333 MHz (0.8 ns)
    Manufacturer:  
    Serial Number:  
    Asset Tag:  
    Part Number:  

uname -a

Linux artemis 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:32:27 UTC 2010 x86_64 GNU/Linux

答案1

AMD FX 处理器支持方面的问题是由于 Linux 内核从 2.6.33 开始发生变化。10.04 附带的 2.6.32 内核可以与硬件正常配合,查看所有可用内存。

我一开始使用的是 10.04 LTS 版本,内存为 16GB。然后我通过 kernel.ubuntu.com 升级到 2.6.33 内核,内存降至 3.2GB。dmesg 输出报告:

WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13040MB of RAM

后面是内核源代码中存在问题的确切区域的内核跟踪信息。

此时,我使用的是 10.04 还是 10.10 已不再重要。一旦内核版本超过 2.6.32,就会出现此问题。这不是 FX 处理器的问题。即使是 2.6.32 内核也可以正确识别具有适当数量内核的处理器。技嘉 GA-970A-UD3 BIOS 没有执行内存重新映射的选项,因此它可能默认执行此操作。

在 3.0 内核上启动 Ubuntu 11 会导致机器在硬件检测时冻结。我还没有尝试过 12.04 alpha 版本。

允许 2.6 内核在有缺陷的硬件(如我的主板)上运行的合理解决方案是在更高版本的内核中修补 arch/x86/kernel/cpu/mtrr/cleanup.c,以使用不执行 MTRR 检查的旧版 2.6.32 代码。研究表明,MTRR 是通过 BIOS 遗留的组件,似乎可以安全禁用。

这也将允许较新硬件的用户运行带有较新驱动程序的旧版基于 Linux 2.6 的系统并正确支持 SSD。

我的下一步是下载我正在使用的 2.6.33 内核和 2.6.32 内核的源代码,并研究如何执行补丁以查看结果。请注意,我不是内核开发人员,我的 C 语言也生疏了,但我可以很好地尝试一下。如果它有效,我会考虑向内核维护者发布补丁。

相关内容