Чтобы сделать его коротким, активным и проводным используется память, которая не должна или не может быть выгружена для освобождения памяти. Хотя неактивный может быть должным образом заменен, но все еще принадлежит (не освобожден) процессу или ядру, так что это не сильно используемая память, но все еще используемая.
Новым является прачечная, представляющая собой список грязных страниц памяти, которые, возможно, необходимо записать на устройство подкачки. Либо, если грязную память нужно было поменять местами или нет, они добавляются обратно в неактивную очередь.
Предполагается, что проводная память не должна быть заменена для безопасности (в случае ядра) или для оптимизации процессов в пользовательской среде (например, ZFS). Проводная память используется для кэшей файловых систем, которые могут быть освобождены ядром. По крайней мере, для ZFS это можно рассматривать как в основном свободную память.
Свободная память определенно свободна.
Кэшированный (теперь устаревший, я думаю) готов к освобождению, поскольку он уже выгружен и доступен только для возможного перераспределения.
Буфер используется в качестве кэша большинством файловых систем (UFS, FAT, ...) и представляет собой объем памяти, используемый файловыми системами. Может быть активным, неактивным или проводным.
ARC (Adaptive Replacement Cache) - это кэш, используемый ZFS, и это память, которая может быть освобождена при необходимости.
Из FreeBSD Wiki о памяти
Классы памяти
активный
- Содержит страницы "активно" (недавно), на которые ссылается пользователь
- Содержит смесь чистых и грязных страниц
- Страницы регулярно сканируются демоном страницы (каждая страница посещается один раз каждые vm.pageout_update_period секунды)
- Сканирование проверяет, была ли ссылка на страницу с момента последнего сканирования.
- Если достаточное количество сканирований завершено без ссылки, страница перемещается в неактивную очередь
- Реализует псевдо-LRU
Неактивный
- Содержит страницы, устаревшие из активной очереди
- Содержит страницы, исключенные из буферного кеша
- Содержит смесь чистых и грязных страниц
- Страницы сканируются демоном страниц (начиная с заголовка очереди), когда существует нехватка памяти:
- Страницы, на которые имеются ссылки, перемещаются обратно в активную очередь или в конец неактивной очереди.
- Грязные страницы перемещаются в конец очереди на стирку
- Чистые страницы без ссылок могут быть немедленно освобождены и использованы повторно
- Реализует второй шанс LRU
Прачечная
- Очередь для управления грязными неактивными страницами, которые необходимо очистить («отмыть»), прежде чем их можно будет повторно использовать
- Управляется отдельной веткой, стиркой, а не страницей демона
- Нить для стирки стирает небольшое количество страниц, чтобы сбалансировать неактивные и стирочные очереди
- Частота отмывания зависит от:
- Сколько чистых страниц освобождает демон страницы; Чем больше свобод, тем выше частота отмывания
- Размер очереди на стирку относительно неактивной очереди; если очередь за прачечной растет, мы будем чаще стирать
- Сканирование страниц осуществляется стиркой (начиная с заголовка очереди):
- Страницы, на которые ссылались, перемещаются обратно в активную очередь или в конец очереди на стирку
- Грязные страницы отмываются, а затем перемещаются близко к заголовку неактивной очереди
Бесплатно
- Память доступна для использования остальной частью системы.
Проводная
- Нестраничная память: не может быть освобождена, пока владелец не освободит ее явно
- Пользовательская память может быть подключена с помощью mlock (2) (в зависимости от ограничений системы и пользователя)
- Распределители памяти ядра возвращают проводную память
- Содержимое ARC и буферного кэша являются проводными
- Некоторая память постоянно подключена и никогда не освобождается (например, сам файл ядра)
Из раздела «Разработка и реализация операционной системы FreeBSD», глава 6.12 «Замена страницы» (не совсем точная, но здесь для справки по старому вопросу):
Ядро делит основную память на пять списков:
- Проводной : проводные страницы заблокированы в памяти и не могут быть выгружены. Обычно эти страницы используются ядром или пейджером физической памяти, или они заблокированы с помощью mlock . Кроме того, все страницы, используемые для хранения стеков потоков загруженных (то есть не выгруженных) процессов, также являются проводными.
- Active : активные страницы используются одним или несколькими областями виртуальной памяти. Хотя ядро может их выгружать, это может привести к тому, что активный процесс снова откажется от них.
- Неактивные : неактивные страницы могут быть грязными и иметь содержимое, которое все еще известно, но они обычно не являются частью какого-либо активного региона. Если содержимое страницы загрязнено, содержимое должно быть записано в резервное хранилище перед повторным использованием страницы. После очистки страницы она перемещается в список кеша. Если системе не хватает памяти, демон выгрузки может попытаться переместить активные страницы в неактивный список в надежде найти страницы, которые на самом деле не используются. Критерии выбора, используемые демоном выгрузки для выбора страниц для перемещения из активного списка в неактивный, описаны далее в этом разделе. Когда списки свободной памяти и кеша уменьшаются до минимума, демон выгрузки просматривает неактивный список, чтобы создать больше кеша и свободных страниц.
- Кэш . Кэш-страницы содержат все еще известное содержимое, но они не являются частью отображения. Если они включены в активную область, они не являются частью какого-либо отображения. Если они повреждены в активной области, они будут перемещены из списка кэша в активный список. Если они используются для чтения или записи, они сначала будут перемещены из списка кеша в кеш буфера и в конечном итоге выведены в неактивный список. MLOCK системный вызов может вернуть страницу из списка кэша и подключить его. Страницы в списке кэша похожи на неактивные страницы, за исключением того, что они не являются грязными, либо потому, что они не изменены, так как они были перемещены в страницу, или потому что они были записаны в их резервное хранилище. Они могут быть востребованы для нового использования, когда требуется страница.
- Бесплатно : бесплатные страницы не имеют полезного содержимого и будут использоваться для выполнения новых запросов о сбоях страниц.
Чтобы ответить на ваш оригинальный вопрос
Верно ли, что ядро FreeBSD автоматически распределяет пространство между пулами Inactive, Cache и Buffers для Active или Wired, если это необходимо?
Активные страницы могут стать неактивными, если они не использовались в течение некоторого времени. Если ядро заменяет неактивную страницу, эта страница перемещается в список кеша . Страница в списке кэша не является частью виртуального отображения какого-либо процесса, но может быть легко восстановлена, как активная или проводная . Или когда это необходимо для ввода-вывода в качестве буферного кэша.
Проводная память не может быть выгружена из основной памяти. Если он подключен процессом, он должен быть отключен от munlock
вызова, чтобы снова стать активной памятью.
Активная , неактивная и проводная память может быть освобождена процессом или ядром и добавлена в свободный список.
Inactive
,Wired
,Cache
иBuffers
пуловActive
или ,Wired
если это необходимо?» в то время как я хотел спросить «Могу ли я правильно , что FreeBSD ядро автоматически выделяет пространство изInactive
,Cache
иBuffers
бассейны сActive
илиWired
при необходимости?». Я обновил свой начальный вопрос. Таким образом , в двух словах, используемых в памяти FreeBSD являетсяWired
+ ,Active
и если эти два бассейна необходимо дополнительное количество памяти , то это берется изInacative
,Cached
,Buffers
илиFree
бассейнов?