|
Сбрось память на диск
Игорь Лейко
ipl@redline.ru
страница 1 2

Можно без преувеличения сказать, что оптимальная настройка виртуальной памяти и дискового кэша - одна из наиболее непонятных для пользователя областей. Множество рекомендаций кочует из одной журнальной статьи в другую, оттуда в книги, из книг - на страницы интернета, а из Сети - снова в журналы.
Если как следует проштудировать русскую часть интернета, то окажется, что ошибочные рекомендации и неточная информация на эту тему составляют не менее 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.х при работе в стандартном режиме.
Такое поведение обуславливалось организацией управления оперативной памятью в процессоре. Обладая некоторыми преимуществами (размещение выгруженной на диск программы, как правило, в одном непрерывном блоке), такое решение имеет и существенный недостаток - увеличение интенсивности обмена с диском.
При нехватке даже нескольких килобайт физической памяти одна из программ выгружается на диск целиком, а позже снова загружается целиком же.
|