LINUX.ORG.RU

4Gb RAM на x86_64


0

0

Доброго локалтайма.

Имеется конфигурация (ноут Samsung R510)
$ uname -a
Linux 2.6.28-11-generic #35-Ubuntu SMP Wed Mar 18 21:55:34 UTC 2009 x86_64 GNU/Linux

(FWIW -server вариант ядра ничего не меняет)

$ sudo dmidecode -t memory
# dmidecode 2.9
SMBIOS 2.5 present.

Handle 0x000E, DMI type 16, 15 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 4 GB
Error Information Handle: Not Provided
Number Of Devices: 2

Установлено 2 планки по 2Gb, memtest и BIOS видят все честно.

$ free -m
total used free shared buffers cached
Mem: 2979 682 2296 0 46 298
-/+ buffers/cache: 337 2641
Swap: 0 0 0

В dmesg
Memory: 3041508k/3143060k available (4763k kernel code, 2908k absent, 98008k reserved, 2541k data, 536k init)

Как можно заставить ядро видеть всю память?

★★★★

странно, он вроде на чипе PM45...

у меня такая же проблема, только на 945 чипе. мать - микростар. производитель заявил поддержку 4гига. В биосе 4 гига, проверка памяти - 4 гига, только в сводной табличке БИОС уже 3.2г. И соотвественно в системе x86_64 тоже 3.2 гига. У меня это объясняется ограничением чипсета, он видите ли на 800м выделяет памяти под системные устройства.

sicus
()
Ответ на: комментарий от kostian

была идея про ограничения железа, но смущает тот факт, что, повторюсь, и BIOS и memtest видят все 4 Гб. С другой стороны производитель постеснялся поставить на бук x86_64 Висту, возможно для этого была причина.


> У меня это объясняется ограничением чипсета, он видите ли на 800м выделяет памяти под системные устройства. 

Похоже на то. В /proc/iomem

....
c0000000-c00000ff : 0000:00:1f.3
cc000000-ceffffff : PCI Bus 0000:01                               
  cc000000-cdffffff : 0000:01:00.0                                 
    cd000000-cddfffff : vesafb                                 
  ce000000-ceffffff : 0000:01:00.0                               
    ce000000-ceffffff : nvidia                                     
d0000000-dfffffff : PCI Bus 0000:01                               
  d0000000-dfffffff : 0000:01:00.0                                  
e0000000-efffffff : PCI MMCONFIG 0                            
  e0000000-efffffff : pnp 00:0a                                    
f0000000-f0ffffff : PCI Bus 0000:02                              
f1000000-f1ffffff : PCI Bus 0000:04                            
f2000000-f2ffffff : PCI Bus 0000:06                             
  f2000000-f201ffff : 0000:06:00.0
f3000000-f3ffffff : PCI Bus 0000:02
  f3000000-f3001fff : 0000:02:00.0
    f3000000-f3001fff : iwlagn
f4000000-f4ffffff : PCI Bus 0000:04


неужели это не лечится?

phoenix ★★★★
() автор топика
Ответ на: комментарий от sda00

> хохмы ради поставь ядро от SUSE (с ним даже гента работает норм) и посмотри:

те же яйца, 3143060k available

phoenix ★★★★
() автор топика
Ответ на: комментарий от JB

там как бы дискретная nvidia со своей отдельной памятью, по крайней мере если верить спекам. Опять-таки, в iomap видюха замаплена в пространство четвертого гигабайта.

phoenix ★★★★
() автор топика
Ответ на: комментарий от phoenix

>неужели это не лечится?

лечится. смотрите в ядре. там есть что-то типа "разнести память в случае, если на конец 4-го гига мапятся устройства"

scaldov ★★
()

У меня, кстати, на десктопе такая картина. Даже веселее.

Грузишься из 64-х битной Linux (Ubuntu или Sabayon) - видно только 3Гб. Грузишься из 32-х битной (любой) - видно 3,3Гб :)

KRoN73 ★★★★★
()
Ответ на: комментарий от prof-alex

зато есть принципиальная разница между 32-bit version of Windows (or Linux, or whatever) и x86_64, с которой я борюсь.

phoenix ★★★★
() автор топика
Ответ на: комментарий от phoenix

> зато есть принципиальная разница между 32-bit version of Windows (or Linux, or whatever) и x86_64, с которой я борюсь.

В ссылке без картинок есть очень интересный участок - "Временное решение", а там есть такой момент:

> В системе BIOS должна поддерживаться функция перераспределения памяти. С помощью возможности перераспределения памяти можно перенести сегмент системной памяти, ранее занимаемый конфигурационным пространством шины PCI (Peripheral Component Interconnect), за пределы адресного пространства 4 ГБ. Эта функция должна быть включена в настройках BIOS компьютера. Сведения о включении этой функции см. в документации к компьютеру. Многие компьютеры, предназначенные для рядовых пользователей, не поддерживают функцию перераспределения памяти. Для этой функции не существует стандартного термина для использования в документации или программе настройки BIOS. Следовательно, необходимо изучить все доступные параметры BIOS, чтобы выяснить, какие из них позволяют включить функцию перераспределения памяти.

prof-alex
()
Ответ на: комментарий от phoenix

Нашел только это: CONFIG_RESOURCES_64BIT: 64 bit Memory and IO resources (EXPERIMENTAL)

и оно включено, также как и все опции, содержащие IOMMU и имени.

phoenix ★★★★
() автор топика
Ответ на: комментарий от prof-alex

Спасибо за наводку. К сожалению ничего похожего не нашел, что не удивительно, учитывая обрезанность настроек BIOSа в ноутах.

phoenix ★★★★
() автор топика
Ответ на: комментарий от phoenix

> К сожалению ничего похожего не нашел, что не удивительно, учитывая обрезанность настроек BIOSа в ноутах

Ага, ну теперь, когда причина "обрезанности" определена нужно покопать в сторону IOMMU, т.к. линукс, частенько, на BIOS "забивает болт". Тут в документации к ядру есть один файлик Documentation/x86/x86_64/boot-options.txt и там:

IOMMU (input/output memory management unit)

Currently four x86-64 PCI-DMA mapping implementations exist:

1. <arch/x86_64/kernel/pci-nommu.c>: use no hardware/software IOMMU at all (e.g. because you have < 3 GB memory). Kernel boot message: "PCI-DMA: Disabling IOMMU"

2. <arch/x86_64/kernel/pci-gart.c>: AMD GART based hardware IOMMU. Kernel boot message: "PCI-DMA: using GART IOMMU"

3. <arch/x86_64/kernel/pci-swiotlb.c> : Software IOMMU implementation. Used e.g. if there is no hardware IOMMU in the system and it is need because you have >3GB memory or told the kernel to us it (iommu=soft)) Kernel boot message: "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)"

4. <arch/x86_64/pci-calgary.c> : IBM Calgary hardware IOMMU. Used in IBM pSeries and xSeries servers. This hardware IOMMU supports DMA address mapping with memory protection, etc. Kernel boot message: "PCI-DMA: Using Calgary IOMMU"

iommu=[<size>][,noagp][,off][,force][,noforce][,leak[=<nr_of_leak_pages>] [,memaper[=<order>]][,merge][,forcesac][,fullflush][,nomerge] [,noaperture][,calgary]

prof-alex
()
Ответ на: комментарий от prof-alex

если я правильно понимаю, то мне нужен iommu=soft (C2D P7350, чип GM45+ICH9). Пока что глухо, в dmesg про IOMMU ни слова, SWIOTLB=y

phoenix ★★★★
() автор топика
Ответ на: комментарий от phoenix

не получится у тебя заставить системы х64 видеть больше чем ей отдает биос. А биос мапит для устройств столько сколько ему нужно. В каких то случаях 800м в каких то больше.
А в биосе показывается полный объем и это понятно, потому что сам биос работает именно с таким кол-вом памяти.
В некоторых случаях помогает ремапинг (пункт в биос) только я его еще ни на одной обрезаной мамке не встречал, только в доках в интернете пишут про него :)

sicus
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.