Kernel/PAE: различия между версиями

Материал из ALT Linux Wiki
м (Отмена правки 32557 участника 94.29.124.39 (обсуждение) (это всё-таки документирование узких костылей))
м (Vt переименовал страницу Kernels/PAE в Kernel/PAE)
(нет различий)

Версия от 23:36, 26 октября 2022

PAE (Intel Physical Address Extension)

Что такое PAE и почему им не следует пользоваться?

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

В ALT Linux 4.0+ поддержка PAE включена в некоторых 32-битных (i586) ядрах; на весну 2008 основное из них — std-pae.

Мнения специалистов

Repeat after me: virtual space needs to be bigger than
physical space. Not "as big". Not "smaller". It needs to
be bigger, by a factor of at least two, and that's
quite frankly pushing it, and you're much better off
having a factor of ten or more.
[...]
So you could allocate user pages in it, but you had huge
problems with things like internal kernel data structures,
which can be the bulk of your memory needs under some
(not that unusual) loads. Directory caches, inodes, etc
couldn't use it, and in general it meant that under Linux,
if you had more than 4GB of physical memory, you generally
ran into problems (since only 25% of memory was availble
for normal kernel stuff - the rest had to be addressed
through small holes in the tiny virtual address space).
[...]
So no, PAE does not mean that you can use more than
4GB of RAM. Even before PAE, the practical limit was around
1GB, and PAE didn't move that post a fraction of an inch!

Linus

Ядра std-smp и std-pae отличаются только одной опцией конфигурации: 
в std-smp используется HIGHMEM4G, а в std-pae - HIGHMEM64G.  (Дифф между
конфигами больше одной строки, поскольку там показываются и зависимые
опции, которые устанавливаются автоматически.)

Необходимость сборки двух вариантов ядра для i586 вызвана тем, 
что ядро, собранное с HIGHMEM4G, не может использовать более 4GB RAM, 
зато работает на всех процессорах >= i586, в то время как ядро, собранное 
с HIGHMEM64G, может использовать до 64GB RAM, но не работает 
на процессорах, не поддерживающих режим PAE (поддержка PAE появилась
начиная с Pentium Pro, кроме того, первые варианты Pentium M также 
не поддерживают PAE).  На самом деле пакеты ядер std-pae должны были
бы иметь архитектуру i686, а не i586, но я не знаю, есть ли способ
заставить incoming пересобирать пакеты именно таким образом.

Для архитектуры x86_64 всё это неактуально, поэтому вариант std-pae
существует только на i586.

vsu@

Вообще ядро std-pae действительно нужно использовать только при
наличии как минимум 4G RAM; в остальных случаях устанавливать его
обычно не имеет смысла (разве что очень хочется использовать в
32-разрядном ядре имеющуюся в процессоре поддержку NX (запрет
исполнения кода на уровне страниц) - эта возможность поддерживается
только при использовании PAE).

К сожалению, именно на этом ядре swsusp работать не может - реализация
swsusp в 2.6.18 на i386 несовместима с PAE.  Для использования swsusp
придётся установить вариант ядра std-smp (релизы std-smp и std-pae с
одинаковыми номерами отличаются только конфигурацией - в std-pae
включена опция HIGHMEM64G, в std-smp - HIGHMEM4G).

vsu@

Ссылки