64-битный Linux не распознает мою оперативную память от 3 до 32 ГБ

8

Мои проблемы были вызваны неисправным модулем памяти и, возможно, поломанным двоичным файлом ядра.


Я только что загрузил свой компьютер с принципиально новым оборудованием. Я использовал Debian 6.0 AMD64 и раньше, и никаких изменений там нет (буквально; я просто отключил жесткие диски от старой материнской платы и снова подключил их к новой), но нашел кое-что любопытное:

  • Я физически установил 4 х 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 ГиБ, bdf00000 - 3039 МБ. Я не вижу, что это случайно.

# 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
# 

РЕДАКТИРОВАТЬ 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 вернется к реселлеру, как только я поговорю с ними (надеюсь, завтра).

(надеюсь) ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ

Я RMA сделал одну из двух пар модулей памяти DIMM, реселлер признал ее поврежденной, и они прислали мне новую пару, которая, кажется, работает отлично. Таким образом, я сейчас в основном там, где планировал почти месяц назад (хотя большая часть этого времени была не из-за посредника), с использованием 32 ГБ ОЗУ; free -mсообщает об общем объеме памяти 32194 МБ, а ядро ​​сообщает об 34586624kОЗУ при инициализации, что соответствует моим ожиданиям.

CVn
источник
2
Из вашего первого заявления звучит так, будто вы переместили жесткие диски с установленной ОС на новую системную плату? Действительно хорошим тестом было бы загрузить живой дистрибутив и загрузить его. Slax, DSL, Ubuntu или что угодно. Если это распознает правильный объем ОЗУ, вы, вероятно, столкнетесь с проблемами HAL / udev. На этом этапе вы сэкономите гораздо больше времени на резервном копировании и переустановке, чем пытаясь это исправить. Если вы не выродок, как я, и вы не хотите тратить на это часы или дни:}
2bc
2
Пожалуйста, опубликуйте выходные данные dmidecode --type memoryи первые сто строк или около того вывода dmesg(убедитесь, что вы включили все, что похоже на память).
Жиль "ТАК ... перестать быть злым"
1
WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM.Ну, там твой пропавший 13G.
Мат
1
@ Мат, не другой пропавший 16G, как бы то ни было. Те, вероятно, займет немного больше осматриваться.
CVn
1
Мне было бы интересно узнать, что скажет начальная загрузка Debian (/ ubuntu, поскольку это следующая ближайшая вещь), поскольку ее можно использовать для простого различения проблем с вашим оборудованием и проблем с вашей конфигурацией.
dtech

Ответы:

14

Во-первых, если ваш BIOS / UEFI неправильно определяет вашу RAM, то ваша ОС не будет работать лучше. Нет необходимости идти дальше, если ваш BIOS отображает неверную информацию о вашей настройке.

=> Вы, вероятно, по крайней мере, проблема с оборудованием.

РЕДАКТИРОВАТЬ : Из вашего dmesg | grep memory, похоже, что у вас на самом деле аппаратная проблема, находящаяся во встроенном 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 знает и делает с вашей памятью. Вот что у меня на моей 64-битной / 8 Гб оперативной памяти:

$ cat /proc/meminfo 
MemTotal:        8175652 kB
MemFree:         5476336 kB
Buffers:           63924 kB
Cached:          1943460 kB
SwapCached:            0 kB
[...]

О процессе загрузки и о том, что используется / освобождается ядром Linux, вы можете получить его из 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]
Корен
источник
5

Найдите / var / log / dmesg для карты памяти (grep для 'e820') и посчитайте, сколько памяти там указано как пригодное для использования. Это то, что BIOS сообщает загруженной ОС для памяти.

(Это верно только для загрузки в старом стиле. Я не знаю, как сообщается память, если используется загрузка в стиле EFI, но я думаю, что есть похожий отчет.)

Кроме того, сообщение BIOS о 16 ГБ при установленном 32 ГБ означает некоторую странность в настройке памяти. Попробуйте уменьшить установленную память до 4 или 8 ГБ и сравните эффекты.

Netch
источник
Смотрите мое редактирование для данных e820. Физическое удаление модулей памяти, чтобы увидеть, что это будет делать, придется ждать до вечера. Единственные модули DDR3 у меня 8 ГБ каждый.
CVn
Ну, кажется, этого достаточно - у вас и аппаратное, и программное обеспечение работает правильно. Последнее действие - установить правильный модуль памяти, чтобы заполнить его и заставить работать двухканальный. Поздравляю.
Нетч
0

Многие старые платы AMD могут иметь 4 слота, но если вы заполняете последний слот, вы напрашиваетесь на неприятности. Это проблема с чипсетом, которая не может быть исправлена.

стог
источник
Я бы точно не рассматривал Asus M5A97 Pro как «более старую» материнскую плату (я не знаю точную дату ее производства, но она основана на чипсете AMD 970, и Википедия выпускает серию 900 к дате выпуска в июне 2011 года, меньше чем за год до этого вопрос был актуален в марте 2012 года). А запуск с установочного носителя показал совершенно иную картину реальности с точки зрения ОС. И в конечном итоге проблемы были решены путем замены неисправного модуля памяти на работающий и переустановки ядра (как сказано в самом начале вопроса).
CVn