Почему Ubuntu не обнаруживает всю мою оперативную память на 64-битной?
Возможный дубликат:
Ubuntu обнаруживает только 3,1 ГБ оперативной памяти в Ubuntu 64 бит
ПРОБЛЕМА, ВЫЯВЛЕННАЯ: ошибка BIOS. Смотрите вывод dmesg ниже.
Вопрос: как решить эту проблему? Изменения, внесенные после 2.6.32, ввели это. Есть ли патч Canonical или разработчики ядра могут это исправить? К кому я обращаюсь?
Спасибо всем!
ОРИГИНАЛЬНЫЙ ВОПРОС:
Я думаю, что есть проблема с 64-битным ядром 2.6.35, которое поставляется с Ubuntu 10.10. У меня Gigabtye GA-970A-UD3 с процессором AMD FX-8120, 16 ГБ DDR3-1333, nVidia GTX550Ti и OCZ Agility 3 120 ГБ SSD.
Я установил Ubuntu 10.10, чтобы получить поддержку SSD TRIM с ядром 2.6.35. Однако после успешной установки ОС System Monitor сообщает только о 3,2 ГБ. Он видит 8 ядер FX-8120 и uname -a
сообщает x86_64. Более того, dmidecode
показывает четыре банка памяти, которые заполняются. Подозревая память, я поменял 16 ГБ на 8 ГБ от другого производителя, но проблема все еще существует. 10.10 с ядром 2.6.35 не увидит более 4 ГБ на 64-битной.
У меня установлена 64-битная версия 10.04 LTS на i7-960 с 24 ГБ ОЗУ, и он видит все 24 ГБ. Когда я загружаю 64-битную версию 10.04 LTS на машине FX-8120, она видит все 16 ГБ и 8 ядер.
Очевидно, что что-то изменилось между 2.6.32 и 2.6.35, чтобы повлиять на поддержку памяти.
Я после поддержки TRIM 2.6.35, но не за счет потери 75% моей оперативной памяти. Я ищу некоторые рекомендации или предложения. Требуется ли новый флаг ядра или мне нужно получить пользовательскую сборку 2.6.33 и более поздних версий для одновременного решения проблемы поддержки TRIM и памяти.
Любая помощь приветствуется!
ОБНОВЛЕНИЕ: Версия 10.04 LTS установлена в соответствии со стандартом ISO, который предоставляется сайтом загрузки Ubuntu для 64-разрядной версии 10.04. Я установил "Download Updates" во время установки, поэтому все, что 10.04 LTS в настоящее время делает для чистой установки с этим ISO, это то, что я использую. Я могу предоставить выходные данные для любых запрашиваемых команд, чтобы определить точные сборки / ревизии, на которых работает эта машина. Я также собираюсь протестировать загрузку 10.10 на моем i7-960, чтобы увидеть, сообщает ли он 4 ГБ против 24 ГБ. Это исключило бы поддержку набора микросхем как потенциальную проблему, поскольку это перешло бы архитектурные границы и указало бы проблему ядра.
ОБНОВЛЕНИЕ 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. Ядро 2.6.32, которое поставляется с 10.04, корректно работает с аппаратным обеспечением, чтобы увидеть всю доступную память.
Я начал со сборки 10.04 LTS, которая видит 16 ГБ ОЗУ. Затем я обновил ядро до 2.6.33 через kernel.ubuntu.com, и память упала до 3,2 ГБ. выходные отчеты 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 распознает его правильно с соответствующим количеством ядер. BIOS Gigabyte GA-970A-UD3 не имеет возможности выполнять перераспределение памяти, поэтому он, вероятно, делает это по умолчанию.
Загрузка Ubuntu 11 на ядре 3.0 приводит к зависанию машины при обнаружении оборудования. Я еще не пробовал альфа-релиз 12.04.
Логическое решение, позволяющее ядрам 2.6 работать на оборудовании с ошибками, например, на моей материнской плате, состоит в исправлении архива /x86/kernel/cpu/mtrr/cleanup.c в более поздних ядрах, чтобы использовать более старый код 2.6.32, который не выполняет проверку MTRR., Исследования показывают, что MTRR являются устаревшими компонентами через BIOS и могут быть безопасно отключены.
Это также позволит пользователям более нового оборудования запускать старые системы на основе Linux 2.6 с более поздними драйверами и правильно поддерживать твердотельные накопители.
Мой следующий шаг - найти исходники ядра 2.6.33, которое я использую вместе с 2.6.32, и посмотреть, как работает патч, чтобы увидеть, что происходит. Обратите внимание, что я не являюсь разработчиком ядра, и мой C ржавый, но я могу работать достаточно хорошо, чтобы попробовать. Если это сработает, я постараюсь опубликовать патч для разработчиков ядра.