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

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

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

2 ответа2

3

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

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

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

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

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

1

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

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

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

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

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

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .