Какая часть оперативной памяти используется системным файловым кешем в Windows?
Согласно общим представлениям о кеше страниц и этом ответе, системный файловый кеш по существу использует всю оперативную память, не используемую никаким другим процессом. Это, насколько я знаю, случай с кешем страниц в Linux.
Поскольку понятие "свободная память" в Windows немного размыто, у меня вопрос: какую часть оперативной памяти использует системный файловый кеш? Например, это то же самое, что "Доступная оперативная память" в диспетчере задач?
2 ответа
Да, ОЗУ, используемое файловым кешем, по сути является ОЗУ, отображаемым как доступное в диспетчере задач. Но не совсем. Я углублюсь в детали и объясню, как измерить это более точно.
Файловый кеш - это не процесс, указанный в списке процессов в диспетчере задач. Однако, начиная с Vista, ее память управляется как процесс. Таким образом, я объясню немного управления памятью для процессов, файловый кеш - особый случай.
В Windows оперативная память, используемая процессом, имеет два состояния: "Активно" и "Ожидание":
- "Активная" ОЗУ отображается в диспетчере задач и мониторе ресурсов как "Используется". Это также оперативная память, отображаемая для каждого процесса в диспетчере задач.
- "Резервная" оперативная память видна на мониторе ресурсов глобально и для каждого процесса с RAMMap.
"Резервное" + "Свободное" ОЗУ - это то, что называется "Доступно" в диспетчере задач. "Свободная" ОЗУ в Windows имеет тенденцию быть около 0, но вы также можете считать, что резервная ОЗУ также свободна.
Резервное ОЗУ считается "не используемым в течение некоторого времени процессом". Это часть оперативной памяти, которая будет использоваться для предоставления новой памяти нуждающимся в ней процессам. Но он все еще принадлежит процессу и может быть использован напрямую, если процесс-владелец внезапно получит к нему доступ (что считается системой маловероятным).
Таким образом, файловый кеш имеет "активную" оперативную память и "резервную" оперативную память. "Активная" оперативная память - это кэш данных, к которым недавно обращались. "Резервная" оперативная память - это кэш для данных, к которым недавно обращались. "Активная" оперативная память файлового кэша обычно относительно мала. Резервное ОЗУ файлового кэша чаще всего представляет собой все ОЗУ вашего компьютера: Общее ОЗУ - активное ОЗУ всех процессов. Действительно, другие процессы редко имеют резервное ОЗУ, потому что оно имеет тенденцию переходить в файловый кеш, если вы выполняете дисковый ввод-вывод совсем немного.
Это информация, отображаемая RAMMap для занятого сервера, выполняющего много операций ввода-вывода и вычислений:
Файловый кеш - это вторая строка с именем "Mapped file". Обратите внимание, что большая часть 32 ГБ находится либо в активной части других процессов, либо в резервной части файлового кэша.
Итак, наконец, да, ОЗУ, используемое файловым кешем, по сути является ОЗУ, отображаемым как доступное в диспетчере задач. Если вы хотите измерить с большей уверенностью, вы можете использовать RAMMap.
Ваш ответ не совсем верный.
Файловый кеш, также называемый системным кешем, описывает диапазон виртуальных адресов , он имеет физический рабочий набор, который отслеживается
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.