» Hardware » Software » Windows » Internet » Humor » Other

Сбрось память на диск

Argon On-Line » Windows » Other
 

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

Если как следует проштудировать русскую часть интернета, то окажется, что ошибочные рекомендации и неточная информация на эту тему составляют не менее 95% от общего количества публикаций. А некоторые из рекомендаций остаются неизменными чуть ли не со времен Windows 3.0.

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

К числу таких рекомендаций относятся: установление фиксированного размера подкачки, кратного размеру ОЗУ компьютера; перемещение файла подкачки на отдельный раздел того же диска, на который установлена Windows; установка параметра ConservativeSwapFileUsage=1 для более эффективного использования памяти; уменьшение размеров дискового кэша вплоть до двух мегабайт и прочее.

Чтобы вам стало ясно, почему следование этим советам снижает эффективность работы Windows 98 / Me, расскажу об особенностях использования виртуальной памяти и дискового кэша в этих ОС. Затем дам рекомендации, справедливые для подавляющего большинства пользователей. Существуют некоторые очевидные исключения, например, редактирование графических или видеофайлов размером во многие десятки и сотни мегабайт.

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

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

Виртуальная память

Итак, принципы работы виртуальной памяти в общем. Когда запускается какое-либо приложение, ему выделяется некоторое количество оперативной памяти. Эта память выделяется блоками (обычно их называют страницами), и в специальной области памяти ведется таблица, учитывающая все выделенные страницы. Размер страницы памяти определяется аппаратной реализацией процессора. В процессорах семейства х86 этот размер равен четырем килобайтам.

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

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

При этом задачи, ожидающие загрузки страниц в память, приостанавливаются в ожидании этой загрузки, а процессорное время передается другим программам. В однопользовательской же операционной системе, которой является Windows 9x / Me, такой алгоритм работы оказывается далеко не оптимальным.

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

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

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

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

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

Учтите при этом еще одну особенность Windows 9х / Me (и Windows NT / 2000 / XP тоже), неизвестную подавляющему большинству пользователей: программы и программные модули, имеющие формат PE (Portable Executable) и хранящиеся на локальном диске с несменяемым носителем, запускаются особым образом. Их запуск начинается не с загрузки программного кода в память, а с распределения памяти и сопоставления страниц виртуальной памяти участкам файла программы.

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

Тем самым достигается минимально необходимый расход оперативной памяти и существенная ее экономия по сравнению с обычной процедурой считывания в память всей программы и последующего ее запуска. К тому же программа начинает выполняться раньше на время, почти равное требующемуся на ее загрузку в память. К типу PE относится подавляющее большинство программ, написанных для 32-разрядных операционных систем 9х- и NT-семейств Windows.

Запуск программ как бы из файла подкачки дает особенно заметный выигрыш в случае размещения программного кода на диске в соответствии с порядком его загрузки в память. Такое размещение обеспечивает программа дефрагментации диска Windows 98 / Me. Еще одним преимуществом такого подхода является уменьшение потребности в файле подкачки. Программный код уже хранится на диске, и, поскольку он не изменяется, нет необходимости выгружать его на диск.

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

Стоит заметить, что здесь имеется одно существенное различие между Windows 95 и Windows 98 / Me. Первая передает копии страниц из дискового кэша в память, распределяемую диспетчером виртуальных машин, из-за чего в памяти фактически имеется два экземпляра таких страниц. Однако не спешите возмущаться — так поступают почти все ОС. Системы Windows 98 и Windows Me могут выполнять программный код непосредственно из кэша. Это означает, что та часть кэша, которая занята отображенными в память участками программ, одновременно оказывается обычной оперативной памятью, выделенной этим программам.

Системный монитор может показать количество таких двояко используемых страниц и тем самым помочь определить, какая часть дискового кэша занята программами. На моем компьютере этот показатель колеблется от 500 до 1500 страниц, обычное значение — 800 страниц (т. е. 2 Мб, 6 Мб и 3,2 Мб соответственно). В ваших условиях количество таких страниц может быть другим. Но очевидно, что искусственное уменьшение размера дискового кэша до нескольких мегабайт почти наверняка сделает кэш неэффективным.

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

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

Многие ОС, разработанные в семидесятых-восьмидесятых годах, при нехватке памяти выгружали на диск программы целиком. Так поступала даже Windows 3.х при работе в стандартном режиме.

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

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

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

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

Это означает, что умеренная фрагментация файла подкачки практически не изменит времени, требующегося на подкачку страниц в память. Windows 98 увеличивает файл подкачки ступенями по 4 Мб, стремясь при этом к тому, чтобы каждый такой участок был непрерывным. Этой меры обычно оказывается достаточно для того, чтобы непрерывный файл подкачки практически не имел преимущества в скорости по сравнению с файлом, создаваемым обычным способом.

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

А вот расположение файла подкачки на отдельном разделе того же диска, на котором установлена Windows, гарантированно снижает скорость работы, поскольку требует постоянного перемещения головок на довольно большое расстояние.

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

Где и сколько

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

Несколько слов о том, как определить, какой размер файла подкачки вам нужен. Часто предлагаемая формула "трехкратный размер оперативной памяти" основана на особенностях использования виртуальной памяти в Windows 3.x, но не в Windows 9х. В последнее время, правда, даже самые ярые ее сторонники понимают, что числа получаются просто абсурдные, и уменьшают рекомендуемый размер файла до двух-двух с половиной размеров ОП, а в последнее время — даже до полутора.

Лучше всего поступить следующим образом. Запустите системный монитор, добавьте показатель "Размер файла подкачки" и установите интервал времени обновления в 10 минут. Проработайте с запущенным монитором весь день и посмотрите, какой размер принимал файл подкачки. Теперь установите для файла подкачки такой минимальный размер, который оказался бы достаточен для работы в течение 90-95 процентов времени.

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

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

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

Существует еще одно различие между Windows 95 и 98 / Me. Первая при завершении работы уменьшает размер файла подкачки до минимума, а после запуска вновь его увеличивает. Следующие версии этого не делают. Причина очевидна. Во время разработки Windows 95 программы для MS-DOS были еще весьма распространены, а размеры дисков — не слишком велики. Чтобы при работе в DOS-режиме (или в старой версии MS-DOS) место на диске не терялось напрасно, файл подкачки решили уменьшать.

К моменту появления Windows 98 необходимость в экономии места на диске отпала. Как из-за того, что размеры дисков значительно выросли, так и из-за того, что на многих компьютерах режим MS-DOS уже не использовался. Поэтому для уменьшения времени загрузки и завершения работы было решено отказаться от уменьшения размера файла подкачки при выходе из Windows. Зачем делать напрасную работу, этот файл все равно потребуется увеличить при следующем включении компьютера.

 
Еще
Оглавление раздела
Содержание / Новости

Карта сайта
О сайте
Ссылки

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







К началу страницы© 2002—2008 Argon