Сжатие памяти в Windows

Одна из функций диспетчера памяти — это сжатие страниц памяти. Основными кандидатами на сжатие являются используемые страницы процессов UWP-приложений.










Алгоритм сжатия страниц




В MicroSoft разработали специальный алгоритм для сжатия страниц памяти — «Microsoft Xpress«. Этот алгоритм сжимает страницы приблизительно до 30-50%.




Чтобы этот механизм освобождал память а не нагружал её еще сильнее, придумали следующие требования.




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




В клиентских версиях ОС сжатие памяти включено по умолчанию. Серверные версии пока не поддерживают сжатие памяти вплоть до Windows Server 2019.




Пример сжатия




Допустим у нас есть:




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




Алгоритм работы сжатия страниц памяти - шаг 1




Дальше диспетчер памяти хочет провести усечение списка измененных страниц. Информация на страницах 11, 12, 13 сжимается и помещается в одну страницу — 1 из свободных. А страницы 11, 12, 13 освобождаются.




Алгоритм работы сжатия страниц памяти - шаг 2




Допустим ситуация повторилась, и теперь три страницы (14, 15, 16) сжались в две из свободных (2, 3):




Алгоритм работы сжатия страниц памяти - шаг 3




Допустим теперь диспетчер памяти решил произвести усечение рабочего набора процесса сжатия памяти. Для этого он страницы 1 и 2 перемещает в измененные. Такие страницы все еще содержат данные, но уже не являются частью рабочего набора процесса:




Алгоритм работы сжатия страниц памяти - шаг 4




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




Вот так сжатие памяти немного нагружая процессор заставляет систему меньше обращаться к дисковой подсистеме.




Процесс «Memory Compression»




Сжатая память хранится в рабочем наборе процесса «Memory Compression«. Кстати, объем рабочего набора этого процесса должен совпадать в диспетчере задач со сжатой памятью:




Сжатая память (Process Explorer и Диспетчер задач)




Этот процесс просто предоставляет адресное пространство для работы. В нем ничего не выполняется, то есть сжимает данные не он, а диспетчер памяти.








Вернуться к оглавлению



2021-09-10T17:25:06
Администрирование Windows