Выгружаемый пул невыгружаемый пул что это
Что такое * выгружаемая * память ядра?
Что такое постраничный память ядра, как указано в диспетчере задач Windows? Это связано с файлом подкачки?
Я предполагал, что это часть памяти ядра, хранящаяся на диске в файле подкачки, но я протестировал отключение файла подкачки и (после перезапуска) все же обнаружил, что выгружаемая память ядра не равна нулю!
Выгружаемые и невыгружаемые пулы служат ресурсами памяти, которые операционная система и драйверы устройств используют для хранения своих структур данных.
Ядро и драйверы устройств используют невыгружаемый пул для хранения данных, к которым можно получить доступ, когда система не может обрабатывать ошибки страниц.
Выгружаемая память ядра может быть записана в файл подкачки, если он существует.
Невыгружаемая память ядра никогда не будет записана в файл подкачки. «Пул невыгружаемой памяти» необходим для предоставления памяти в ситуациях, когда Windows не может использовать ошибки страниц, например, когда она обрабатывает прерывания или отложенные вызовы процедур (что связано с прерываниями).
Что такое «запоминаемая память», «кэшированный», «выгружаемый», «невыгружаемый пул» и как они отличаются от «используемой памяти»
Я думал добавить немного оперативной памяти в мой компьютер, поскольку в наши дни это происходит медленно, поэтому я зашел на панель задач, чтобы посмотреть статистику использования памяти, но мне было трудно угадать реальное значение некоторых параметров управления памятью. так
Q2: Насколько я знаю, ядро имеет сложный алгоритм управления памятью, так что, если у меня в оперативной памяти моего ноутбука отображается свободная память, могу ли я сделать вывод, что моей физической памяти достаточно?
3 ответа
Ответ на вопрос 1:
Ответ на вопрос 2:
Проще говоря, в Windows «память» может поддерживаться либо физической ОЗУ, либо файлом подкачки (на диске). Файл (ы) подкачки используется для многих целей, включая освобождение физического ОЗУ для нечасто доступной программы. Это на несколько порядков медленнее, чем физическое ОЗУ, потому что оно поддерживается диском, вращающимся или нет.
Если вашей системе не хватает памяти, возможно, что приложения, которые вы активно используете, будут перетекать на диск, и ваша система значительно замедлится.
Как можно увидеть из ответа 1, по этим цифрам совсем не легко определить, достаточно ли у вас памяти или нет.
Я бы предложил следующий метод, чтобы определить, достаточно ли у вас памяти или нет:
У вас есть пара лекарств:
Вопрос 1:
Что такое выделенная память, кэшированный, выгружаемый, невыгружаемый пул и чем они отличаются от используемой памяти.
Кэшируемая память: память обычно встроена в процессор. Доступ к этой памяти намного быстрее, так как она настолько близка, насколько вы можете добраться до процессора, который ее использует.
Не постраничный: просто противоположность постраничной памяти. Это означает, что это будет общее количество памяти, исключая количество в памяти с подкачкой.
Вопрос 2:
Насколько я знаю, ядро управляет памятью сложным образом, поэтому могу ли я сделать вывод, что, если у меня в оперативной памяти моего ноутбука свободная память, значит, моей памяти достаточно?
Как правило, хорошо убедиться, что у вас достаточно физической памяти для выполнения самой интенсивной задачи, для которой вы будете использовать свой компьютер. Как объяснялось выше, память подкачки технически выполнит работу, но будет намного медленнее физической памяти. Я хотел бы предложить вам отслеживать уровни памяти, открывать и запускать наиболее интенсивные настройки, которые, по вашему мнению, вы когда-либо реально выполняли, и видеть, сколько памяти используется.
Принимая их не в том порядке, в котором вы просили.
(Примечание: это все еще в процессе. Я, вероятно, настрою и отредактирую это в течение следующих нескольких дней. И я добавлю скриншоты.)
(Обратите внимание на второе: я понимаю, что это долго. Это примерно столько, сколько я могу сделать, хотя бы пытаясь ответить на большинство вопросов, которые обычно возникают из более коротких ответов. Для сравнения, глава «Управление памятью» в Windows Internals около 200 страниц, этого достаточно, чтобы сделать книгу приличного размера сама по себе. Если вы действительно хотите изучить этот материал, есть еще одна книга (которую я рекомендую) под названием » Что делает страницу», которая углубляется в еще больше деталей. 600 страниц. Как я упоминал выше, я, вероятно, буду редактировать это в течение следующих нескольких дней, но не ожидайте, что оно станет короче!)
В использовании
Внимание: это не тот объем виртуальной памяти, к которому можно получить доступ, не вызывая ошибки страницы! Это большее число. Многие разные виртуальные страницы могут быть сопоставлены с одной и той же физической страницей.
Примечание. Физические страницы ОЗУ могут находиться в нескольких рабочих наборах процесса одновременно. Это означает, что сложение размеров рабочих наборов всех процессов даст вам число, которое больше, чем фактический объем ОЗУ, который они используют. Однако общее количество использованных страниц правильно учитывает общие страницы; то есть он не удваивает или не подсчитывает их.
Предостережение. Термин » Используется» может вводить в заблуждение, поскольку страницы ОЗУ в списках «Резерв» и «Модифицированные», вероятно, также «используются», даже если к ним нельзя получить доступ без ошибок страниц, и они не находятся ни в одном рабочем наборе. Эти два списка будут объяснены чуть позже.
nb: во многих обсуждениях будут затронуты процессы и их рабочие наборы. Код режима ядра ОС Windows и данные также хранятся в виртуальной памяти, и большая их часть доступна для просмотра страниц. То есть он не должен постоянно находиться в оперативной памяти, равно как и код приложения и данные. Хотя это и не сам процесс (несмотря на так называемый «системный» процесс), существует рабочий набор для отслеживания «допустимых» для ОС страниц, или, точнее, для адресного пространства ядра. Фактически, начиная с Windows 7 и более поздних версий, рабочий набор системы был разделен на четыре рабочих набора (для различных типов кодов и данных, доступных для просмотра страниц), в основном по соображениям производительности. Почти все, о чем я говорю относительно рабочих наборов, относится к рабочим наборам ОС, а также к процессам, но я не собираюсь добавлять «или один из рабочих наборов ОС» каждый раз, когда упоминаю рабочий набор процессов,
Имеется в наличии
Вы не спрашивали об этом, но это важно. Доступна вся оперативная память, которая может быть назначена для нового использования (например, процессу, отличному от того, который использовался ранее, или даже новой виртуальной странице в том же процессе), без удаления ее из рабочего набора и без сохранить его содержимое где-нибудь. (Потому что содержимое уже где-то сохранено, если оно важно).
Доступно не отображается на текущей вкладке Производительность диспетчера задач, Панель памяти. Это видно на вкладке Память монитора ресурсов. Это сумма списков ожидания, свободных и нулевых страниц. Подробная информация о них.
Сохраненная копия
Кэшированная часть 1: список резервных страниц (включая SuperFetch)
Умная вещь в SuperFetch состоит в том, что страницы, используемые SuperFetch, не удаляются из списка резервных страниц, и поэтому могут быть переназначены за очень короткое время, как и все остальное в SPL. И они все еще считаются частью Cached. И как часть Доступно. Так что SuperFetch на самом деле не «использует» ОЗУ! Или, по крайней мере, это не убирает из » Доступно «, и не способствует » В использовании «.
SuperFetch по умолчанию отключен в системах с SSD для диска ОС. Список ожидания по-прежнему используется, как описано здесь, в качестве кэша страниц.
Кэшированная часть 2: измененный список страниц
Начиная с Windows 8 и более поздних версий, счетчик Cached также включает физические страницы, которые находятся в списке измененных страниц. (MPL существует вечно; все, что нового, это считать его частью Cached.) Как и SPL, размер MPL можно увидеть на вкладке «Память» в Resource Monitor, хотя обычно он должен быть очень маленьким или нулевым.
MPL похож на SPL, за исключением того, что он используется для страниц, содержимое которых было изменено, пока они были резидентными. (Это записывается в MMU ЦПУ.) При удалении из своих рабочих наборов такие страницы перемещаются в MPL, а не в SPL. Потоки «Модифицированного средства записи страниц» в процессе «Система» периодически просыпаются, копируют содержимое этих страниц в соответствующие хранилища (либо файл страницы, либо для страниц с файловой поддержкой, их соответствующие файлы), а затем перемещают их в список резервных страниц, когда они становятся частью Доступного и обрабатываются так же, как если бы они были помещены в SPL. Они не были частью Available в MPL, потому что они не могут быть переназначены для чего-то еще, пока их содержимое не будет сохранено где-либо.
MPL также не считается частью использования.
Обратите внимание, что если вы (по глупости и вопреки добрым советам) отключили свой файл подкачки, система никогда не сможет записывать измененные страницы, подкрепленные файлом подкачки. Обычным симптомом здесь является нелепо большой MPL, который может вызвать нехватку доступной оперативной памяти и, следовательно, «перегрузку страниц», когда ОС тратит больше времени на копирование страниц в оперативную память и из нее, чем на выполнение работы, которую вы хотите выполнить.
Функция «Сжатая память» в Windows 10 несколько изменила часть «записи в файл подкачки»; Я не буду вдаваться в подробности, поскольку это не влияет на счетчики, о которых мы говорим.
Кэшированная часть 3: Кэш файловой системы
Файловый кеш также играет важную роль в поддержке доступа к файлам на границах, которые не выровнены по секторам. Если вы открываете файл с опцией «без кэширования», все ваши операции чтения и записи должны быть кратны размеру сектора диска и должны начинаться с границ сектора. Файловый кеш позволяет вам читать и записывать только один байт за раз (по крайней мере, что касается вызовов API).
Не выгружаемые и выгружаемые бассейны
Счетчики Paged и Nonpaged предоставляют виртуальные размеры двух областей адресного пространства ядра, которые называются «пулы памяти». Оба используются для довольно небольших краткосрочных выделений памяти (обычно не более 1 МБ каждый), которые необходимы различным компонентам кода режима ядра Windows, в том числе драйверам устройств. Код режима ядра использует их способом, очень похожим на тот, который используется прикладными программами, использующими «кучи». (Причина, по которой Windows называет их пулами, а не кучами, является исторической.)
Весь «невыгружаемый» пул и «выгружаемая» или «резидентная» часть выгружаемого пула являются частью того, что считается «используемым».
Внимание: Nonpaged не является подстраницей Paged! Это отдельные виртуальные распределения. Таким образом, вполне возможно, например, что невыгружаемый пул будет отображаться с большим размером, чем выгружаемый, но не часто.
Внимание: ни в коем случае это не общий объем виртуального адресного пространства ядра.
Совершенные
Фиксированные счетчики относятся к конкретному типу виртуальной памяти. Чтобы действительно объяснить это, я должен объяснить другие типы.
Каждая страница виртуального адресного пространства может находиться в одном из пяти состояний: неиспользовано, не доступно для страницы, сопоставлено, зарезервировано и зафиксировано.
«Nonpageable», «Committed» и «mapped» виртуальные адресные пространства соответствуют виртуальной памяти и могут быть успешно доступны (прочитаны или записаны), возможно, с ошибкой страницы на этом пути; «Неиспользованные» и «зарезервированные» не могут быть доступны.
«Неразмещаемая» виртуальная память всегда физически «резидентна» и является почти исключительно областью кода режима ядра Windows. Это часть «в использовании». Уже обсужденный пул невыгружаемых страниц является примером нестраничной виртуальной памяти.
Предостережение. Несмотря на то, что виртуальная память без страниц всегда является резидентной, мы по-прежнему считаем ее «виртуальной», поскольку мы по-прежнему ссылаемся на нее по виртуальным адресам. Он также имеет все другие свойства виртуальной памяти, за исключением того, что он всегда «действителен», поэтому никогда не вызовет ошибку страницы при доступе.
Сопоставленные регионы могут быть общими для всех процессов. Если сопоставление настроено для доступа на чтение / запись (обычно это не делается для файлов кода!), То изменения в сопоставленном vas записываются обратно в соответствующие сопоставленные файлы.
Тем не менее, существует возможность создания «отображаемой области на основе файла подкачки», которая может быть общей для процессов, как и любая другая отображаемая область, но изменения в которой не будут сохранены где-либо после того, как все процессы отобразят ее.
«Зафиксированное» виртуальное адресное пространство также можно переносить на / с диска. Разница между этим и «mapped» заключается в том, что резервным хранилищем «Committed» vas, если это необходимо, является файл подкачки (если он у вас есть, что вам, безусловно, следует).
Он также включает несколько других вкладов: в основном невыгружаемые и выгружаемые пулы и любые сопоставленные области, которые сопоставляются при копировании и записи. Этот номер часто называют фиксацией.
Резидентное подмножество платы за коммит является частью «в использовании». Обратите внимание, что даже если у вас нет файла подкачки (и если у вас его нет, что с вами не так?), Это не обязательно то же самое, что плата за коммит. С одной стороны, если вы фиксируете виртуальную память, но не получаете к ней доступ, части, к которым у вас нет доступа, никогда не будут занимать места в хранилище. Также возможно, что выделенная память будет удалена из рабочего набора и помещена в измененный список страниц. Обычно только часть выделенной памяти будет занимать оперативную память.
Диспетчер задач не может определить подмножество выделенной памяти в ОЗУ. Однако инструмент SysInternals «RAMmap» может показать это.
Добавление всего этого
Доступно + В использовании + Модифицированные складываются в общий объем оперативной памяти, используемой ОС.
общий объем оперативной памяти, используемой операционной системой, плюс объем ОЗУ с аппаратным резервированием должен равняться общему объему установленной оперативной памяти.
Доступно равно списку резервных страниц, а также списку бесплатных страниц и списку нулевых страниц.
Свободный, отображаемый на вкладке Память монитора ресурсов, представляет собой сумму списка нулевых страниц и списка свободных страниц.
(Я намеренно пропустил дальнейшее обсуждение списка нулевых страниц, потому что это не важно для счетчиков, о которых спрашивают.)
Cached = Резервный список страниц (некоторые из которых используются SuperFetch), плюс (для Windows 8 и более поздних версий) Модифицированный список страниц, плюс (для более ранних версий Windows, которые еще предстоит точно определить) вставленная или резидентная часть системный файловый кеш.
Предостережение: поскольку список страниц в режиме ожидания является частью как «Доступно», так и «Кэшировано», вполне возможно добавить «Доступно» и «Кэшировано» и получить общее количество, превышающее общий объем ОЗУ! Эти цифры просто не предназначены для сложения.
Вкладка «Память» в Resource Monitor отображает сумму свободных и нулевых значений в виде единого числа, помеченного как «Свободный» Монитор производительности может показать вам эти размеры индивидуально.
Достаточно ли у меня оперативной памяти?
«Насколько я знаю, ядро управляет памятью сложным образом, поэтому могу ли я сделать вывод, что, если у меня в оперативной памяти моего ноутбука свободная память, значит, моей памяти достаточно?»
Общая частота отказов является расширенной частью жестких отказов и не столь интересна. Он включает в себя «программные ошибки страниц», которые не требуют чтения с диска и поэтому занимают намного меньше времени. (Трудно сказать, сколько времени они занимают, но я бы оценил его как максимум в несколько сотен инструкций.) К ним относятся ошибки, разрешенные в резервных и измененных списках страниц, ошибки в общих страницах, которые уже существуют для один или несколько других процессов, и «требуют нуля» сбои, которые происходят при первой ссылке на частные страницы. Не удивляйтесь, если вы увидите тысячи ошибок страниц в секунду. Эта страница, считываемая с диска, сильно замедляет работу (даже если ваш диск SSD).
Но как насчет «Доступно»? или «бесплатно»?
«Доступен» включает в себя список «Ожидание» и так же готов к назначению для нового использования, как и «Свободный», поэтому, если у вас много «Доступных», вам не нужно больше беспокоиться о том, что он не «Свободный».
И снова я упомяну: SSD заставляет проблемы с жесткими страницами идти намного быстрее, чем если бы они шли на вращающийся диск. И они пойдут быстрее, если это SSD M.2 PCIe. Они все еще намного медленнее, чем мягкие неисправности.
Еще одна вещь: вы часто будете слышать утверждение, что «у вас никогда не будет достаточно оперативной памяти». Что ж, это правда, что (за исключением некоторых необычных обстоятельств) добавление ОЗУ в вашу систему никогда не вызовет проблем с производительностью. Однако вы наверняка можете потратить слишком много денег на оперативную память. Существует точка уменьшения отдачи, после которой добавление ОЗУ не ускорит вашу систему. Где этот момент зависит от вашей рабочей нагрузки и от различных аспектов вашего оборудования (особенно от того, есть ли у вас SSD или вращающийся диск). Как я уже сказал выше, избавление от вашего файла подкачки не устраняет подкачку на диск и с диска, потому что сопоставленные файлы все еще существуют и все еще читаются и записываются с помощью подкачки. Таким образом, избавление от вашего файла подкачки (что вы не должны делать в любом случае) не означает, что вы можете перестать беспокоиться о том, насколько быстро работает ваш диск.
Почему растет невыгружаемый пул памяти в Windows?
На компьютерах и серверах Windows могут возникать проблемы с исчерпанием свободной памяти, вызванной утечкой некого системного драйвера, хранящего свои данные в невыгружаемом пуле памяти системы. Невыгружаемый пул памяти (Non-paged memory) – это данные в оперативной памяти компьютера, используемые ядром и драйверами операционной системой, которая никогда не выгружается на диск (в своп/ файл подкачки), т.е. всегда находится в физической RAM памяти.
Текущий размер невыгружаемого пула памяти можно увидеть в диспетчере задач Windows на вкладке Perfomance (Производительность) в разделе Memory (Память). На скриншоте ниже видно, что практически вся память на сервере занята, и большая часть ее относится к невыгружаемому пулу 4,2 Гб (Non-paged pool / Невыгружаемый пул). В нормальном состоянии размер невыгружаемого пула редко превышает 200-400 Мб. Большой размер невыгружаемого пула часто указывает на наличии утечки памяти в каком-то системном компоненте или драйвере.
При утечке памяти в невыгружаемом пуле на сервере, в системном журнале событий появится события:
В подавляющем большинстве случаев причиной такой утечки памяти является проблема со сторонними драйверами, установленными в Windows. Как правило, это сетевые драйвера. Обратите внимание, как ведет себя пул при скачивании больших файлов (скорее всего он при этом быстро растет).
Максимальный размер невыгружаемого пула в Windows:
Для очистки пула помогает только перезагрузка, и, если для домашнего компьютера это еще может быть приемлемо, то на круглосуточно работающем сервере желательно найти нормальное решение.
Установка последних версий драйверов сетевых адаптеров
Попробуйте скачать и установить последние версии драйверов ваших сетевых адаптеров с сайта производителя.
Если у вас в Windows включено автоматическое обновление драйверов, убедитесь не начались ли проблемы после установки новых драйверов. Попробуйте откатить версию драйвера на более старую и проверить, воспроизводится ли проблема. Если проблема решилась, отключите авто обновление драйверов.
Отключение драйвера мониторинга сетевой активности Windows
Достаточно часто причиной утечки памяти в невыгружаемый пул является несовместимость драйвера мониторинга сетевой активности (Network Data Usage — NDU, %WinDir%\system32\drivers\Ndu.sys) с драйверами сетевого адаптера компьютера (чаще всего конфликтуют драйвера для сетевых карт Killer Network и MSI). Данный сервис можно отключить без особых потерей функционала Windows.
Службу можно остановить командной:
sc config NDU start= disabled
После внесения изменений нужно перезагрузить компьютер
Отключение роли Hyper-V
В некоторых случаях утечку памяти в невыгружаемый пул вызывает установленная роль Hyper-V. Если эта роль не нужна, рекомендуем отключить ее.
Команда для Windows 10:
Поиск драйвера, вызвавшего утечку памяти с помощью Poolmon
Если описанные выше способы не помогли, можно попробовать определить драйвер, который вызвал утечку памяти в невыгружаемый пул.
Для этого нам понадобится консольная утилита Poolmoon.exe, входящая в комплект разработки Windows Driver Kit (WDK). Скачайте с сайта Microsoft и установите WDK для вашей версии Windows и запустите утилиту Poolmon.exe (в WDK для Windows 10 утилита находится в каталоге C:\Program Files (x86)\Windows Kits\10\Tools\ ).
После запуска утилиты Poolman.exe нажмите клавиши P. Во втором столбце останутся теги процессов, которые используют невыгружаемую память (атрибут Nonp) Затем нажмите клавишу B, чтобы выполнить сортировку по столбцу Bytes.
В левом столбце указаны теги драйверов. Ваша задача определить файл драйвера, использующего этот тег. В нашем примере видно, что больше всего RAM в невыгружаемом пуле используют драйвера с тегами Nr22, ConT и smNp.
Вы должны проверить драйвера на наличие найденных тегов с помощью утилиты strings.exe (от Sysinternals), с помощью встроенной команды findstr или с помощью PowerShell.
Следующие команды должны найти файлы драйверов, связанные с найденными вами тегами. данными процессами можно командами:
findstr /m /l /s Nr22 %Systemroot%\System32\drivers\*.sys
findstr /m /l /s ConT %Systemroot%\System32\drivers\*.sys
findstr /m /l /s smNp %Systemroot%\System32\drivers\*.sys
Также можно воспользоваться PowerShell:
Обратите внимание, что имя драйвера теперь отображается в столбце Mapped_driver.
Если поиск не дал результатов, проверьте возможно утечка памяти вызвана не системным процессом. Запустите Task Manager, перейдите на вкладку Details, добавьте колонку NP Pool и найдите процессы с большим размером памяти в невыгружаемом пуле.
Таким образом, мы получили список файлов драйверов, которые могут оказаться причиной проблемы. Теперь по именам файлов нужно определить, к каким драйверам и системным компонентам они относятся. Для этого можно воспользоваться утилитой sigcheck от Sysinternals.
Утилита возвращает имя драйвера, его свойства и информацию о версии.
Теперь можно попытаться удалить/обновить/переустановить проблемный драйвер или службу.
Если утечка памяти привела к BSOD, вы можете определить проблемный драйвер по файл дампа памяти.
Данная инструкция применима как для Windows Server 2019/2016/2012R2, так и для клиентских Windows 10, 8.1.