[Hardware] kernel-image-std-pae & i965 & 4Gb

Sergey Vlasov vsu на altlinux.ru
Пн Фев 18 16:01:08 MSK 2008


On Mon, Feb 18, 2008 at 03:10:46PM +0300, Maks Re wrote:
> а вот и логи

Доступные для ядра области памяти (по данным BIOS):

 BIOS-e820: 0000000000000000 - 000000000008f000 (usable)
 BIOS-e820: 0000000000100000 - 00000000cf584000 (usable)
 BIOS-e820: 00000000cf591000 - 00000000cf625000 (usable)
 BIOS-e820: 00000000cf6df000 - 00000000cf6f0000 (usable)
 BIOS-e820: 00000000cf6ff000 - 00000000cf700000 (usable)
 BIOS-e820: 0000000100000000 - 000000012c000000 (usable)

Теперь разберём настройки MTRR:

 reg00: base=0x00000000 (   0MB), size=2048MB: write-back, count=1
 reg01: base=0x80000000 (2048MB), size=1024MB: write-back, count=1
 reg02: base=0xc0000000 (3072MB), size= 256MB: write-back, count=1

Эти регистры покрывают область адресов от 0x00000000 до 0xd0000000;
все обычные области памяти ниже 4G, заявленные в BIOS-e820, входят в
этот диапазон, так что тут всё нормально.

 reg03: base=0xcf800000 (3320MB), size=   8MB: uncachable, count=1
 reg04: base=0xcf700000 (3319MB), size=   1MB: uncachable, count=1

Этими регистрами помечается как некешируемая область адресов от
0xcf700000 до 0xd0000000 - эта область не перекрывается ни с одной из
областей BIOS-e820, помеченных как usable, что тоже правильно.

 reg05: base=0x100000000 (4096MB), size= 512MB: write-back, count=1
 reg06: base=0x120000000 (4608MB), size= 128MB: write-back, count=1

Эти регистры устанавливают тип write-back для области адресов от
0x100000000 до 0x128000000.  Однако в BIOS-e820 сообщается, что
доступная память находится по адресам от 0x100000000 до 0x12c000000,
следовательно, имеется область памяти (0x128000000 - 0x12c000000,
64MB), которая не покрывается ни одним из регистров MTRR.  В
результате эта память не кешируется, что приводит к громадному
замедлению работы при её использовании.

Подобная ошибка в BIOS многих материнских плат от Intel давно
известна; например, вот одно из обсуждений:

 http://www.fedoraforum.org/forum/showthread.php?t=157232&page=4

Ошибка проявляется при установке >= 4GB RAM, причём только при условии
использования ядра, которое может адресовать память за пределами
первых 4 GB адресного пространства (именно поэтому 32-разрядное
std-smp работает с нормальной скоростью - это ядро просто не может
использовать память за пределами первых 4 GB, поэтому не использует
проблемную область; а вот на x86_64 эта проблема бы проявилась и в
std-smp).

Простейший способ обойти данную проблему - ограничить используемую
ядром память, отключив проблемные 64 MB; для этого можно использовать
параметр ядра mem=4736M (0x128000000/1024/1024, или 4608+128 по данным
последнего используемого регистра MTRR).  Возможен также вариант с
добавлением настроек MTRR при загрузке, но это сложнее, и на первых
стадиях загрузки всё равно будет наблюдаться замедление.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://lists.altlinux.org/pipermail/hardware/attachments/20080218/943d22e5/attachment.bin 


Подробная информация о списке рассылки Hardware