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

263
bers

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

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

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

0
Файл подкачки является неотъемлемой частью управления памятью в Windows. Если вы отключите файл подкачки, вы не сможете использовать всю физическую память. Пожалуйста, прочтите, как работает виртуальная память в Windows. Daniel B 5 лет назад 0

2 ответа на вопрос

3
Mokubai

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

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

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

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

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

Незначительный придирки: вы не можете отключить виртуальную память. Daniel B 5 лет назад 0
@DanielB Я пытался не путать своп с виртуальным, но, к сожалению, мой старый ум подвел меня. Спасибо за указание на это. :) Mokubai 5 лет назад 0
Спасибо за Ваш ответ. К сожалению, это не относится к конкретным настройкам моего вопроса, который я (как предполагается) описываю как имеющий много оперативной памяти и не слишком быстрый диск. Чтобы ваше объяснение было практически уместным, в большинстве случаев требуется серьезное количество оперативной памяти для подкачки, что занимает много времени на диске. bers 5 лет назад 0
1
LMiller7

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо за Ваш ответ. К сожалению, это не относится к конкретным настройкам моего вопроса, который я (как предполагается) описываю как имеющий много оперативной памяти и не слишком быстрый диск. Чтобы ваше объяснение было практически уместным, в большинстве случаев требуется серьезное количество оперативной памяти для подкачки, что занимает много времени на диске. bers 5 лет назад 0
Ответ не совсем правильный. Если вы просто используете malloc (lots_of_bytes), несмотря на то, что обязанный vas должен быть зафиксирован, он фактически нигде не занимает место (даже в файле подкачки), пока вы не получите к нему доступ. При первом чтении страницы из такой области Windows выделит для вас физическую страницу, полную нулей. Кажется, согласно вашему описанию, MATLAB настойчиво настаивает на том, чтобы активно записывать нули в регион, очевидно, не доверяя Windows, чтобы делать правильные вещи. Это не вина ОС. Jamie Hanrahan 5 лет назад 0