我的问题是由错误的内存模块和很可能是损坏的内核二进制文件引起的。
我刚刚用基本上全新的硬件启动了我的电脑。我之前一直在运行 Debian 6.0 AMD64,那里没有任何变化(字面上;我只是从旧主板上拔下硬盘,然后将它们重新连接到新主板),但发现了一些奇怪的东西:
free -m
报告 2985 MB 的 RAM2985 MB 似乎太接近神奇的 3 GB 标记,纯属巧合,但uname -r
打印出来2.6.32-5-amd64
;显然是 64 位内核,这是我正在使用的系统驱动器上安装的全部内容。新主板是华硕 M5A97 Pro,它有四个 DDR3 插槽,据说支持 8 GB 模块。内存模块本身是相同的,四个 Corsair XMS3 PC12800 8 GB,一起购买。
我没有详细查看 UEFI 设置,但确实浏览了它并没有看到任何似乎需要更改以启用大量 RAM 的内容。
编辑:进一步确认我确实在运行 64 位:
# file `which free`
/usr/bin/free: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
#
Run Code Online (Sandbox Code Playgroud)
这是怎么回事,我该怎么办?
编辑 2: dmesg、dmidecode 和 meminfo,根据要求。我现在没有对系统的物理访问权限,所以必须等到今晚才能拉出一些模块,看看它有什么作用。(请注意,dmidecode 报告 3 x 8GB 加上一个空的 DIMM 插槽。还要注意来自内核的 MTRR 不匹配消息,导致 13 GB 的丢失,这至少与主板本身报告的内容相加。)
# dmidecode --type memory
# dmidecode 2.9
SMBIOS 2.7 present.
Handle 0x0026, DMI type 16, 23 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 32 GB
Error Information Handle: Not Provided
Number Of Devices: 4
Handle 0x0028, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM0
Bank Locator: BANK0
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer0
Serial Number: SerNum0
Asset Tag: AssetTagNum0
Part Number: Array1_PartNumber0
Handle 0x002A, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM1
Bank Locator: BANK1
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer1
Serial Number: SerNum1
Asset Tag: AssetTagNum1
Part Number: Array1_PartNumber1
Handle 0x002C, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM2
Bank Locator: BANK2
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer2
Serial Number: SerNum2
Asset Tag: AssetTagNum2
Part Number: Array1_PartNumber2
Handle 0x002E, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: Unknown
Data Width: 64 bits
Size: No Module Installed
Form Factor: DIMM
Set: None
Locator: DIMM3
Bank Locator: BANK3
Type: Unknown
Type Detail: Synchronous
Speed: Unknown
Manufacturer: Manufacturer3
Serial Number: SerNum3
Asset Tag: AssetTagNum3
Part Number: Array1_PartNumber3
#
======================================================================
# cat /proc/meminfo
MemTotal: 3056820 kB
MemFree: 1470820 kB
Buffers: 390204 kB
Cached: 194660 kB
SwapCached: 0 kB
Active: 488024 kB
Inactive: 419096 kB
Active(anon): 231112 kB
Inactive(anon): 96660 kB
Active(file): 256912 kB
Inactive(file): 322436 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 8 kB
Writeback: 0 kB
AnonPages: 322320 kB
Mapped: 33012 kB
Shmem: 5472 kB
Slab: 613952 kB
SReclaimable: 597404 kB
SUnreclaim: 16548 kB
KernelStack: 2384 kB
PageTables: 19472 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1528408 kB
Committed_AS: 621464 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 294484 kB
VmallocChunk: 34359429080 kB
HardwareCorrupted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 9216 kB
DirectMap2M: 2054144 kB
DirectMap1G: 1048576 kB
#
======================================================================
# dmesg | grep -i memory
[ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM.
[ 0.000000] WARNING: at /tmp/buildd/linux-2.6-2.6.32/debian/build/source_amd64_none/arch/x86/kernel/cpu/mtrr/cleanup.c:1092 mtrr_trim_uncached_memory+0x2e6/0x311()
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] initial memory mapped : 0 - 20000000
[ 0.000000] init_memory_mapping: 0000000000000000-00000000bdf00000
[ 0.000000] PM: Registered nosave memory: 000000000009d000 - 000000000009e000
[ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000
[ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000
[ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000
[ 0.000000] PM: Registered nosave memory: 00000000bd94d000 - 00000000bd99c000
[ 0.000000] PM: Registered nosave memory: 00000000bd99c000 - 00000000bd9a6000
[ 0.000000] PM: Registered nosave memory: 00000000bd9a6000 - 00000000bdade000
[ 0.000000] PM: Registered nosave memory: 00000000bdade000 - 00000000bdaef000
[ 0.000000] PM: Registered nosave memory: 00000000bdaef000 - 00000000bdb02000
[ 0.000000] PM: Registered nosave memory: 00000000bdb02000 - 00000000bdb04000
[ 0.000000] PM: Registered nosave memory: 00000000bdb04000 - 00000000bdb0d000
[ 0.000000] PM: Registered nosave memory: 00000000bdb0d000 - 00000000bdb13000
[ 0.000000] PM: Registered nosave memory: 00000000bdb13000 - 00000000bdb75000
[ 0.000000] PM: Registered nosave memory: 00000000bdb75000 - 00000000bdd78000
[ 0.000000] Memory: 3046732k/3111936k available (3075k kernel code, 4728k absent, 60476k reserved, 1879k data, 584k init)
[ 1.636730] Freeing initrd memory: 9501k freed
[ 1.647370] Freeing unused kernel memory: 584k freed
[ 4.876602] [TTM] Zone kernel: Available graphics memory: 1528410 kiB.
[ 4.876615] [drm] radeon: 256M of VRAM memory ready
[ 4.876617] [drm] radeon: 512M of GTT memory ready.
[ 25.571018] VBoxDrv: dbg - g_abExecMemory=ffffffffa051d6c0
#
Run Code Online (Sandbox Code Playgroud)
对 e820 的 Grepping 显示了一堆范围,以e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved)
. 43f000000 是 16 GiB,bdf00000 是 3039 MiB。我不认为这是巧合。
# dmesg | grep -i e820
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009d800 (usable)
[ 0.000000] BIOS-e820: 000000000009d800 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 00000000bd94d000 (usable)
[ 0.000000] BIOS-e820: 00000000bd94d000 - 00000000bd99c000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bd99c000 - 00000000bd9a6000 (ACPI data)
[ 0.000000] BIOS-e820: 00000000bd9a6000 - 00000000bdade000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdade000 - 00000000bdaef000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdaef000 - 00000000bdb02000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb02000 - 00000000bdb04000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdb04000 - 00000000bdb0d000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb0d000 - 00000000bdb13000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdb13000 - 00000000bdb75000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb75000 - 00000000bdd78000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdd78000 - 00000000bdf00000 (usable)
[ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec10000 - 00000000fec11000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec20000 - 00000000fec21000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed61000 - 00000000fed71000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed80000 - 00000000fed90000 (reserved)
[ 0.000000] BIOS-e820: 00000000fef00000 - 0000000100000000 (reserved)
[ 0.000000] BIOS-e820: 0000000100001000 - 000000043f000000 (usable)
[ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)
[ 0.000000] e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved)
[ 0.000000] update e820 for mtrr
#
Run Code Online (Sandbox Code Playgroud)
0705 x64 08/23/2011
到1007 02/10/2012
没有帮助:完全相同的问题仍然存在。dmesg
输出显示没有类似的 MTRR 错误。此外,在该环境中,安装 3 x 8GB 后,根据free
.dmesg
现在报告总共 26198016 KB,没有 MTRR 错误,这符合我在安装 3 x 8GB 时的预期。free -m
现在报告总内存为 24114 MB,坦率地说,这对我来说已经足够了。这闻起来像一个倒塌的 DIMM,加上一个内核,无论出于什么原因都被损坏了;后者可能发生在停电期间(尽管我必须说这是内核崩溃的一种奇怪方式!)。一旦我与经销商交谈(希望明天),不工作的 DIMM 将返还给经销商。
我对两对 DIMM 中的一个进行了 RMA,经销商认为它损坏了,他们给我寄了一对新的,这似乎工作得很好。所以我现在基本上是在近一个月前我最初打算的地方(尽管那段时间的很大一部分并不是真正由于经销商造成的),有 32 GB 的 RAM 可用;free -m
报告32194 MB总内存,内核报告34586624k
初始化RAM,这两者都很好地符合我的预期。
Cor*_*ren 14
首先,如果您的 BIOS/UEFI 没有正确检测到您的 RAM,那么您的操作系统也不会做得更好。如果您的 BIOS 显示有关您的设置的错误信息,则无需再进一步。
=> 您可能至少有硬件问题。
编辑:从您的 dmesg | grep 内存,看来您实际上存在硬件问题,位于您的嵌入式 bios 中。至少,Linux 已检测到它并警告您:WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM
。您的 4 ram 模块之一似乎也被错误识别或插入。
您可以将其报告给您的制造商,升级您的 bios 并更换您的主板。使用较少的 RAM,您很有可能不会遇到此错误。
作为旁注,您可能同意Linus Torvalds 关于 BIOS 制造商的这句名言:
BIOS 编写者总是完全无能的上瘾的猴子
其次,当您的 BIOS 与您主板上的实际内容一致时,您可以在 Linux 上查看/proc/meminfo
. 通常很清楚你的 linux 系统知道什么,用你的内存做什么。这是我的 64 位/8 Gb RAM 上的内容:
$ cat /proc/meminfo
MemTotal: 8175652 kB
MemFree: 5476336 kB
Buffers: 63924 kB
Cached: 1943460 kB
SwapCached: 0 kB
[...]
Run Code Online (Sandbox Code Playgroud)
关于启动过程以及 linux 内核使用/释放的内容,您可以从dmesg
以下位置grep :
$ dmesg | grep Memory
[ 0.000000] Memory: 8157672k/8904704k available (6138k kernel code, 534168k absent, 212864k reserved, 6896k data, 988k init)
Run Code Online (Sandbox Code Playgroud)
编辑:正如吉尔斯所说,使用dmidecode --type memory
,您可以获得有关硬件配置的详细信息。对于 4x2Gb 系统,它看起来像这样:
$ sudo dmidecode --type memory
# dmidecode 2.9
SMBIOS 2.6 present.
Handle 0x0020, DMI type 16, 15 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 32 GB
Error Information Handle: Not Provided
Number Of Devices: 4
Handle 0x0022, DMI type 17, 28 bytes
Memory Device
Array Handle: 0x0020
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 2048 MB
[...]
[This block is repeated for each module]
Run Code Online (Sandbox Code Playgroud)
在 /var/log/dmesg 中搜索内存映射(grep for 'e820')并计算有多少内存报告为可用。这就是 BIOS 告诉加载的操作系统内存的内容。
(这仅适用于旧式启动。我不知道如果使用 EFI 式启动时内存是如何报告的,但我想有类似的报告。)
此外,BIOS 报告 16GB 而安装了 32GB 意味着内存设置有些奇怪。尝试将安装的内存减少到 4 或 8 GB 并比较效果。
归档时间: |
|
查看次数: |
18787 次 |
最近记录: |