Найти в Дзене
А чё так можно?

Виртуальная память Windows. Простыми словами. Умная Большая Оптимизация #3

Оглавление

Вместо вступления

Этой статьей: объясню какие инструменты ОС есть по работе с памятью. Как ОС выделяет память, покажу наглядно почему вмешиваться в работу ОС с памятью — плохая идея.

Из рубрики «Умной большой оптимизации»:

  1. Режим одобрения администратором. Как запускать всё приложения в режиме «от имени Администратора».
  2. Запуск приложений от имени Системы.

Во избежания недоразумений лучше прочитать все предшествующие статьи, дабы избежать вопросов:

  • Почему у меня не запускается приложение?
  • Почему у меня нет этого приложения?
  • Где, то место, про которое идет речь?
  • Что такое «…» (что бы то ни было, освещенное ранее)?
  • И подобные…

Отвечать на подобные вопросы не буду.

Ставь лайки и комментируй, если статья оказалась полезной. Для меня и тебя это важно.

Дополняющее видео: Почему программы по очистки памяти — мусор? Как Windows работает с памятью?

В видео могут быть фрагменты, отсутствующие в статье из-за большого набора действий, которые мне лень переносить в формат статьи.

По сути: виртуальная память

Виртуальная память состоит из:

  • физической памяти;
  • файлов подкачки, если они включены.

Подробнее читай на сайте Мелких. В указанной статье всё расписано от и до с техническими терминами и прочим. Подобные термины я буду опускать за ненадобностью и постараюсь оперировать более простыми определениями.

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

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

Если файл подкачки отключен или его объем недостаточен, а потребление памяти подходит к своему максимуму, то ОС сначала жалуется, затем:

  • достаточное количество приложений падает с забора, память освобождается и ОС продолжает работу;
  • ОС зависает намертво;
  • ОС может аварийно перезагрузиться.
ОС плачет 😐
ОС плачет 😐

По сути: физическая память

Физическая память — это часть или вся доступная ОС оперативная память.

Ограничения доступности оперативной памяти могут быть разными:

  • аппаратно-зарезервированная, к примеру под нужды видео-карты;
  • технически ограничения ОС, к примеру 32х битная архитектура ОС;
  • пользователь собственноручно ограничил: намеренно или по советам идиотов, к примеру через msconfig.
Win+R msconfig → Enter
Загрузка → Дополнительные параметры → Максимум памяти.
Конфигурация системы
Конфигурация системы

Кстати некоторые идиоты также советуют выставлять максимум процессоров в комбо-боксе «Число процессоров», типа, скорость загрузки ОС будет выше. Оптимизаторы х… 🤣

Запомни, данными параметрами ты ограничиваешь количество ядер процессора и количество памяти. ОС всегда использует по-умолчанию максимальное количество ядер и физической памяти при загрузке. Так что чек-боксы «Число процессоров» и «Максимум памяти» должны быть сняты, как на изображении выше. Данный инструмент используется отладчиками ОС: для отладки её компонентов и драйверов.

Типичный Диспетчер задач
Типичный Диспетчер задач

На протяжении всей статьи буду использовать термины Диспетчера задач.

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

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

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

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

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

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

Также Измененная память, после сохранения на диске, может мигрировать в Кэшированную память.

Доступно — сума памяти Свободной, Кэшированной и Измененной. Если ОС требуется выделить память, она сначала выделяет Свободную память и если та заканчивается, начинает освобождать Кэшированную и Измененную.

Выделено — текущей объем используемой в данный момент виртуальной памяти. Через «/» — всего виртуальной памяти. Как писал ранее виртуальная память — сумма физической памяти и файлов подкачки.

Кэшировано — физическая память, которая ранее использовалась приложением (была в группе Используется), но затем перестала быть нужной. Это могут быть: приложения, компоненты приложений, данные приложений, файлы считанные приложениями. Суть Кэша повысить производительность всей ОС, посредством возвращения Кэшированной памяти в Используемую.

К примеру: приложение прочитало файл размером 100 Мб, обработало эти данные, потратило ресурсы процессора, памяти и диска. Затем выдало из этого файла нужную пользователю информацию. Далее приложение закрывает прочтенный файл, затем освобождает в собственном выделенном объеме памяти эти 100 Мб. Что делает ОС? ОС поместит эти 100 Мб в Кэшируемую память, при условии что Свободной памяти достаточно. ОС исходит из разумного предположения, что эти данные могут понадобиться неоднократно. Теперь, когда приложение попробует прочитать этот файл повторно, ОС вернет этот файл из Кэша. Таким образом ОС не выделяет повторно ресурсы на чтение файла, процессорное время для обработки этого файла и т.д.

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

Давай посмотрим, что храниться в Кэше!

Win+R → RAMMap64 → Enter
Этот снимок не имеет ничего общего со снимком Диспетчера Задач, т.к. сделать гораздо позже.
Этот снимок не имеет ничего общего со снимком Диспетчера Задач, т.к. сделать гораздо позже.

Mapped File — это как раз есть те самые прочитанные файлы, включая сами приложения и их компоненты.

Metafile — служебные данные (мета данные) NTFS.

Посмотреть какие именно файлы находятся в Кэше:

Файлы, находящиеся в Кэше
Файлы, находящиеся в Кэше

Как ты можешь заметить, самый большой по размеру файл, почти 1 Гб — часть мультика, который был ранее мной скачан. Полный размер данного мультика — 8,97 ГБ.

Также с Кэшем работает служба Sysmain. При старте ОС данная служба, на основе ранее собранной информации о работе пользователя с приложениями начинает подгружать в Кэш данные об этих приложениях: включая образы самих приложений, компоненты, файлы которые часто использует это приложения. В итоге при старте ОС Кэш может очень сильно «раздуваться» и как следствие служба Sysmain сильно нагружает диски. Зачем это надо? ОС таким образом готовиться к повседневной работе пользователя, заранее загружает в память всё, что может потребоваться пользователю для работы. Таким образом на запуск приложений тратиться меньше времени и ресурсов.

Подробнее о Кэшировании файлов читай у Мелкоруких:

Выгружаемый\не выгружаемый пулы — практически весь объем данной памяти это системная память под собственное ядро и драйверную обвязку, меньшая часть данной памяти — пулы приложений. Выгружаемый пул может очутиться в файле подкачки, невыгружаемый — нет.

Зарезервировано аппаратно — физическая память недоступная для ОС для распределения приложениям. Используется оборудованием.

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

Рассмотрим ситуацию: пользователь нажимал в ЛЮБОМ подобном приложении кнопу «СУПЕР ОЧИСТИТЕЛЬ ПАМЯТИ!». Что происходит:

  1. ОС пугается как степная лань…
  2. Начинает искать в памяти Используется данные которые она может сжать (если данный инструмент включен), либо тупое — запихнуть в файл подкачки, либо мегатупое — сожмёт память и запихнет её в файл подкачки. Даже если Свободной памяти в избытке.
  3. ОС поместит всё что можно из Используется в Кэш.
  4. ОС запишет всю память Используется в файлы. Может выгрузить весьма большой объем информации, 200-300 Мб в дестяки (сотни\тысячи) файлов.
  5. 90% Кэшированной памяти сделает Свободной памятью и… БАРАБАННАЯ ДРОБЬ… Нифига не изменится…

Но что изменится:

  1. ОС будет тратить ресурсы на то, чтобы разжать сжатую память Используется или достать память из файла подкачки, а затем дать эту память в работу приложениям. 5 секунд назад сжатая или помещенная в файл подкачки память возвращается обратно!
  2. Приложению снова придется читать файлы с дисков, а не получить из Кэша, потому как Кэш ОС пустой! Привет любителям продлевать жизнь SSD дисков, которые используют любой повод поныть в комплекте с программами очистки памяти!
  3. Измёненная и Кэшированная память, — потенциально Свободная! Особенно освободители памяти радуются, наблюдая как большого объема Кэшированная память падает до 0. Вот это программа очистки!!! Вот это она могёт!!!

Если ОС от испуга запихнула в файл подкачки память важную для служб и драйверов, не удивляйся сильным просадкам производительности. В большинстве своём нормализовать работу ОС поможет только перезагрузка компьютера. И где тут производительность? 😂

А теперь представьте этот ад на колёсах в автоматическом режиме! Когда приложение заставляет ОС чистить память на основе тупых процентов количества занятой\свободной памяти, выставленных как триггер для запуска очистки памяти!

Это поведение ОС ты сможешь увидеть в моём видео.

Никогда не используй, особенно на регулярной основе, программы очистки памяти! Это имеет смысл лишь в ОПРЕДЕЛЕННЫХ обстоятельствах и ты в такие обстоятельства вряд ли попадешь.

Выводы:

  1. ОС «из коробки» обладает самыми лучшими встроенными инструментами по работе с памятью. Редким исключением могут считаться такие случае. У Windows 10 и выше подобных проблем нет.
  2. Понимая эти инструменты и механику их работы можно приступать к вдумчивой оптимизации своего компьютера. Потому как «оптимизация» может быть разной и зависит от условий использования компьютера и его ресурсов (в качественном и количественном смысле).
  3. Использовать сторонние инструменты по работе с памятью, — значит вмешиваться в естественный процесс работы ОС её же функциями, но в неподходящее время.

По сути: файл подкачки pagefile.sys

Файл подкачки — системный файл расположенный на диске. По-умолчанию он расположен в корне системного раздела (раздел где установлена ОС). Файлов подкачки может быть несколько или даже ни одного!

Сценарий работы файла подкачки:

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

Сценарий возврата памяти из файла подкачки:

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

Что может пойти не так? ОС может попасть в мёртвый цикл исполняя сразу первый и второй сценарий. Тогда ОС намертво зависает, но в большинстве случаев пользователи наблюдает другую картину. ОС достаточно физической памяти и размера файла подкачки, для постоянного исполнения первого и второго сценарий, тогда начинается сильнейшая просадка производительности. «Тормозит» абсолютно всё, потому как ОС постоянно то запихивает память в файл подкачки, то возвращает её обратно. Единственное что можно сделать в данном случае — купить плашку оперативной памяти. Увеличение объема файла подкачки не поможет.

Как посмотреть сколько файлов подкачки и на сколько они заняты?

Открой Power Shell и вставь туда часть кода моего скрипта, о котором речь пойдет в последующих статьях:

Clear-Host
$pageFiles = Get-WmiObject Win32_PageFileUsage
if($pageFiles -ne $null) {
[Int]$pageFilePeakUsage = 0
[Int]$pageFileSize = 0
[Int]$pageFileUsage = 0
Write-Host "Файлы подкачки:"
foreach($pageFileItem in $pageFiles) {
[String]$pageFileName = $pageFileItem.Name
if(($pageFileName -eq $null) -or ($pageFileName -eq "")) { $pageFileName = $pageFiles.Caption }
if(($pageFileName -eq $null) -or ($pageFileName -eq "")) { $pageFileName = $pageFiles.Description }
$pageFilePeakUsage += $pageFileItem.PeakUsage
$pageFileSize += $pageFileItem.AllocatedBaseSize
$pageFileUsage += $pageFileItem.CurrentUsage
Write-Host "$pageFileName, размер/используется/пик:" ($pageFileItem.AllocatedBaseSize).ToString("N0")"/"($pageFileItem.CurrentUsage).ToString("N0")"/"($pageFileItem.PeakUsage).ToString("N0") "Мб"
}
Write-Host "Всего размер/используется/пик:" ($pageFileSize.ToString("N0"))"/"($pageFileUsage.ToString("N0"))"/"($pageFilePeakUsage.ToString("N0")) "Мб"
}
Результат работы кода, приведенного выше
Результат работы кода, приведенного выше

Всего — всего размер файла подкачки.

Используется — объем памяти файла подкачки, который занят в данный момент.

Пик — максимальное значение памяти файла подкачки, которое было занято с момента включения компьютера.

Создание группы сборщиков данных

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

Системный монитор — отличное приложение для диагностики компьютера. Его основная задача: на основе счётчиков, производить замеры всевозможных показателей.

Win-R → perfmon → Enter
Создание новой группы в разделе «Особые»
Создание новой группы в разделе «Особые»

Следуй мастеру создания и вводи такие же данные как на изображениях!

Создание новой группы в разделе «Особые»
Создание новой группы в разделе «Особые»

Добавьте для каждого файла подкачки следующие счётчики из группы «Файл подкачки»:

  1. % используется
  2. % используется (пик)

И один счётчик из группы «Память»: предел выделенной виртуальной памяти.

Добавление счётчиков и завершение работы мастера
Добавление счётчиков и завершение работы мастера

Задайте параметры ведения журнала:

Параметры ведения журнала
Параметры ведения журнала

Теперь о сути: каждые 10 минут счётчик будет собирать данные о файлах подкачки, а именно — количество занятой памяти в файле подкачки в момент сбора информации и пиковое (максимальное) значение занятой памяти в файле подкачки. Так как по-умолчанию при установке ОС размер файл подкачки выставляет сама ОС, то для подстраховки нужно записывать данные о максимальном объеме доступной виртуальной памяти.

Запусти группу сборщика данных «Файлы подкачки» вручную.

Запуск группы сборщика данных «Файлы подкачки» вручную
Запуск группы сборщика данных «Файлы подкачки» вручную

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

Win-R → taskschd.msc → Enter
Добавь новую папку «Пользовательские»
Добавь новую папку «Пользовательские»

Создай простую задачу:

Создание простой задачи в папке «Пользовательские»
Создание простой задачи в папке «Пользовательские»

Теперь следуй мастеру и изображениям.

Создание простой задачи
Создание простой задачи

Согласись на данный вопрос!

Глупая-глупая программа 😀
Глупая-глупая программа 😀

Остался финальный шаг создания задачи.

Финальный шаг
Финальный шаг

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

Настройка задачи
Настройка задачи

И последнее в настройке.

Ограничение запуска задачи 3мя днями
Ограничение запуска задачи 3мя днями

В поле «Срок действия» должна стоять сегодняшняя дата (на момент прочтения), а крайняя дата — плюс три дня. Можешь установить не три дня, а неделю, так на всякий случай.

Закрой окно свойств задачи, нажав на кнопу «Ок».

Теперь, до выхода следующей статьи, постарайся использовать свой компьютер по максимуму в обычном своём рабочем режиме. Данные собранные группой «Файлы подкачки» нам потребуются позже.

По сути: файл подкачки swapfile.sys

Всё то же самое, что и pagefile.sys, за тем исключением что работает с памятью UWP приложений. А точнее в данный файл попадает память остановленных UWP приложений.

UWP приложения — это приложения, как правило скачанные с Магазина. Примером встроенных UWP приложений могут служить: Камера, Карты, Фотографии, Видеоредактор и подобные. Их выгодно отличает пользовательский интерфейс от классических приложений.

Узнать объем рабочей и пиковой памяти в файле swapfile.sys пока невозможно.

Заключение

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

Почему важно ставить лайки и оставлять комментарии? Так я вижу, что мои труды продуктивны. Так я понимаю, что данная тема тебе нравиться и я буду её развивать. Я приветствую конструктивную критику, приветствую новые идеи, — потому пиши.

Я пишу статьи\снимаю видео, — ты оцениваешь их!

А на этом всё! Мне спасибо, я пошёл… 😊

-19