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

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

Мой вопрос основан на наблюдении, что с момента появления 64-битной Windows, многие люди вокруг меня, похоже, поддаются на блокировки своих систем, связанные с файлами подкачки. Например, что-то простое, как zeros(2e5)в MATLABвыделяетне просто 1600 КБ нулей, а 160 ГБ. Благодаря 64-битному адресному пространству этот объем может быть адресован, но очень часто не в ОЗУ. (Я мог бы назвать много подобных примеров, которые все сводятся к выделению памяти.) В результате Windows прибегает к использованию файла подкачки и сохраняет 160 ГБ нулей на диске. Только после этого (или принудительного выключения) ваша система снова становится отзывчивой.

В 32-разрядной Windows эта проблема во многом решалась за счет адресного пространства размером не более 4 ГБ.

Так почему же Microsoft все еще настраивает большой файл подкачки по умолчанию? По моим наблюдениям, размер по умолчанию больше с большим объемом оперативной памяти, что не имеет смысла, если у вас нет действительно большого, действительно быстрого диска, такого как ужасно дорогой SSD. Я склонен отключать файлы подкачки в 64-битных установках Windows по этой причине. Или не стоит? Каковы причины за или против этого?

решение1

Windows не выполняет ленивое выделение памяти, как Linux, и объем выделяемой памяти зависит от файла подкачки.

В Linux предполагается, что любое "разреженное" выделение памяти не будет полностью использовано, поэтому он позволяет программам постоянно перераспределять память, пока она не будет физически исчерпана. В случае, если программы фактически удовлетворяют свои потребности в памяти, но для удовлетворения спроса недостаточно оперативной памяти или подкачки, то он начинает убивать процессы.

Windows делает наоборот и предполагает, что вся выделенная память в конечном итоге будет использована, поэтому все резервирования выполняются до тех пор, пока не будет достигнут размер физической памяти + файла подкачки. Если программа может выделить память, то она может ее использовать. Если она не может выделить память, то она достигла предела ОЗУ и размера файла подкачки.

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

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

решение2

Файл подкачки обеспечивает ОС два основных преимущества, ни одно из которых не имеет существенного влияния на 64-разрядную ОС.

  1. Файл подкачки увеличивает лимит фиксации.

Когда приложение выделяет память, ОС Windows обещает или обязуется иметь достаточно доступного хранилища для него, даже в худшем случае. Это хранилище может быть в ОЗУ или в файле подкачки. Предел фиксации определяется как размер ОЗУ плюс размер файла подкачки минус небольшие накладные расходы. При отсутствии файла подкачки предел фиксации будет несколько меньше размера ОЗУ. Менеджер памяти отслеживает общий объем выделенной памяти, чтобы гарантировать, что он никогда не превысит предел фиксации.

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

Достижение предела фиксации в Windows — это плохо. Большинство приложений не очень хорошо справляются с этой возможностью, а сама ОС часто не может ее выдержать.

  1. Файл подкачки оптимизирует использование оперативной памяти.

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

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

Файл подкачки предоставляет место, где менеджер памяти может выгрузить эти редко используемые данные и освободить ОЗУ от этой обязанности. Это правда, что это будет стоить денег, но помните, что это редко используемые данные, так что это не должно быть серьезно. И менеджер памяти имеет многочисленные оптимизации, чтобы минимизировать эти деньги.

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

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

В конечном итоге, позвольте Windows управлять файлом подкачки так, как она хочет. Разработчики знают, что делают. К сожалению, Microsoft не очень хорошо донесла эту информацию до пользователей, и существует множество заблуждений. Большая часть того, что вы читаете в Интернете о файле подкачки, содержит как минимум серьезные ошибки.

Связанный контент