Какая часть оперативной памяти используется кэшем системных файлов в Windows?

Согласно общим представлениям о кеше страницы и этот ответ кэш системных файлов по существу использует всю неиспользуемую оперативную память любым другим процессом. Это, насколько мне известно, относится к кэшу страниц в Linux.

Поскольку понятие «свободная оперативная память» в Windows немного размыто, мой вопрос: какую часть оперативной памяти использует кэш системных файлов? Например, это то же самое, что и "Доступная оперативная память" в диспетчере задач?


person Benoit Sanchez    schedule 13.11.2018    source источник
comment
Я считаю, что, начиная с Windows Vista, кеш файлов обрабатывается как рабочий набор обычного процесса. Это означает, что ядро ​​использует для этого память в соответствии с той же эвристикой, что и для выгрузки памяти пользовательского процесса. Это немного расплывчато, но это то, что я знаю.   -  person usr    schedule 13.11.2018
comment
Большое спасибо. Начиная с вашего комментария, я мог бы немного изучить и понять, как это работает, чтобы наконец написать свой собственный ответ.   -  person Benoit Sanchez    schedule 14.11.2018


Ответы (2)


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

Файловый кеш не является процессом, указанным в списке процессов в диспетчере задач. Однако, начиная с Vista, его память управляется как процесс. Поэтому я немного объясню управление памятью для процессов, причем файловый кеш является частным случаем.

В Windows оперативная память, используемая процессом, имеет по существу два состояния: «Активное» и «Резервное».

  • «Активная» оперативная память отображается в диспетчере задач и мониторе ресурсов как «Используется». Это также оперативная память, отображаемая для каждого процесса в диспетчере задач.
  • «Резервная» оперативная память отображается в мониторе ресурсов глобально и для каждого процесса с RAMMap< /а>.

"Ожидание" + "Свободная" оперативная память - это то, что в диспетчере задач называется "Доступно". «Свободная» оперативная память, как правило, близка к 0 в Windows, но вы можете осмысленно считать, что резервная оперативная память также свободна.

Резервная оперативная память считается «временно не используемой процессом». Это часть оперативной памяти, которая будет использоваться для предоставления новой памяти процессам, которым она нужна. Но он по-прежнему принадлежит процессу и может быть использован напрямую, если процесс-владелец внезапно получит к нему доступ (что система считает маловероятным).

Таким образом, файловый кэш имеет «активную» оперативную память и «резервную» оперативную память. «Активная» оперативная память — это кеш для данных, к которым недавно обращались. «Резервная» оперативная память — это кеш для данных, доступ к которым был получен некоторое время назад. «Активная» оперативная память файлового кеша обычно относительно невелика. Резервная оперативная память файлового кэша чаще всего представляет собой всю оперативную память вашего компьютера: Общая оперативная память - Активная оперативная память всех процессов. Действительно, другие процессы редко имеют резервную оперативную память, потому что она имеет тенденцию переходить в файловый кеш, если вы довольно много выполняете дисковый ввод-вывод.

Это информация, отображаемая RAMMap для загруженного сервера, выполняющего много операций ввода-вывода и вычислений: < img src="https://i.stack.imgur.com/4PoSS.png" alt="введите здесь описание изображения">

Файловый кеш — это вторая строка под названием «Отображенный файл». Посмотрите, что большая часть из 32 ГБ находится либо в Активной части других процессов, либо в Резервной части файлового кеша.

Итак, наконец, да, ОЗУ, используемое файловым кешем, — это, по сути, ОЗУ, отображаемое как доступное в диспетчере задач. Если вы хотите измерить с большей уверенностью, вы можете использовать RAMMap.

person Benoit Sanchez    schedule 14.11.2018

Ваш ответ не совсем верен.

Файловый кеш, также называемый системным кешем, описывает диапазон виртуальных адресов, имеет физический рабочий набор, отслеживаемый MmSystemCacheWs, и этот рабочий набор является подмножеством. всех физических страниц отображаемых файлов в системе.

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

Существующие страницы, необходимые файловому кешу в ответ на чтение, становятся частью рабочего набора системы. Если страница в сопоставленном файле отсутствует, она выгружается и становится частью рабочего набора системы. Когда страница входит в несколько рабочих наборов (т. е. система и процесс или процесс и другой процесс), считается, что она находится в общем рабочем наборе в таких программах, как VMMap.

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

Когда диспетчеру системного кэша необходимо прочитать файл, он отображает представления файла размером 256 КБ за раз и отслеживает представление в объекте VACB. Процесс сопоставляет переменное представление файла, обычно размер всего файла, и отслеживает это представление в процессе VAD. Действие сопоставления представления заключается в простом заполнении PTE, указывающих на физические страницы, содержащие файл, который уже находится в резидентном месте, путем просмотра PTE-прототипа для этого диапазона в файле и просмотра того, что он содержит, и в случае, если PTE-прототип не указывает на физическую страницу, инициализируя PTE так, чтобы он указывал на прототип PTE, а не на страницу, на которую он указывает, и PTE остается недействительным, и эта ошибка будет устраняться по запросу на странице за страницей при чтении из представление действительно выполняется.

VACB отслеживают представления файлов размером 256 КБ, открытые диспетчером кеша, и диапазон виртуальных адресов этого представления, который описывает диапазон из 64 PTE, обслуживающих этот диапазон виртуальных адресов. Отсутствует виртуальная внешняя фрагментация или внешняя фрагментация таблицы страниц, поскольку все представления имеют одинаковый размер, и отсутствует физическая внешняя фрагментация, поскольку все страницы в представлении имеют размер 4 КБ. 256 КБ — это размер, потому что, если бы он был меньше, было бы слишком много объектов VACB (в 64 раза больше, занимающих место), а если бы он был больше, была бы большая внутренняя фрагментация из-за операций чтения и, следовательно, большие виртуальные объекты. загрязнение адресов, а также VACB использует младшие биты виртуального адреса для хранения количества операций ввода-вывода, которые в настоящее время выполняются в этом диапазоне, поэтому размер VACB должен быть увеличен на несколько бит, иначе он будет иметь возможность обрабатывать меньше параллельных операций ввода-вывода.

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

Что касается исполняемых образов, то они отображаются отдельно с отдельными прототипами PTE и отдельными физическими страницами, отдельной областью управления, отдельным сегментом и объектом подраздела на карту файла данных для файла. Процесс сопоставляет изображение, но ядро ​​также сопоставляет изображения для ntoskrnl.exe, hal.dll в большие страницы, а затем образы драйверов находятся в системном рабочем наборе PTE.

person Lewis Kelsey    schedule 24.03.2021