Назад | Перейти на главную страницу

Linux SMP Kernel Ram Использование

У меня есть Linux-машина с установленным 32-битным SMP-ядром Redhat, размер оперативной памяти машины составляет 16 ГБ, а архитектура процессора - 64-битная. Пожалуйста, проясните мои сомнения по поводу этой настройки:

  1. Может ли ОС полностью использовать 16 ГБ памяти? (я слышал, что в ОС Windows, если мы используем 32-разрядную версию, максимальная емкость оперативной памяти составляет менее 4 ГБ)
  2. В чем особенности SMP-ядра по сравнению с обычным

Ниже приведены подробности установки redhat.

[user@applicaton ~]$ uname -a
Linux applicaton 2.6.18-164.el5PAE #1 SMP Tue Aug 18 15:59:11 EDT 2009 i686 i686 i386 GNU/Linux
[user@applicaton ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
[user@applicaton ~]$ lsb_release
LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
[user@applicaton ~]$

Можем ли мы использовать SMP вместе с PAE в Linux?

Поскольку здесь много путаницы, позвольте мне сообщить вам реальные факты.

32-разрядный процесс в основном ограничен 4 ГБ виртуальной памяти, поскольку 32-разрядный процесс использует 32-разрядные указатели в своем пространстве виртуальной памяти. Некоторые 32-разрядные операционные системы уменьшают этот предел до 2 ГБ или 3 ГБ, поскольку они используют часть этого пространства для памяти ядра.

32-разрядная операционная система обычно ограничивается 4 ГБ физической памяти, поскольку ОС использует 32-разрядные указатели в ОЗУ. PAE позволяет операционной системе использовать указатели большего размера и, таким образом, адресовать более 4 ГБ физический ОЗУ. Это не влияет на ограничение виртуальной памяти.

Однако 32-битные процессы, запущенные в 64-битных операционных системах, могут использовать всю физическую оперативную память в системе. Они просто не могут использовать более 4 ГБ в виде отображений виртуальной памяти за раз. Но это далеко не единственный способ использования памяти процессами. (ТРЕПЕТ это в одну сторону. Части отображения памяти файла на RAM-диске - другое. Есть еще много чего.)

Обратите внимание, что даже если у вас меньше 4 ГБ ОЗУ, в 64-разрядной ОС процессы могут использовать более 4 ГБ виртуальной памяти. (Например, они могут отображать в памяти огромные файлы или использовать гигантские разреженные массивы.)

В физический и виртуальный пределы памяти часто путают. Они ограничивают совершенно разные вещи и почти не связаны друг с другом. Физическая память (RAM) - это совсем не то же самое, что виртуальная память (адресное пространство).

Как правило, в 32-битной системе вы не можете адресовать более 4 Гб оперативной памяти. Это связано с тем, что ячейки памяти представлены как 32-битные двоичные числа (максимум 4294967296 бит). Одним из способов решения этой проблемы является использование PAE ядро, но это взлом, поскольку он увеличивает адресацию до 36 бит и выполняет дополнительное отображение в таблицах страниц. Он расширяет (в linux после версии 2.3.23 с поддержкой процессора) диапазон адресов физической памяти до 64 ГБ, но обычные процессы будут продолжать использовать 32-разрядное адресное пространство и по-прежнему будут ограничены виртуальной памятью 4 ГБ. Приложения, которым требуется более 4 Гб памяти, ОС может предлагать специальные механизмы помимо PAE, например ТРЕПЕТ в Windows.

Лучшее решение - перейти на 64-битный дистрибутив, одного ядра недостаточно, чтобы быть 64-битным, так как некоторые библиотеки и модули могут быть только 32-битными или 64-битными, и переключение обычно беспорядочно.

Ядро SMP означает, что Симметричная мультиобработка расширения, это позволяет ядру запускать несколько параллельных процессов. Если у вас многоядерный процессор, это необходимо, чтобы иметь возможность использовать более одного ядра одновременно.

32-битные ядра могут использовать PAE (http://en.wikipedia.org/wiki/Physical_Address_Extension), чтобы получить доступ к более чем 4 ГБ оперативной памяти, но есть одна загвоздка: один процесс по-прежнему ограничен 4 ГБ памяти, поэтому, если вам нужно, чтобы приложения использовали больше этого (например, серверы приложений, такие как tomcat), ваш единственный вариант - использовать 64-битные ядра.