Мои проблемы были вызваны неисправным модулем памяти.и вполне возможно, что это сломанный двоичный файл ядра.
Я только что загрузил свой ПК с практически новым оборудованием. До этого я использовал Debian 6.0 AMD64, и никаких изменений (буквально; я просто отключил жесткие диски от старой материнской платы и подключил их к новой), но обнаружил кое-что любопытное:
- Я физически установил 4 x 8 ГБ оперативной памяти.
- Настройка UEFI/BIOS сообщает о 16383 МБ ОЗУ
- Linux
free -m
сообщает о 2985 МБ ОЗУ
2985 МБ кажутся слишком близкими к магической отметке в 3 ГБ, чтобы быть простым совпадением, но uname -r
печатает 2.6.32-5-amd64
; явно 64-битное ядро, которое было установлено только на системном диске, который я использую. Новая материнская плата — Asus M5A97 Pro, которая имеет четыре слота DDR3, предположительно поддерживающие модули по 8 ГБ. Сами модули памяти идентичны, четыре Corsair XMS3 PC12800 8 ГБ, куплены вместе.
Я не изучал настройки UEFI подробно, но просмотрел их и не увидел ничего, что могло бы потребовать изменений для включения больших объемов оперативной памяти.
Редактировать:Еще одно подтверждение того, что я действительно использую 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
#
Что с этим происходит и что я могу с этим сделать?
Редактировать 2:dmesg, dmidecode и meminfo, как и просили. У меня сейчас нет физического доступа к системе, поэтому придется подождать до вечера, чтобы вытащить несколько модулей и посмотреть, что это даст. (Обратите внимание, что dmidecode сообщает о 3 x 8 ГБ и одном пустом слоте DIMM. Также обратите внимание на сообщение о несоответствии MTRR от ядра, что приводит к потере 13 ГБ, что, по крайней мере, совпадает с тем, что сообщает сама материнская плата.)
# 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
#
Grepping для e820 показывает кучу диапазонов, заканчивающихся на 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
#
EDIT 3/4 -- частичный успех:
- Обновление UEFI BIOS с версии
0705 x64 08/23/2011
на1007 02/10/2012
не помогло: осталась та же проблема. - Извлечение одного модуля DIMM (я удачно угадал, какой слот был № 4: тот, что был дальше всего от ЦП) позволило BIOS обнаружить и использовать оставшиеся 24 ГБ, хотя конфигурация из трех DIMM не «рекомендуется» согласно схеме в руководстве пользователя. Примечательно, что установка одного из оставшихся модулей DIMM в слот № 4 все еще позволяла его использовать, так что слот в порядке. Повторная установка «исходного» модуля DIMM в этот слот вернула меня к исходной точке.
- Загрузка с установочного компакт-диска Debian 6.0.3 AMD64 в среду восстановления и проверка ее
dmesg
вывода показываетнет похожих ошибок MTRR. Кроме того, в этой среде, при установке 3 x 8 ГБ, 24 ГБ (плюс-минус эпсилон, умноженный на пи, или около того; я не делал точных подсчетов) отображаются как пригодные для использования согласноfree
. - Обновление/переустановка ядра (было доступно небольшое обновление), похоже, также исправило проблемы MTRR.
dmesg
Теперь отображается общий объем 26198016 КБ, и нет ошибок MTRR, что соответствует моим ожиданиям при установке 3 x 8 ГБ.free -m
Теперь отображается общий объем ОЗУ 24114 МБ, что, честно говоря, близко к моему уровню.
Это похоже на забитый DIMM, плюс ядро, которое по какой-то причине было повреждено; последнееможетпроизошло во время отключения электроэнергии (хотя должен сказать, что это странный способ для ядра сломаться!). Неработающий DIMM отправится обратно к продавцу, как только я с ними поговорю (надеюсь, завтра).
(надеюсь) ОКОНЧАТЕЛЬНАЯ РЕДАКТАЦИЯ
Я сделал возврат одной из двух пар DIMM, реселлер принял ее как поврежденную, и они отправили мне новую пару, которая, похоже, работает просто отлично. Так что теперь я в основном там, где изначально и планировал почти месяц назад (хотя большая часть того времени на самом деле не была связана с реселлером), с 32 ГБ ОЗУ, пригодными для использования; free -m
сообщается о 32194 МБ общей памяти, а ядро сообщает об 34586624k
ОЗУ при инициализации, и оба эти показателя вполне соответствуют моим ожиданиям.
решение1
Во-первых, если ваш BIOS/UEFI не определяет правильно вашу RAM, то ваша ОС не будет работать лучше. Нет нужды идти дальше, если ваш BIOS отображает неверную информацию о вашей настройке.
=> У вас, вероятно, естьпо меньшей мерепроблема с оборудованием.
РЕДАКТИРОВАТЬ: Из памяти dmesg | grep следует, что у вас естьфактическиаппаратная проблема, локализованная в вашем встроенном BIOS. По крайней мере, Linux обнаружил ее и предупреждает вас об этом: WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM
. Также, похоже, что один из ваших 4 модулей оперативной памяти неправильно распознан или вставлен.
Вы можете либо сообщить об этом производителю, обновить BIOS и сменить материнскую плату. Есть много шансов, что с меньшим объемом оперативной памяти вы не столкнетесь с этой ошибкой.
Кстати, вы можете согласиться с этой известной цитатойЛинус Торвальдс о создателях BIOS:
Авторы BIOS неизменно оказываются совершенно некомпетентными обезьянами, помешанными на крэке.
Во-вторых, когда ваш BIOS в порядке с тем, что у вас на материнской плате, вы можете взглянуть на Linux на /proc/meminfo
. Часто очень ясно, что ваша система Linux знает и делает с вашей памятью. Вот что у меня на моем 64bit / 8 Gb RAM :
$ cat /proc/meminfo
MemTotal: 8175652 kB
MemFree: 5476336 kB
Buffers: 63924 kB
Cached: 1943460 kB
SwapCached: 0 kB
[...]
Информацию о процессе загрузки и о том, что используется/освобождается ядром Linux, можно получить с помощью grep dmesg
:
$ dmesg | grep Memory
[ 0.000000] Memory: 8157672k/8904704k available (6138k kernel code, 534168k absent, 212864k reserved, 6896k data, 988k init)
РЕДАКТИРОВАТЬ: Как сказал Жиль, с помощью 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]
решение2
Найдите /var/log/dmesg для карты памяти (grep для 'e820') и посчитайте, сколько памяти там указано как используемой. Это то, что BIOS сообщает загруженной ОС о памяти.
(Это верно только для загрузки в старом стиле. Я не знаю, как сообщается память, если используется загрузка в стиле EFI, но предполагаю, что есть похожий отчет.)
Кроме того, сообщение BIOS о 16 ГБ, когда установлено 32 ГБ, означает некоторую странность в настройке памяти. Попробуйте уменьшить установленную память до 4 или 8 ГБ и сравните результаты.
решение3
Многие старые платы AMD могут иметь 4 слота, но если вы заполните последний слот, вы напрашиваетесь на неприятности. Это проблема чипсета, которая не может быть исправлена.