Почему Windows 7 использует файл подкачки при наличии свободной физической памяти?


43

Я использую Windows 7 64 бит с оперативной памяти 8G. После некоторого использования я чувствую, что Windows становится вялой. Драйв бьется. Когда я смотрю на монитор ресурсов и активность диска, я вижу несколько случаев использования файла подкачки (c: \ pagefile.sys). Я проверяю физическую память и вижу около 2,3 ГБ свободной памяти и 700 МБ свободной памяти.

Почему Windows не использует больше свободной памяти и меньше файла подкачки? Нужно ли оставить какое-то количество свободного барана, сколько это будет? Это процент физического барана?

Мой план - получить больше оперативной памяти и SSD для основного диска. Тем временем я страдаю от медленной работы.


1
То, что он записывает / читает в файл подкачки, не означает, что мы его используем, возможно, он просто обновляет его, поэтому он может быстрее выгружать память в случае внезапного запроса. Я рекомендую запустить монитор производительности или сделать глубокую диагностику и посмотреть, что вызывает медлительность.
Скотт Чемберлен

Наличие более 8 ГБ ОЗУ не увеличит производительность в 99. (9)% случаев. Вы наполнили свой mobo дешевыми ОЗУ с низкой частотой / высокой задержкой? Замена их была бы лучшей идеей, чем добавление большего.
kotekzot

3
@kotekzot Это зависит. В большинстве случаев я обнаружил, что задержка ОЗУ несколько незначительна. Если у него достаточно памяти, чтобы ему не приходилось ждать, пока приложения будут перемещаться по страницам, когда он alt-tabs просматривает все из них, то следующим самым большим узким местом на несколько порядков почти всегда является жесткий диск, и SSD исправит это правильно вверх.
Дарт Android

@ Если у меня больше оперативной памяти, я могу поместить файл подкачки на виртуальный диск, который намного быстрее, чем доступ к HD. Это уровень рабочей станции Dell для ноутбуков, поэтому я уверен, что компоненты не из дешевых. Я в курсе, что ноутбуки имеют более медленные жесткие диски и подсистемы ввода-вывода, чем десктопы.
Tony_Henrich

1
Пожалуйста, не помещайте файл подкачки на RAM-диск. Это только сделает систему более подверженной ошибкам страницы. Да, если они находятся на диске pagefile-on-RAM, они будут решены быстрее, чем если бы он перешел на реальный диск, но их вообще не будет намного быстрее; также, многие из увеличенных ошибок страницы будут к отображенным файлам, и RAMdisk не будет помогать им вообще.
Джейми Ханрахан

Ответы:


33

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

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

Системная память

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

Цель Windows - сохранить данные, которые наиболее вероятно будут использоваться в этом резервном кэше, на основе шаблонов использования. Чтобы использовать надуманный пример, давайте сравним относительное значение частной памяти программы, такой как Центр обновления Windows (обычно настраиваемой для запуска один раз в неделю), с кэшированием содержимого вашего рабочего стола в этой резервной памяти:

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

В этом случае Windows будет выгружать память, выделенную для Центра обновления Windows (даже если память не заполнена, и использовать пространство, выделенное в ОЗУ, для кэширования содержимого вашего рабочего стола. Это повышает производительность для ты.

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


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

(И на самом деле, в зависимости от приложений, системы могут часто выделять больше памяти, чем на самом деле, ожидая, что большая ее часть будет выгружена. Если вы смотрите на детальную разбивку памяти, взимается плата «Commit» или «Commit»). Это объем памяти, выделенный Windows для различных приложений. Файл подкачки используется для предоставления гарантий на эту память, даже если у нее недостаточно физической памяти для ее покрытия.)


Я только что заметил, что вы сделали различие между доступной и свободной памятью в своем вопросе; Приношу свои извинения, если вы чувствуете лекцию и уже знаете разницу. В идеале свободная память всегда равна 0. Однако, хотя резервная память - это память, которая может быть освобождена, не всегда память может быть освобождена быстро. Если я попытаюсь записать файл размером 1 ГБ на диск, Windows собирается вставить его в дисковый кэш в памяти, если это возможно, а затем медленно записать его на жесткий диск в фоновом режиме. Если приложению необходимо запросить 50 МБ дополнительной памяти, но ни одна из них не доступна, поскольку этот огромный дисковый кэш все еще очищается, приложение будет зависать до тех пор, пока оно не станет доступным. Наличие небольшого буфера под рукой позволяет системе решить эту проблему с минимальной задержкой с точки зрения пользователя.


6
@FrankComputer Посмотрите снимок экрана, который я разместил для моей рабочей системы 8 ГБ: 6300 МБ используется, резервный диск / кэш 1700 МБ, 42 МБ бесплатно. Глядя на мою домашнюю систему (32 ГБ памяти), вы на самом деле правы, но только на неправильном пороге: используется 9,2 ГБ, дисковый кэш 14,5 ГБ, свободный 8,6 ГБ. У вас будет свободная память, если в Windows просто не хватит вещей для кеширования, но этот порог довольно высок. Windows не постоянно меняет местами, потому что дисковый кеш - это не пространство подкачки - он пассивно кешируется, когда файлы запрашиваются, а не в кеше. Вы не замечаете, когда он извлекает данные из кеша, а активность жесткого диска отсутствует.
Дарт Андроид

8
@FrankComputer: Если ваша система работает хорошо, это не из-за свободной памяти. Свободная память - это память, которой система не пользуется, и она не может влиять на производительность больше, чем память на вашем столе. Единственный способ повысить производительность с помощью памяти - это использовать ее, поэтому, если она бесплатна, она не используется для повышения производительности. Делать больше свободной памяти - значит использовать меньше, ухудшать производительность.
Дэвид Шварц

1
@Tony_Henrich Отключение файла подкачки - это плохо. Очень плохо. (Перемещение файла подкачки на виртуальный диск по сути аналогично отключению. Windows не может немедленно переместить данные, которые ей не нужны, из памяти). Многие программы запрашивают память, которая им не нужна сразу, но может понадобиться в будущем. Обычно Windows выделяет эту память в файле подкачки, и это ничего не делает. Например. MSSQL сервер выделяет 8 ГБ оперативной памяти при запуске. Даже для 0 баз данных. Да просто так. Если вы поместите свой файл подкачки на виртуальный диск, вы потратите значительное количество оперативной памяти, которая в противном случае могла бы быть использована для кэширования
Darth Android

1
@Tony_Henrich В настоящее время Windows оптимально управляет вашим файлом подкачки и вашей оперативной памятью, учитывая то, как вы используете свою систему. Единственные улучшения, которые вы можете внести в него, таковы: добавьте больше памяти или перенесите свою ОС на SSD. Использование файлов подкачки в лучшем случае ухудшит общую производительность системы или в худшем случае повлияет на стабильность системы.
Darth Android

1
Вы объясняете, что Windows делает с памятью. Если у меня много свободной памяти, то Windows должна использовать ее, независимо от того, спит приложение или ничего не делает. Какой вред хранить его в памяти, когда память доступна. Когда памяти становится мало, Windows может использовать файл подкачки. Использование файла подкачки вызывает износ диска. Там нет износа при использовании памяти. Во-вторых, я использую SSD для моего файла подкачки. Хотя срок службы твердотельных накопителей меньше, чем у жестких дисков, а затем изнашивается большое количество записей, но это все же не до нескольких месяцев. Это все еще в годах.
Tony_Henrich

4

Это называется планированием наперед.

Запись страниц памяти в файл подкачки, когда еще достаточно ОЗУ, - это хорошо. Как только программа запрашивает больше памяти, чем свободно, ОС может начать очищать пространство как можно скорее. Лучше готовить сейчас, чем позже.

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


С 16G + и легкими программами время, когда программа запрашивает больше памяти, чем свободно, намного меньше, чем частое использование файла подкачки. Поэтому для этих случаев лучше использовать часть свободной памяти и меньше файла подкачки. Там нет единого решения, которое подходит для всех случаев.
Tony_Henrich

1
Я не думаю, что вы поняли. Это не должно быть одно или другое. Windows может записывать в свободную память и записывать в файл подкачки. Это не то же самое, что запись в файл подкачки или запись в память.
Surfasb

1
Но если попытаться спланировать заранее, разве Windows не заполняет кэш-память жесткого диска / SDD - замедляя одновременную запись / загрузку файлов? Эта предварительная замена ОЗУ звучит как хорошая идея, но кажется, что она случайно загружает систему в плохие времена.
Бинки

1
@binki: Да, это влияет на время чтения / записи диска, но, если я вспомню, они используют более низкий приоритет, поэтому другие операции чтения-записи должны идти в первую очередь.
Mooing Duck


2

У меня был файл подкачки отключен за последние 7 лет. На самом деле это первое, что я делаю после новой установки. Никогда не было никаких проблем с этим. (На самом деле у меня была одна игра под названием «Titan Quest», которая при запуске выполняла очень глупую проверку, поэтому я создал файл страницы размером 4 МБ только для того, чтобы сделать его счастливым, и позже отключил PF). Что касается оригинального вопроса. Windows использует нашу оперативную память для дискового кэша ввода-вывода. По некоторым причинам он считает, что дисковый кеш одинаково важен для кода и данных активных программ. И нет возможности ограничить размер дискового кэша. Это там по замыслу, и мы ничего не можем с этим поделать ... Ой, подождите! Мы можем! Просто выключите файл подкачки. Запуск приложений, которые сильно загружены в оперативной памяти? Купите больше оперативной памяти или закройте одно приложение перед запуском другого. Вы можете использовать Process Explorer, чтобы увидеть, сколько памяти используется в данный момент.


1
Избавление от файла подкачки не отключит кеширование диска.
Джейми Ханрахан

1
Вы писали: «[Дисковое кэширование] разработано специально, и мы ничего не можем с этим поделать. Ой, подождите! Мы можем! Просто выключите файл подкачки». Что ж, отключение файла подкачки никак не влияет на кеширование диска, так что вы говорите? В любом случае, это глупая идея, так как она заставляет ОС сохранять всю частную фиксацию в ОЗУ навсегда, как только ее коснутся. Это делает меньше места для отображаемой виртуальной памяти (например, кода), так что содержимое должно быть разбито на страницы. Упреждающий дисковый кеш (superfetch) использует то, что осталось после всего вышеперечисленного, так что он не увеличивает подкачку.
Джейми Ханрахан

1
Я никогда не говорил (и не думал), что отключение файла подкачки было вашей идеей, поэтому я ничего не говорил о «вашей идее». О, пока я здесь: «По какой-то причине [Windows] считает, что дисковый кеш одинаково важен для кода и данных активных программ», совершенно неверно. Superfetch использует только те страницы, которые находятся в списке Standby и, следовательно, уже являются частью ». доступно »ОЗУ; он не берет страницы из кода и данных программ. И эти страницы остаются доступными, то есть сразу доступны для кода и данных программ, даже после того, как они содержат кэшированные данные из файлов.
Джейми Ханрахан

1
Я не говорю ничего подобного. (Откуда вы это взяли?) Я говорю, однако, что Windows никогда ничего не выгружает, чтобы освободить место для дискового кэша. Напротив, в кеше используются страницы, которые в настоящее время не являются частями процессов и поэтому в противном случае были бы потрачены впустую. Такие остатки RAM немедленно доступны для кода и данных , которые необходимы это для пейджинговой вещи в , так что это не «израсходованы» кэше, просто «позаимствовали». Таким образом, кеш не уменьшает объем кода и данных, которые могут быть выгружены в оперативную память или храниться в ней. Ссылка: Windows Internals от Соломона, Руссиновича и Ионеску.
Джейми Ханрахан

1
Я уже ответил в ответе DA. Но то, что вы только что сказали, не то, что он сказал. Он сказал, что Windows будет выгружать долго неактивные процессы (правда). И он также сказал, что дисковый кеш может использовать освобожденные страницы (также верно). Но это не значит, что дисковый кеш обязательно имеет приоритет. Дисковый кеш использует эти страницы только в том случае, если они не нужны никому другому. Огромное количество испытаний продемонстрировало, что это хороший компромисс.
Джейми Ханрахан

1

Аргументы ( здесь и здесь ) для сохранения и использования файла подкачки, даже если достаточно ОЗУ:

  • Даже если сейчас есть свободная память, у машины может закончиться память позже. Лучше заранее выбросить на диск малоиспользуемые части памяти.
  • Существует также «резервная» память, которая отображается как свободная, но фактически используется для кэширования диска. Это также важно для производительности, лучше иметь немного.
  • Если у вас не хватает оперативной памяти с отключенным файлом подкачки, это серьезный сбой.
  • Хотя 2, 4, 16 или любое другое количество ГБ ОЗУ может выглядеть «много», это может быть не так, как вы думаете. Вам нужно в профиль.

С помощью монитора ресурсов Windows можно увидеть, сколько ОЗУ используется для кэширования (отображается как «Резервный»).

Если вы видите, что ваша ОЗУ фактически используется или находится в режиме ожидания, файл подкачки вам пригодится. Если комбинация ваших задач и доступной оперативной памяти такова, что значительная часть памяти отображается как неиспользованная («свободная»), я думаю, что нет необходимости перемалывать жесткий диск только из уважения к кому-то, кто «знает лучше и сказал здесь» ».


-2

Все эти комментарии и правильный ответ отсутствуют. Выключите ваш файл подкачки. Это не нужно с 8 ГБ ОЗУ, и если вам нужно больше ОЗУ, купите его. довольно просто на самом деле.


4
Windows довольно умна в определении того, что (не) поместить в файл подкачки. За исключением некоторых почти чисто теоретических сценариев, его отключение ухудшит производительность даже при 8 ГБ ОЗУ. Даже если правильный ответ отсутствовал, это, конечно, не так.
Маркс Томас

4
У вас есть доказательства, подтверждающие ваши претензии в отношении "вреда"? Я представляю статью MS support.microsoft.com/kb/889654
a2552308

6
Проще говоря: файлы подкачки могут только увеличить активность диска ... и окна не достаточно умны, чтобы вообще не использовать их, если у них много оперативной памяти. В системе SSD это может быть не слишком заметно, в системе шпинделей это может сильно повлиять на производительность приложения. Ссылайтесь на оригинальный постер.
a2552308 18.12.12

2
Соответствующий раздел из статьи MS: «Однако по мере того, как к компьютеру добавляется больше оперативной памяти, уменьшается необходимость в файле подкачки. Если на вашем компьютере установлено достаточно оперативной памяти, файл подкачки вообще может не потребоваться, если только он не требуется по конкретному заявлению. " Я не смог найти соответствующие разделы из множества статей, на которые вы ссылались, может быть, вы могли бы процитировать соответствующие разделы?
a2552308 18.12.12

2
Звучит хорошо в теории, но не то, что я наблюдал на практике.
a2552308 19.12.12
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.