В настоящее время мы оцениваем возможность добавления переключателя / 3gb на некоторые из наших серверов, чтобы увеличить доступную память для одного из запущенных процессов (который скомпилирован с установленным флагом IMAGEFILELARGEADDRESSAWARE), который превышает ограничение в 2 ГБ.
Однако я пытаюсь понять, как память распределяется между ядром и пользовательскими процессами на сервере с ОЗУ> 4 ГБ. Согласно документу, Windows разделит память 2 ГБ / 2 ГБ между ядром и пользовательскими процессами в системе 4 ГБ. Когда вы включаете / 3gb на сервере, память делится 1gb / 3gb.
Я хочу знать, как распределяется память на сервере с 6 ГБ ОЗУ и включенным PAE? Ядро все еще ограничено до 1 ГБ?
Ура Сэм
Я подумал, что опубликую продолжение для других, чтобы попытаться объединить информацию в один пост (на основе того, что я узнал, и другой информации, уже опубликованной).
PAE:
PAE позволит 32-битному серверу Windows использовать или более 4 ГБ ОЗУ, причем максимум будет зависеть от версии Windows, которую вы используете (в Википедии есть хорошая ссылка Вот)
Следует отметить, что если у вас включено предотвращение выполнения данных (DEP) или NoExecution (NX), тогда это будет эффективно включать PAE без необходимости явно включать его в boot.ini.
Итог, PAE не влияет на объем памяти один 32-битный процесс может получить доступ. Это влияет только на общий объем памяти, который окна могут «видеть» и использовать (так что вы можете иметь 2 процесса, каждый из которых использует 2 ГБ, а Windows использует 2 ГБ в системе с 6 ГБ)
3 ГБ:
Во-первых, когда я говорю о памяти, доступной одному 32-битному процессу, я имею в виду процессы виртуальное адресное пространство. Для 32-битного процесса в 32-битной ОС Windows это ограничено 4 ГБ.
В системе без переключатель / 3GB, 4 ГБ виртуального адресного пространства делятся 2 ГБ / 2 ГБ между запущенным процессом и ядром Windows.
Когда вы включаете переключатель 3 ГБ, разделение виртуального адресного пространства изменяется на 3 ГБ / 1 ГБ. Это позволяет процессу использовать больше памяти за счет памяти ядра. Обратите внимание: Windows разрешит процессу использовать больше 2 ГБ памяти, только если исполняемый файл был скомпилирован с установленным флагом IMAGEFILELARGEADDRESSAWARE.
Теперь, как уже упоминалось в других сообщениях, штраф за использование переключателя 3GB заключается в том, что у ядра меньше памяти для работы. И одна из главных жертв уменьшенного объема памяти - количество доступных записей таблицы страниц (PTE). Таблица страниц - это структура данных, используемая диспетчером виртуальной памяти Windows для хранения сопоставления виртуальных адресов и физических адресов в памяти. Если у вас недостаточно свободных PTE, окна могут не выделить память процессу по запросу, даже если процесс еще не исчерпал свое адресное пространство.
Количество свободных PTE можно измерить с помощью perfmon (\ Memory \ Free System Page Table Entries). Все, что меньше 5000, считается Microsoft критическим. Например, на серверах, упомянутых в исходном сообщении, без переключателя 3 ГБ и при запущенном процессе количество бесплатных PTE составляло около 160 КБ. После включения 3 ГБ, но до того, как процесс начался, Windows сообщала о 3,5 тыс. Бесплатных PTE (резкое сокращение). Это число быстро упало бы, если бы мы начали процесс.
Способ компенсировать это резкое изменение - включить переключатель USERVA в boot.ini. Устанавливая USERVA = 2800, это перемещает разделение памяти 3 ГБ / 1 ГБ и «возвращает» примерно 250 МБ обратно ядру для его использования. Например, после установки USERVA = 2800 в boot.ini в нашей системе количество свободных PTE теперь составляет около 60 КБ при запущенном процессе (намного лучше, чем 3,5 КБ, которые мы видели).
Более подробную информацию о переключателе USERVA можно найти в Microsoft KB статья.
Также стоит упомянуть, что включение PAE также влияет на количество свободных PTE. Переключатель PAE заставляет каждую запись PTE использовать вдвое больше обычного выделенного виртуального адресного пространства.
Надеюсь, это дает хорошее краткое изложение информации для всех, кто заглянет в более позднее время.
Ура Сэм
Слушать этот выпуск радио RunAs.
Основное внимание в этом выпуске уделяется очевидному «почему 64-битная версия лучше», однако гость говорит «почему следует избегать / 3GB». По сути, это значительно уменьшает количество записей в таблице страниц, доступных для ОС - настолько, что ОС может работать нестабильно.
В общем, это может быть подходящим для сервера, который обслуживает одну функцию (например, контроллер AD или SQL Server), однако его следует избегать в системе, которая предоставляет несколько функций. В конце концов, «ваш пробег может отличаться» - помните, что / 3GB может легко сделать ОС нестабильной.
Возможно, вы захотите рассмотреть 64-битную ОС, даже если приложение только 32-битное. В Windows x64 32-разрядные процессы получают 4 ГБ ОЗУ, а не 2 ГБ.
См. Раздел «Виртуальная память» в KB294418 для подробностей.
Насколько мне известно, переключатель PAE позволяет приложениям на сервере получать доступ к памяти объемом более 4 ГБ. Согласно этому технот приложения действительно не знают об этой подкачке памяти, все это делается в Windows. Я думаю, что использование переключателя / 3GB на сервере 6 ГБ ограничит ядро до 1 ГБ. Еще одно ограничение, вызванное одновременным использованием / 3GB и / PAE, заключается в том, что сервер не будет адресовать более 16 ГБ.
Если вы не пытаетесь освободить каждый МБ памяти для приложения, вы можете просто использовать / PAE без / 3 ГБ. Таким образом, если когда-нибудь у вас будет 24 или 32 ГБ ОЗУ, вам не придется пытаться выяснить, почему Windows использует только 16 ГБ.
В моей предыдущей системе я использовал переключатель / 3GB, потому что одному из моих приложений требовалось много памяти. Недавно я обновился до 64-битной системы Vista и обновил приложение до 64-битной версии, которая предоставила ему все 12 ГБ, которые у меня есть сейчас. Однако другие 32-битные приложения по-прежнему ограничены теми же 3 ГБ памяти (или 2 ГБ без переключателя) просто потому, что они не могут видеть за пределами размера указателя адреса. (А в 32-битных системах адресные указатели 32-битные ...)
Тем не менее, переключатель / 3GB в сочетании с более чем 3 ГБ оперативной памяти по-прежнему полезен, если сама Windows может обрабатывать большие указатели адресов. Это позволяет Windows хранить больше приложений в памяти, таким образом, она намного меньше подкачивает на диск, что увеличивает производительность.
PAE - это аппаратный трюк, при котором у процессора есть еще несколько контактов для отправки адреса. Их количество увеличилось с 32 (бит) до 36 контактов. Это позволяет использовать до 64 ГБ ОЗУ для любого приложения, которое знает об этих дополнительных контактах. Microsoft хорошо использует это в своем серверном программном обеспечении, поэтому Windows может обрабатывать до 64 ГБ. Если процесс, который потребляет столько памяти, также знает об этих дополнительных контактах, он также может выделить до 64 ГБ ОЗУ. Этот метод для приложений называется Расширения окна адреса. Конечно, это также требует специального кода в приложении для обработки этой памяти и напоминает мне старую эпоху MS-DOS, когда указатели приложений сначала были ограничены всего 16 битами (64 КБ), но поскольку у процессора было 20 контактов (позже 24 ), вы можете использовать специальные 32-битные указатели для указания адреса или просто придерживаться старых 16-битных указателей, оставаясь ограниченным размером всего 64 КБ. (20 бит - это 1024 КБ, а DOS использовала все, что выше нижних 640 КБ, или 1 ГБ. 24 бита - это 4 ГБ, которые были популярны для первых процессоров 80386 в качестве верхнего предела.)
Как я читал отличный пост Марка Руссиновича Расширяя границы Windows: физическая память, да ... 1 ГБ памяти, доступной ядру при 32-разрядной установке Windows с переключателем / 3 ГБ, сохраняется даже в системах с объемом оперативной памяти до 128 ГБ (поддерживается в 32-разрядных установках W2K3 Datacenter).
Максимальный 32-разрядный предел в 128 ГБ, поддерживаемый Windows Server 2003 Datacenter Edition, исходит из того факта, что структуры, которые диспетчер памяти использует для отслеживания физической памяти, будут занимать слишком много виртуального адресного пространства системы в более крупных системах. Диспетчер памяти отслеживает каждую страницу памяти в массиве, называемом базой данных PFN, и для повышения производительности отображает всю базу данных PFN в виртуальную память. Поскольку каждая страница памяти представляет собой 28-байтовую структуру данных, для базы данных PFN в системе 128 ГБ требуется около 930 МБ. 32-разрядная Windows имеет виртуальное адресное пространство 4 ГБ, определяемое оборудованием, которое по умолчанию разделяется между текущим выполняющимся процессом в пользовательском режиме (например, Блокнот) и системой. Таким образом, 980 МБ занимает почти половину доступных 2 ГБ системного виртуального адресного пространства, оставляя только 1 ГБ для сопоставления ядра, драйверов устройств, системного кеша и других структур данных системы, что делает это разумным сокращением: *
Раймонд Чен, один из программистов оболочки Windows в Microsoft, опубликовал в своем блоге отличную серию статей о переключателе / 3GB, PAE, AWE и NX. Их следует прочитать всем, кто пытается понять, как все это работает, как взаимодействует и почему во многих обстоятельствах это, вероятно, не то, что вам нужно:
http://blogs.msdn.com/oldnewthing/archive/2004/08/22/218527.aspx