Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Подкачка процессов

Подкачка процессов

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

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

· Процессы полностью неактивны в течение более 10 секунд. Иначе такие процессы сохранили бы лишь несколько страниц памяти, связанной с их структурой пользователя и стеками потоков.

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

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

Выгрузка процесса осуществляется демоном выгрузки процессов, vmdaemon (процесс 3). Политика выгрузки vmdaemon воплощена в процедуре vm_daemon(). Если демон выгрузки страниц может найти любые процессы, которые находились в состоянии сна в течение более 10 секунд (swap_idle_threshold, порог для того, чтобы считать время сна «длительным»), он выгрузит тот, время сна которого было наибольшим. У таких процессов наименьшая вероятность хорошо использовать память, которую они занимают; поэтому они выгружаются, даже если они небольшие. Если ни один из этих процессов не доступен, демон выгрузки страниц выгрузит процесс, который спал всего лишь 2 секунды (swap_idle_thresholdl). Этот критерий пытается избежать полной выгрузки до тех пор, пока демон выгрузки страниц безусловно не сможет сохранить достаточно свободной памяти.

В 4.4BSD, если памяти по-прежнему очень мало, демон выгрузки выбрал бы работоспособный процесс, который был резидентным дольше всех. После начала выгрузки работоспособных процессов процессы, подходящие для выгрузки, занимали бы очереди в памяти таким образом, чтобы ни один процесс не был выброшен полностью. Демон выгрузки FreeBSD не будет выбирать для выгрузки работоспособный процесс. Поэтому, если набор работоспособных процессов не помещается в памяти, машина попадет в тупик. В современных машинах достаточно памяти, чтобы это условие не возникало. Если оно возникнет, алгоритм 4.4BSD нужно будет восстановить.

Механика осуществления выгрузки процесса проста. Флаг загрузки процесса PINMEM сбрасывается, чтобы показать, что процесс не находится в памяти. В ходе выполнения выгрузки устанавливается флаг PSSWAPPINGOUT, чтобы в то же самое время не предпринимались ни повторная попытка выгрузки, ни попытка загрузки. Если работоспособный процесс должен быть подкачан (что в настоящее время никогда не происходит), его нужно удалить из очереди готовых к запуску процессов. Структура пользователя процесса и стек ядра его потоков помечаются после этого как выгружаемые, что дает возможность выгрузить страницы структуры пользователя и стека вместе с любыми другими оставшимися в процессе страницами посредством стандартного механизма выгрузки страниц. Выгруженный процесс не может быть запущен до тех пор, пока не будет подкачан обратно в память.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 49 гостей онлайн

Реклама на сайте: