为什么Ubuntu不检测64位的所有RAM?

可能重复:
Ubuntu只在Ubuntu 64位上检测到3.1 GB的ram

ISSUE IDENTIFIED: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] [] warn_slowpath_common+0x7f/0xc0 [ 0.000000] [] warn_slowpath_null+0x1a/0x20 [ 0.000000] [] mtrr_trim_uncached_memory+0x2d8/0x303 [ 0.000000] [] setup_arch+0x422/0x79e [ 0.000000] [] ? printk+0x68/0x6f [ 0.000000] [] start_kernel+0xdd/0x390 [ 0.000000] [] x86_64_start_reservations+0x12c/0x130 [ 0.000000] [] x86_64_start_kernel+0xfa/0x109 [ 0.000000] ---[ end trace a7919e7f17c0a725 ]--- [ 0.000000] update e820 for mtrr 

dmidecode -t memory:

 # 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 

AMD FX处理器支持的问题是由于2.6.33开始的Linux内核的变化。 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内核也能正确识别核心数量。 Gigabyte 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很生疏,但我可以很好地尝试一下。 如果它有用,我会看到向内核维护者发布一个补丁。