Vmmem windows 10 что это

Обновлено: 05.07.2024

date

26.10.2020

directory

Windows 10

comments

комментариев 14

Функция сжатия оперативной памяти в Windows 10 предназначена для ускорения работы (отзывчивости) системы за счет хранения части страниц в оперативной памяти в сжатом виде. Тем самым достигается уменьшение количества обращений на чтение и запись страниц памяти из медленного (по сравнению с RAM) файла подкачки на жестком диске. Нужные данные извлекаются из более быстрой оперативной памяти быстрее, даже с учетом того, что на их сжатие/декомпрессию тратятся дополнительные ресурсы процессора.

Особенности технологии «Сжатой памяти» в Windows 10

В Windows 10 Anniversary edition (1607) появился отдельный процесс Сжатая память (Memory Compression), скрытый от диспетчера задач. Получить информацию об этом процессе можно с помощью PowerShell командлета Get-Process:

Get-Process -Name "Memory Compression"

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
0 0 2184 53104 1 810,95 2388 0 Memory Compression

Get-Process -Name "Memory Compression"

Также информацию об использовании сжатой памяти системой можно получить с помощью диспетчера задач. Перейдите на вкладку Производительность (Performance), выберите раздел Память (Memory). Текущее значение использования сжатой памяти отображается в значении параметра Использование (сжатая). В моем примере используется 3 Гб памяти, из которой в сжатом виде хранится 230 Мб. Чтобы понять, какой объем данных получилось упаковать в сжатый блок, нужно навести мышкой на график Структура памяти:

Используется сжатой памяти (230 Мб). В сжатой памяти хранится примерно 1012 Мб данных, освобождая для системы 782 Мб памяти.

Как вы видите, уровень компрессии достигает почти 400%, так что экономия довольно большая.

В сжатой памяти хранится примерно 1012 Мб данных, освобождая для системы 782 Мб памяти

В большинстве случаев, если компьютер работает нормально и на нем установлен достаточный объём оперативной памяти, процесс «Сжатой памяти» работает отлично и не требует никакого вмешательства.

Процесс «Система и сжатая память» сильно грузит компьютер

Но иногда случается, когда процесс «Система и сжатая память» начинает довольно сильно грузить процессор или жесткий диск компьютера (вплоть до 100%, это видно в диспетчере задач), или же занимаеть в памяти слишком много места. Компьютер, при этом, естественно, начинает сильно тормозить и подвисать.

процесс Система и сжатая память занимает большую часть оперативной памяти

Что делать в этом случае?

драйвера ssd диска

    системы (опция Без файла подкачки), перезагрузите компьютер, включите файл подкачки (опция Автоматически выбирать размер файла подкачки) и еще раз перезагрузитесь.
  • Если проблема высокой загрузки процессом «Сжатая память» возникает только при выходе из режима сна или гибернации (а после перезагрузки пропадает), попробуйте скачать и установить с сайта производителя последние версии драйверов для ваших дисковых контроллеров (ACPI/ AHCI / RAID / SCSI), дисков и видеокарты. После чего желательно отключить автоматическое обновление драйверов.

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

Как отключить сжатую память в Windows 10

Если вы хотите проверить стабильность работы Windows 10 без использования функции «сжатой памяти», можно временно отключать эту функцию. Для этого, откройте консоль PowerShell с правами администратора. Проверим, включена ли сейчас опция «Сжатой памяти»:

Строка MemoryCompression : True указывает на то, что сжатая память включена.

Отключим сжатую память:

И перезагрузим компьютер

Disable-MMAgen - MemoryCompression - отключить сжатую память в Windows 10

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

Чтобы включить MemoryCompression, выполните команду:

Заключение

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

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


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

Невыгружаемый пул — утечка памяти в Windows 10

Одна из распространенных проблем пользователей Windows 10, особенно с сетевыми картами Killer Network (Ethernet и Wireless)— заполняющаяся оперативная память при работе в сети. Обратить на это внимание можно в диспетчере задач на вкладке «Производительность», выбрав RAM. При этом, заполняется невыгружаемый пул памяти.

Проблема в большинстве случаев вызвана неправильной работой сетевых драйверов в сочетании с драйверами монитора использования сети Windows 10 (Network Data Usage, NDU) и достаточно просто решается, о чем и пойдет речь в этой инструкции. В некоторых случаях, причиной утечек памяти могут быть и другие драйверы оборудования. Близкий по теме материал: Что такое память Кэшировано в Windows 10 и как очистить кэшированную память.

Исправление утечки памяти и заполнения невыгружаемого пула при работе в сети

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

Исправление проблемы с невыгружаемым пулом в реестре Windows 10

  1. Зайдите в редактор реестра (нажмите клавиши Win+R на клавиатуре, введите regedit и нажмите Enter).
  2. Перейдите к разделу
  3. Дважды нажмите по параметру с именем «Start» в правой части редактора реестра и задайте значение 4 для него, для отключения монитора использования сети.
  4. Закройте редактор реестра.

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

Если шаги, описанные выше, не помогли, попробуйте следующее:

  • Если драйвер сетевой карты и (или) беспроводного адаптера был установлен с официального сайта производителя, попробуйте удалить его и дать Windows 10 установить стандартные драйверы.
  • Если драйвер был автоматически установлен Windows или был предустановлен производителем (и система после этого не менялась), попробуйте скачать и установить последнюю версию драйвера с официального сайта производителя ноутбука или материнской платы (если это ПК).

Заполняемый невыгружаемый пул оперативной памяти в Windows 10 не всегда бывает вызван драйверами именно сетевой карты (хотя чаще всего) и если действия с драйверами сетевых адаптеров и NDU не приносят результата, можно прибегнуть к следующим шагам:

  1. Установка всех оригинальных драйверов от производителя на ваше оборудование (особенно если на данный момент времени у вас установлены драйверы, автоматически установленные Windows 10).
  2. Использование утилиты Poolmon из состава Microsoft WDK для определения драйвера, вызывающего утечку памяти.

Как узнать, какой драйвер вызывает утечку памяти в Windows 10 с помощью Poolmon

Невыгружаемый пул в диспетчере задач Windows 10

Выяснить конкретные драйверы, приводящие к тому, что невыгружаемый пул памяти растет можно с помощью инструмента Poolmoon, входящим в состав Windows Driver Kit (WDK), скачать который можно с официального сайта Майкрософт.

Дальнейший путь — выяснить по именам файлов драйверов (с помощью Google, например), к какому оборудованию они относятся и пробовать установить, удалить или откатить в зависимости от ситуации.

image

Программное обеспечение, используемое в статье (операционные системы с патчами от августа 2019):

Windows 10, build 1903 x64

Windows Server 2019

Windows Server 2016

Visual Studio 2019

PyKd плагин для WinDBG

Термины и определения:

- WDAG – Windows Defender Application Guard.

- Full VM (виртуальная машина) – обычная полноценная виртуальная машина, созданная в Hyper-V manager. В отличие от контейнеров WDAG, Windows Sandbox, docker в режиме изоляции Hyper-V.

- Root ОС – операционная система, в которой установлена серверная часть Hyper-V.

- Гостевая ОС – операционная система, которая работает в контексте эмуляции Hyper-V, в т.ч. используя виртуальные устройства, предоставляемые гипервизором. В контексте статьи, это могут быть как Full VM, так и контейнеры.

- TLFS – документ Hypervisor Top-Level Functional Specification 5.0.

- GPA (guest physical address) – физический адрес памяти гостевой операционной системы.

- SPA (system physical address) – физический адрес памяти root ОС.

- Гипервызов (hypercall) – сервис гипервизора, вызываемый посредством выполнения команды vmcall с указанием номера гипервызова.

Python-скрипт для вывода информации о GPAR и MBlock-объектах

Технологии виртуализации компании Microsoft давно и прочно вошли в нашу жизнь как в серверном сегменте, так и в клиентских ОС. Они используются не только для запуска гостевых ОС, но и для работы защитных механизмов, таких как Virtualization Based Security (VBS), Credential Guard, Device Guard, Hypervisor Code integrity (HVCI).

Компонент Hyper-V впервые появился в Windows Server 2008 и предоставлял достаточно простые на тот момент возможности по созданию гостевых операционных систем. Но Microsoft активно развивает эту технологию, и в настоящее время она глубоко интегрирована в ядро операционной системы Windows. Корневым компонентом является модуль hvix64.exe для процессоров Intel, hvax64.exe для процессоров Amd и hvaa64.exe для ARM.

В 2018 году Microsoft выпустила WDAG, которые представляет из себя надстройку к браузеру, запускающую браузер Microsoft Edge в контейнере Hyper-V со slim RDP-фронтендом, что создаёт ощущение, как будто вы работаете непосредственно в браузере. Подобные технологии очень давно использовала компания Citrix в своих терминальных решениях. У меня появилось желание понять, как же работает WDAG.

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

Сперва я планировал написать отдельную статью про контейнеры Hyper-V, но учитывая количество компонентов (см. скриншот), провести полное исследование слишком трудоёмко.


Сам гипервизор находится в изолированной области памяти, память root-ОС отображается 1 в 1, возможность чтения памяти средствами гипервизора с помощью гипервызова HvReadGpa отсутствует (отдельная блокировка в коде для раздела с идентификатором, равным 0, т.е. для root-ОС). Основные моменты работы подсистемы памяти описаны в TLFS.

Так что основной упор будет сделан на методы доступа к памяти гостевых ОС. Будут описаны механизмы работы памяти для обычных виртуальных машин Microsoft и контейнеров WDAG и Windows Sandbox. Docker будет упомянут кратко и только в контексте Hyper-V, т.к. это отдельная экосистема, которой и так посвящено огромное количество ресурсов.

В ходе исследования был создан драйвер hvmm.sys, который может читать содержимое памяти гостевой ОС напрямую из root-ОС минуя интерфейсы гипервизора и драйвера vid.sys. Драйвер hvmm.sys был интегрирован в проект LiveCloudKd.

В целом статья представляет материал в стиле Windows Internals и описывает то, как работает память ОС. Зачем? Чтобы узнать, как работает достаточно популярная технология Microsoft. Также может пригодиться специалистам, увлекающимся форензикой и разбирающим дампы памяти. Andrea Allievi готовит детальное описание актуальной версии Hyper-V для 2-й части 7-й версии книги Windows Internals, но пока книга не была издана, можно будет почитать эту статью и кратко ознакомиться с архитектурой памяти.

К сожалению, информация о структурах в символах для vid.sys отсутствует, поэтому название таких структур в статье выполнено произвольно исходя из сигнатур, которые в них присутствуют. Andrea Allievi упоминал “bucket” структуры в своей презентации, но как конкретно они реализованы в драйвере vid.sys – неизвестно. Если в следующей части Windows Internals будет детальное описание этих структур, то наименования будут исправлены, технические детали работы от этого не изменятся.

Работа с памятью Full VM и контейнеров посредством прямого доступа

Основным процессом, который управляет работой виртуальной машины, является vmwp.exe. Его запускает vmms.exe в случае запуска полноценной виртуальной машины, или vmcompute.exe в случае запуска контейнеров. При запуске процесс vmwp.exe через интерфейс vid.dll обращается к интерфейсам гипервизора – гипервызовам (hypercalls). Я собрал статистику гипервызовов для VM Windows Server 2019, контейнера Docker в режиме изоляции Hyper-V (образ nanoserver:1809) и контейнера WDAG. WDAG-контейнер генерирует слишком много гипервызовов, поэтому из-за торможения, вызванным записью результатов отладчиком, контейнер сразу начал выключаться после включения (управляющее приложение контролирует таймауты выполнения некоторых процедур), в связи с чем результаты по WDAG содержат общий показатель (надеюсь попробовать dtrace, относительно недавно доработанный под Windows, для сбора подобной статистики – по идее, он должен снизить издержки на запись собранных данных). Отдельно зафиксирован показатель по выключению, так что порядок оценить можно. По сравнению с обычными виртуальными машинами он достаточно большой:


Функция winhvr!WinHvMapGpaPagesFromMbpArrayScanLargePages. В Rdx указывается номер страницы, в rsi – размер (так же в страницах).

Просмотр запущенных приложений в Диспетчере задач — это первое, с чего всякий пользователь начинает поиск причин медленной работы компьютера. И вроде бы и с процессами всё нормально, и с дисками, но на вкладке «Производительность», если выбрать «Память», можно увидеть, что она практически вся занята и уходит в невыгружаемый пул памяти. Это означает, что имеет место утечка памяти и неважно какой объем ОЗУ имеется на ПК, в невыгружаемый пул она может уйти вся без остатка.

Диспетчере задач

Производительность

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

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

Неполадка может показаться серьёзной, на самом же деле она легко устраняется. Способов исправления существует несколько. Самый простой заключается в отключении службы мониторинга сетевой активности. Для этого откройте командой regedit редактор реестра и перейдите по следующему пути:

Найдите в правой колонке окна редактора DWORD -параметр Start и установите в качестве его значения 4.

Regedit

Эту же настройку следует проверить в ключе:

Вместо применения твика реестра можно воспользоваться командной строкой или диалоговым окошком Run . Откройте консоль от имени администратора и выполните такую команду:

Результат будет аналогичным.

Консоль

В обеих случаях для вступления новых настроек в силу потребуется перезагрузка компьютера. После этого утечка в невыгружаемый пул памяти должна прекратиться. Это самый простой и эффективный способ, но есть также и другие варианты. Например, можно установить приложение Killer Network Manager, найти в его настройках опцию управления пропускной способностью и отключить её.

Если драйвера для сетевой карты скачивались с сайта производителя, попробуйте их удалить и дать Windows 10 установить свои драйвера. Если проблема наблюдается с драйверами Microsoft, поступаем наоборот, скачиваем для карты Killer Network драйвера с официального ресурса производителя и устанавливаем их. Выше упоминалось, что утечку памяти могут вызывать не только сетевые драйвера. Определить проблемный драйвер можно с помощью утилиты Poolmon, но для этого потребуется установить набор инструментов разработки драйверов для Windows.

Скачав WDK для вашей версии Windows 10 с официальной страницы Microsoft.

WDK

Перейдите в Проводнике по адресу C:\Program Files (x86)Windows Kits\10\Tools\x86 (или x64) и запустите оттуда исполняемый файл утилиты Poolmon.exe .

Проводник

Нажмите сначала латинскую клавишу P , а затем B .

Poolmon

Это действие оставит и отсортирует только те записи, которые используют невыгружаемый пул (Type Nonp) . Найдите в списке элементы, занимающие больше всего байт в памяти и запишите их имена (столбец tag) .

Теперь откройте командную строку от имени администратора, перейдите в расположение C:\Windows\System32\drivers и выполните команду:

findstr /m /l /s Name *.sys

Где Name — имя, то есть тэг записи.

Findstr

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

Читайте также: