[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по настройке производительности


Администратор виртуальной памяти (VMM) - Обзор

Все пространство виртуальных адресов разделено на сегменты. Сегмент представляет собой непрерывный участок виртуального адресного пространства размером 256 Мб, в который может быть помещен объект данных.

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

Управление физической памятью

Сегменты виртуальной памяти разбиты на блоки фиксированного размера, которые называются страницами. Размер страницы равен 4096 байт. Любая страница может располагаться в оперативной памяти или храниться на жестком диске, если в настоящий момент она не нужна. Физическая память также разделена на страницы размером 4096 байт. Функция Администратора виртуальной памяти состоит в выделении страниц физической памяти и преобразовании ссылок на страницы виртуальной памяти, которые в данный момент выгружены на диск или еще не существуют (например, при первом обращении процесса к сегменту данных).

Так как объем используемой виртуальной памяти может превышать объем оперативной памяти, VMM хранит избыточные данные на диске. С точки зрения производительности к работе VMM предъявляется два требования, отчасти противоположные друг другу:

Для выполнения этих требований VMM использует список свободных страниц памяти, который применяется при возникновении страничных ошибок. Список свободных страниц пополняется на основе алгоритма замены страниц. Алгоритм замены страниц использует несколько механизмов:

В следующих разделах приведено более подробное описание списка свободных страниц и алгоритма замены страниц.

Список свободных страниц

Список свободных страниц физической памяти применяется VMM для обработки страничных ошибок. В большинстве систем VMM пополняет список свободных страниц, случайно выбирая страницы физической памяти, принадлежащие некоторым процессам. Страницы виртуальной памяти, которые будут помещены на диск для освобождения оперативной памяти, выбираются на основе алгоритма замены страниц. Число перемещаемых страниц определяется пороговыми значениями VMM.

Постоянные и рабочие сегменты

Страницам постоянных сегментов соответствует фиксированная область на диске. Постоянные сегменты формируются при работе с файлами данных и исполняемыми программами. Так как для каждой страницы постоянного сегмента существует выделенная область диска, при выгрузке измененных страниц из памяти VMM сразу записывает их в место постоянного хранения. Если страница, выбранная для пополнения списка свободных страниц, не изменилась, то она не записывается на диск. При повторном обращении к странице постоянной памяти она считывается из области постоянного хранения на диске.

Рабочие сегменты являются временными и существуют только во время работы процесса. Их расположение на диске не фиксировано. В рабочих сегментах размещаются стек и области данных процесса, сегменты кода ядра и расширений ядра, а также сегменты кода и данных общих библиотек. Для хранения выгружаемых из памяти страниц рабочих сегментов также выделяются области диска. Они называются пространствами подкачки.

На следующем рисунке проиллюстрированы способы хранения на диске страниц из различных сегментов памяти. Кроме того, на нем показан пример реального расположения страниц в физической памяти.

Рис. 2-3. Постоянные и рабочие сегменты памяти. На следующем рисунке проиллюстрированы способы хранения на диске страниц из различных сегментов памяти. На нем также показан пример реального расположения страниц в физической памяти. Рабочие сегменты являются временными, поскольку они существуют только во время работы процесса. Их расположение на диске не фиксировано. В рабочих сегментах размещаются стек и области данных процесса, сегменты кода ядра и расширений ядра, а также сегменты кода и данных общих библиотек. Для хранения выгружаемых из памяти страниц рабочих сегментов также выделяются области диска. Они называются пространствами подкачки.
Рисунок h02i4

Постоянные сегменты также разделяются на типы. Сегменты клиента применяются при работе с удаленными файлами (например, с файлами NFS), в том числе и с удаленными исполняемыми файлами. Страницы сегментов клиента считываются из области постоянного хранения на диске удаленной системы, а не из пространства подкачки. Журнализированные и отложенные сегменты - это постоянные сегменты, которые должны обновляться целиком. Если страница такого сегмента должна быть выгружена из памяти, она записывается в пространство подкачки на диске и хранится там до тех пор, пока ее нельзя будет зафиксировать (записать в постоянную область памяти файла).

Файловая и рабочая память

Рабочая память состоит из страниц, хранящихся в рабочих сегментах памяти и сегментах кода программ.

К файловой памяти относятся все остальные страницы. Обычно это страницы стандартных файлов данных, расположенные в постоянных сегментах памяти.

Замена страниц

Когда в списке свободных страниц физической памяти остается мало страниц, вызывается программа добавления страниц. Эта программа просматривает таблицу страниц физической памяти (PFT) и выбирает страницы для добавления в список.

PFT содержит флаги, которые указывают, было ли зарегистрировано обращение к странице, и была ли страница изменена. Если будет найдена страница, к которой обращался какой-либо процесс, то программа добавления страниц не выберет эту страницу, но сбросит флаг обращения к этой странице. Если при следующем просмотре таблицы программа добавления страниц обнаружит, что флаг обращения по-прежнему не установлен, то она выберет эту страницу. Все страницы, к которым никто не обращался, выбираются сразу.

Флаг изменения указывает, что с момента последней загрузки этой страницы в память хранящиеся в ней данные были изменены. Перед выбором страницы с установленным флагом изменения вызывается процедура выгрузки из памяти. Страницы рабочих сегментов выгружаются в пространство подкачки, а страницы постоянных сегментов - на диск.

Рис. 2-4. Пример замены страниц. На рисунке показаны фрагменты трех таблиц. Первая таблица - это таблица страниц, содержащая четыре столбца, в которых указываются адрес в физической памяти, тип сегмента, флаг обращения и флаг изменения. Вторая таблица содержит список адресов свободных страниц. Третья таблица представляет собой итоговую таблицу страниц после удаления всех адресов свободных страниц.
Рисунок h02f9

Алгоритм замены страниц также отслеживает новые страничные ошибки (возникшие при первом обращении к странице) и повторные страничные ошибки (возникшие при обращении к выгруженным страницам). Для этого используется хронологический буфер, который содержит ИД страничных ошибок, возникших за последнее время. После этого алгоритм пытается сбалансировать число выгруженных файловых страниц (с постоянными данными) с числом выгруженных рабочих страниц (страниц из рабочей памяти и страниц с кодом программ).

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

При работе в однопроцессорной среде замена страниц выполняется прямо в области нити. При работе в многопроцессорной системе замена страниц выполняется процессом ядра lrud. Процессор переключается на этот процесс, когда достигается порог minfree. В операционной системе AIX версии 4.3.3 и более поздних версий процесс ядра lrud реализован в виде нескольких нитей, каждая из которых работает со своим пулом памяти. Физическая память разделяется на пулы, размер которых кратен двум. Число пулов зависит от числа CPU и объема RAM. Оно вычисляется следующим образом:

В операционной системе AIX версии 4.3.3 и более поздних версий для изменения числа пулов памяти можно вызвать команду vmtune -m <число пулов памяти>. Изменение вступит в силу при следующей загрузке системы. Значения minfree и maxfree, показанные в выводе команды vmtune, равны сумме значений minfree и maxfree отдельных пулов памяти.

Повторные страничные ошибки

Страничные ошибки разделяются на новые и повторные. Страничная ошибка считается новой, если отсутствуют данные о предыдущих обращениях к странице. Повторная ошибка возникает в том случае, если с момента недавнего обращения к странице к ней обратились повторно, и страницы не оказалось в оперативной памяти из-за того, что она была удалена из нее (и, возможно, записана на диск).

Идеальная стратегия замены страниц должна полностью исключить появление повторных страничных ошибок (при наличии достаточного количества оперативной памяти), освобождая только те страницы, которые не будут использоваться повторно. Таким образом, число повторных страничных ошибок является показателем, обратным эффективности работы алгоритма замены страниц с точки зрения интенсивности дискового ввода-вывода и общей производительности системы.

Для распознавания повторных страничных ошибок VMM поддерживает хронологический буфер повторных страничных ошибок, содержащий идентификаторы N последних страничных ошибок, где N - число страниц в оперативной памяти. Например, для оперативной памяти размером 512 Мб будет создан хронологический буфер страничных ошибок размером 128 Кб. При загрузке страницы в память выполняется поиск ее идентификатора в буфере и, если он будет обнаружен, то ошибка считается повторной. Этот буфер также позволяет VMM оценить интенсивность повторных страничных ошибок для рабочей и файловой памяти путем вычисления числа страничных ошибок для памяти каждого типа. При каждом запуске алгоритма замены страниц показатель интенсивности умножается на 0,9, чтобы новая информация о страничных ошибках учитывалась в большей степени, чем устаревшая.

Пороговые значения VMM

Работа VMM управляется несколькими пороговыми значениями. При достижении одного из пороговых значений VMM выполняет определенные действия для возврата параметров памяти в заданные границы. В этом разделе описаны пороговые значения, которые могут быть изменены системным администратором с помощью команды vmtune.

Размер списка свободных страниц определяется следующими параметрами:

minfree
Минимально допустимое число страниц физической памяти в списке свободных страниц. Если число страниц в списке снижается до этого значения, VMM начинает процесс освобождения памяти. Этот процесс выполняется до тех пор, пока число страниц в списке не достигнет значения maxfree.

maxfree
Максимальное число страниц физической памяти, до которого VMM будет пополнять список свободных страниц. Объем списка свободных страниц может превысить эту границу в результате завершения процесса с освобождением рабочих сегментов или удаления файла, страницы которого загружены в память.

VMM старается поддерживать размер списка свободных страниц не ниже minfree. Когда из-за большого числа страничных ошибок или системных запросов размер списка становится меньше minfree, запускается алгоритм замены страниц. Размер списка свободных страниц должен превышать определенный уровень (значение minfree по умолчанию) по ряду причин. Например, используемый в операционной системе алгоритм упреждающей выборки при последовательном чтении требует сразу несколько свободных страниц для процесса, выполняющего последовательное чтение. Кроме этого, VMM предотвращает блокировку системы в ситуациях, когда для чтения страницы, необходимой для освобождения страницы оперативной памяти, не хватает памяти.

Описанные ниже пороговые значения выражены в процентах. Они задают долю физической памяти системы, занятую файловыми страницами, то есть страницами, не относящимися к рабочим сегментам.

minperm
Если доля файловой памяти станет меньше данного значения, алгоритм замены страниц начнет освобождение памяти (как файловой, так и рабочей), независимо от интенсивности повторных страничных ошибок.

maxperm
Если доля файловой памяти станет больше данного значения, алгоритм замены страниц начнет освобождение страниц файловой памяти.

Если объем физической памяти, занятой файловыми страницами, находится между minperm и maxperm, VMM пополняет список свободных страниц только за счет файловых страниц, однако если интенсивность повторных страничных ошибок для файловой памяти превышает аналогичный показатель для рабочей памяти, то для пополнения выбираются и страницы рабочей памяти.

Главной задачей алгоритма замены страниц является правильная обработка рабочих страниц. Например, последовательное чтение большого файла данных не должно приводить к выгрузке кодового сегмента программы, который, вероятно, потребуется в будущем. Использование пороговых значений и вычисление интенсивности повторных страничных ошибок позволяет алгоритму замены страниц равномерно обслуживать память обоих типов, с небольшим перевесом в сторону рабочей памяти.

Средство управления нагрузкой на память VMM

Для выполнения процессу необходимы страницы физической памяти. При обращении процесса к странице виртуальной памяти, которая находится на диске в силу того, что она была выгружена из памяти или ни разу не была прочитана, эта страница должна быть загружена в оперативную память. Обычно при этом из памяти должна быть выгружена одна или несколько страниц (если эти страницы были изменены), что требует выполнения ряда операций ввода-вывода и приводит к задержке в работе процесса.

Алгоритм замены страниц операционной системы пытается выгружать только те страницы, к которым вряд ли будут обращаться в ближайшее время. Успешная работа алгоритма замены страниц позволяет операционной системе поддерживать работу достаточного числа процессов и эффективно использовать центральный процессор. Однако при большом числе параллельно работающих процессов в памяти не будет страниц, которые могут быть выгружены на диск, так как все они в ближайшем будущем будут использоваться работающими процессами. Такая ситуация зависит от следующих факторов:

В таких случаях страницы будут непрерывно загружаться и выгружаться из памяти. Такая ситуация называется перегрузкой памяти. В результате перегрузки памяти возникает избыточный страничный обмен, и страничные ошибки возникают при передаче управления каждому процессу, в результате чего ни один процесс не может нормально работать.

Самым неприятным является то, что перегрузка может быть вызвана кратковременным случайным всплеском активности (например, одновременным нажатием клавиши Enter всеми пользователями), после чего система останется заблокированной на неопределенное время.

В операционной системе применяется алгоритм управления нагрузкой на память, который в системе с перегруженной памятью приостанавливает работу некоторых процессов и откладывает запуск новых процессов на определенное время. Работа алгоритма определяется пятью параметрами. По умолчанию для них установлены значения, которые были протестированы в системах с разной нагрузкой. В операционной системе AIX версии 4 управление нагрузкой на память по умолчанию выключено, если суммарный объем свободных страниц физической памяти составляет 128 Мб или более.

Алгоритм управления нагрузкой на память

Механизм управления нагрузкой на память раз в секунду оценивает объем памяти, доступный набору активных процессов. При обнаружении перерасхода памяти работа некоторых процессов приостанавливается, что позволяет снизить расход памяти.

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

К параметрам управления нагрузкой на память относятся:

Информация о настройке этих параметров приведена в разделе Настройка управления нагрузкой на память VMM с помощью команды schedtune.

Раз в секунду планировщик (процесс 0) проверяет описанные выше показатели, измеренные за прошедшую секунду работы, и определяет, какие процессы должны быть приостановлены или активизированы. Если в системе возник перерасход памяти, то все процессы, которые после оценки параметров -p и -e являются кандидатами на остановку, помечаются для остановки. После того как одному из таких процессов передается управление в пользовательском режиме, он приостанавливается (если после этого число активных процессов не станет меньше -m). Для того чтобы не останавливались процессы, от имени которых системой выполняются важные операции, работа процессов приостанавливается только в пользовательском режиме. Если в течение следующей секунды память по-прежнему будет перегружена, для остановки помечаются дополнительные процессы, выбранные на основе значений -p и -e. После того как работа системы будет стабилизирована, он начинает помещать в очередь выполнения (активизировать) приостановленные процессы.

Приостановленные процессы повторно активизируются одним из следующих способов:

  1. По величине приоритета
  2. В том же порядке, в каком они останавливались

Приостановленные процессы никогда не активизируются одновременно. Число возобновляемых процессов равно одной пятой от текущего числа активных процессов или монотонно возрастающей нижней границе, если она больше. Такая стратегия позволяет увеличивать число параллельно работающих задач на 20 процентов в секунду. Она выбрана для того, чтобы повторная активизация выполнялась относительно плавно, с небольшим увеличением нагрузки в первую секунду после окончания интервала стабилизации. Если перерасход памяти возникнет во время активизации приостановленных процессов, будут выполнены следующие действия:

Выделение и освобождение блоков пространства подкачки

Операционная система поддерживает три способа выделения рабочей памяти (блоков пространства подкачки):

Примечание: Блоки пространства подкачки освобождаются только при завершении процесса (а не нити), либо при вызове функции disclaim(). Эти блоки не освобождаются системным вызовом free().

Алгоритм динамического выделения пространства подкачки

Во всех версиях операционной системы AIX младше 4.3.2 применялся алгоритм динамического выделения памяти, в котором блок пространства подкачки выделялся только при первом обращении к странице виртуальной памяти. То есть фактически пространство выделяется только тогда, когда программа начинает работать с содержимым страницы.

Алгоритм динамического выделения применяется многими программами путем выделения памяти под максимально возможный объем данных с последующим использованием требуемой части выделенной памяти. Неиспользуемые страницы виртуальной памяти не занимают страниц оперативной памяти и блоков пространства подкачки.

Использование этого метода сопряжено с некоторым риском. Если все работающие программы одновременно займут максимально возможную область памяти, пространство подкачки будет полностью израсходовано. Вполне вероятно, что после этого некоторые программы не смогут продолжать работу.

Алгоритм статического выделения пространства подкачки

Второй способ выделения блоков пространства подкачки предназначен для применения в системах, в которых описанная выше ситуация вероятна, либо там, где аварийное завершение работы программ недопустимо. В алгоритме статического выделения пространства подкачки необходимое количество блоков пространства подкачки предоставляется одновременно с выделением диапазона адресов виртуальной памяти, например, с помощью функции malloc(). Если блоков пространства подкачки недостаточно для выполнения запроса функции malloc(), то программе передается код ошибки. Для того чтобы включить алгоритм статического выделения пространства подкачки, необходимо указать следующую строку:

# export PSALLOC=early

После этого все запускаемые в среде программы будут работать в режиме статического выделения пространства подкачки. Для всех ранее запущенных программ режим выделения пространства подкачки изменен не будет.

Статическое выделение может служить средством анализа производительности, так как оно сопряжено с повышенными требованиями к объему пространства подкачки. При использовании алгоритма статического выделения требования к пространству подкачки возрастают во много раз. В то время как в обычных ситуациях рекомендуют создавать пространство подкачки объемом вдвое больше объема оперативной памяти, в системах с PSALLOC=early объем пространства подкачки должен быть как минимум вчетверо больше. Такая оценка весьма приблизительна. Вам потребуется оценить требования программ к виртуальной памяти и создать пространство подкачки исходя из этих требований. Например, при работе в режиме статического выделения пространства подкачки для сервера AIXwindows требуется пространство подкачки размером 250 Мб.

Алгоритм выделения пространства подкачки с отсрочкой

Стратегия отложенного выделения пространства подкачки (DPSA) применяется по умолчанию в системах AIX версии 4.3.2 и выше. В этой стратегии выделение пространства подкачки откладывается до тех пор, пока не потребуется выгрузить страницу. Это приводит к тому, что излишний объем пространства подкачки не выделяется. Такой способ позволяет сэкономить значительный объем пространства подкачки, а, следовательно, и дискового пространства.

В некоторых системах пространство подкачки может не потребоваться даже в том случае, если каждая страница, к которой обращались процессы, изменялась. Это возможно в системах с очень большим объемом оперативной памяти. Однако это может привести к перерасходу пространства подкачки в случае, если объем запрошенной виртуальной памяти будет превосходить объем физической памяти.

Для того чтобы выключить алгоритм DPSA и включить алгоритм динамического выделения пространства подкачки, вызовите команду:

# /usr/samples/kernel/vmtune -d 0

Для того чтобы включить алгоритм DPSA, вызовите команду:

# /usr/samples/kernel/vmtune -d 1

Более подробная информация по этому вопросу приведена в разделах Выбор способа выделения пространства подкачки и Размещение и размер пространства подкачки.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]