Управляем памятью компьютера

Управляем памятью компьютера
Хочу предложить вашему вниманию статью-обзор особого класса утилит - менеджеров памяти. Основная задача подобных программ - повысить производительность вашей системы. Только не обольщайтесь, дополнительных FPS во всеми нами любимых игрушках вы навряд ли получите. Для подобного повышения производительности выход только один - апгрейдить или разгонять железо. Однако несколько ускорить повседневную работу в винде (при открытии одновременно, скажем, Photoshop' а и MS Word'а на 32 мегабайтах памяти) все-таки можно. И если даже памяти у вас 128 мегабайт, расслабляться рано: при открытии чуть большего количества программ мне приходилось наблюдать веселые тормоза.

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

- Дефрагментация памяти. Да-да, дефрагментировать можно не только файлы на диске. После многократного открытия и закрытия множества программ в памяти может образоваться настоящая каша. Работать, конечно, все будет, но на порядок медленнее. Все знают, что у процессора есть кэш (L1 и L2) и что определенная часть оперативной памяти записывается в этот кэш еще до того, как будет произведено обращение к этой области памяти. Когда же настает черед прокэшированных команд или данных, то они читаются процессором из кэша, что во много раз быстрее, чем обращение к оперативной памяти. А теперь представьте, что наша программа и ее данные оказались фрагментированными в памяти, то есть, грубо выражаясь, различные куски программы оказались разбросанными по различным областям памяти и переплетенными с другими кусками других программ. И как прикажете это кэшировать? Вот и происходит ситуация, когда в кэш попадают совсем не те данные, которые нужны, и процессору ничего не остается, как отыскивать нужное в оперативной памяти. Подобное снижение hit rate кэша (число попаданий) способно снизить производительность, независимо от объема памяти. Вы и сами замечали, что только что загруженная система как-то быстрее и свежее что ли.

- Менеджер памяти должен постоянно следить за тем, чтобы определенный объем оперативной памяти был свободен. Это достигается путем выгрузки в данный момент неиспользуемых программных модулей в своп (это происходит в фоновом режиме незаметно для пользователя). Благодаря этому, когда какому-нибудь приложению требуется память (чтобы загрузить, например, большую порцию данных) или вы открываете еще одно приложение (при этом у вас уже несколько открыто), она - память - уже доступна, и системе не приходится тратить время на ее высвобождение. При этом загрузка осуществляется значительно быстрее и повышается производительность приложений. Но тут важно не перегнуть палку, так как не всегда наличие свободной и незагруженной памяти хорошо. Когда? Да, хотя бы, тогда, когда вы играете в Quake или другую игрушку покрупнее, чем Minesweeper. Как тут быть? Любая мощная игра хорошо загружает процессор. Следовательно, менеджер памяти должен отслеживать эту загрузку и, если она превышает 80-90%, ни в коем случае не вмешиваться. Да и вообще, если достаточно современный процессор настолько загружен, значит он выполняет солидные вычисления и процесс высвобождения памяти должен быть отложен, чтобы не снизить скорость выполнения этих вычислений.

- Выгрузка ненужных DLL'ок. Дело в том, что многие программы, да и сама операционка, загружают в память множество библиотек. И не факт, что эти библиотеки будут обязательно использоваться всегда. Менеджер памяти должен уметь отыскивать подобные модули и выгружать их в своп. Если они вдруг понадобятся, то незамедлительно будут загружены назад.

- Борьба с "утечкой мозгов", ну, то есть памяти. Приложениям выделяется определенное количество памяти. Но при их закрытии изредка (по вине или операционки, или самого приложения) память продолжает оставаться выделенной (allocated) для данного приложения. Вот с такими утечками также приходится бороться.

Утилит подобного толка написано столько, что только диву даешься (достаточно заглянуть на какой-нибудь софт-архивный сайт, типа tweakfiles, и зайти в раздел Memory). Я же просто расскажу о проверенных временем двух наиболее понравившихся мне программках - MemTurbo и RamIdle. Обе достаточно компактны и обладают достаточными наборами функций.

Начнем с MemTurbo версия 2.0. Программа резидентно грузится в память и напоминает о своем присутствии значком в System Tray'е, где, кстати, показывает количество свободной физической памяти. И выполняет она именно все то, что и должен выполнять настоящий менеджер памяти, даже немножко больше.

Программа предоставляет четыре варианта очистки памяти, которые по желанию можно включать/выключать: автоматическая очистка, очистка по времени (через определенные промежутки времени), принудительная очистка в любой момент времени, Scrub RAM. При нажатии на иконку в System Tray правой кнопкой мыши появляется небольшое меню из трех пунктов, где, выбрав опцию Open Main Window, мы попадаем в основное окно программы, откуда и осуществляется ее настройка. В основном окне мы можем наблюдать четыре закладки, три из которых представляют наибольший интерес для нас.

Первая закладка - Free Memory. Помимо чисто информативной функции (показывает загрузку процессора, количество свободной физической памяти), она содержит два очень важных ползунка: первый - Auto Recovery Level - позволяет установить минимально допустимый объем свободной памяти, по достижению которого программа автоматически попытается освободить память до уровня, задаваемым вторым ползунком - Target Free RAM. Auto Recovery Level рекомендуется устанавливать где-то на уровне 1/16 объема вашей оперативной памяти. Target Free RAM - где-то в районе 1/6 объема оперативной памяти. Устанавливать больше не имеет смысла, так как MemTurbo начнет слишком агрессивно "выметать" из памяти различные модули, что может, наоборот, привести к потере производительности.

Кнопочка Recovery RAM аналогична пункту Run Now в трехпунктной менюшке, появляющейся при нажатии правой кнопкой по значку в System Tray. При нажатии на эту кнопочку происходит принудительная очистка памяти. Насколько она будет очищена, определено параметром Target Free RAM.

Scrub RAM - это метод тотальной очистки. MemTurbo постарается освободить столько памяти, сколько это возможно. Если честно, то я не вижу особого смысла в этой функции, ибо цель любого менеджера памяти должна быть не выгрузка всего, что можно в своп, а поддержание необходимого минимального объема оперативной памяти на тот случай, если какому-то приложению она вдруг понадобится.

Плавно переходим к следующей закладке - Options. Вкратце пробежимся по всем опциям.

Start MemTurbo automatically when Windows starts. Тут все понятно, если вам понравился этот менеджер памяти, повести его в автозагрузку.

Do a recovery as soon as CPU is idle after Windows startup. Эта опция становится доступной после активизации предыдущей опции. Смысл тут в следующем: сразу после загрузки Windows, когда завершатся все загрузочные операции, MemTurbo произведет дефрагментацию и очистку памяти (согласно параметру Target Free RAM). При объеме ОЗУ 64 Мб и более польза от этой функции сомнительна.

Recover RAM automatically when alarm level is reached/. Активизируйте эту опцию, если хотите, чтобы MemTurbo выполняла дефрагментацию и очистку при достижении минимально допустимого уровня свободной памяти. Настройка этой функции описывалась выше на закладке Free memory.

Recover RAM automatically every XX minutes. А вот тут активизируется еще один метод очистки по времени. То есть через каждые XX минут программа будет проводить принудительную дефрагментацию (если она нужна) и очистку. Степень очистки определяется параметром Target Free RAM. Опцию рекомендуется включить и поставить что-то в районе 30 минут.

Enable MemTurbo guide. Что-то типа помощника, как пользоваться программой, без помощи которого тоже неплохо живется.

Use full-screen progress indicator. Однозначно гадость. Каждый раз при очистке у вас на весь экран будет появляться здоровенный прогресс-бар, который моментально исчезнет (очистка-то быстро происходит) и без которого солнце тоже светит и птички поют.

Don't auto-recover unless CPU usage is below XX %. А вот это уже жутко полезная и необходимая вещь. Как я упоминал выше, если процессор чем-то сильно занят (как в играх), его лучше не трогать, ибо производительность пострадает и никакой радости от Memory Recovery у вас точно не будет. Обязательно включите эту опцию и поставьте процентов 25. Это будет означать, что если загрузка процессора превышает 25%, MemTurbo не будет вмешиваться до тех пор, пока загрузка не упадет ниже этого уровня.

Use "Recover Now" shortcut key. Здесь вы можете назначить комбинацию клавиш, при нажатии на которые произойдет принудительная очистка памяти.

Современные менеджеры памяти позволяют настраивать еще и размеры кэша диска (или правильнее кэш файлов). Memturbo не исключение, поэтому перейдем на закладку Cache Tuning. Там можно настроить такие параметры:

Minimum Cache Size - минимальный размер кэша для файлов. Вообще-то, настройка этих параметров - тема для отдельной статьи, там есть свои нюансы в зависимости от объема памяти, задач, решаемых на компьютере. В большинстве же случаев подойдет такой принцип - Minimum Cache Size = 1/16 объема ОЗУ.

Maximum Cache Size. Попробуйте поставить порядка 1/4 объема ОЗУ.

Cache block Size (chunk size). Здесь устанавливается, на куски какого размера будет разбит блок памяти, выделенный под кэш для файлов. В большинстве случаев подходит параметр по умолчанию - 512.

Async IO Buffers. Интересный параметр, влияющий на производительность всей системы. По умолчанию Windows создает в памяти четыре четырехкилобайтных буфера для хранения асинхронных страниц чтения/записи. Таким образом общий размер буфера равен 4*4=16 килобайт. Memturbo позволяет вам изменить это параметр. Рекомендуется поставит максимально возможный размер буфера - 128 килобайт (32 буфера по 4 килобайта). Но существует одно "но": данные изменения работают только при 32-битовом доступе к диску и ваш своп-файл постоянных размеров (задайте минимальный и максимальный размер свопа одинаковыми и равными примерно 2,5 объема ОЗУ, для этого откройте Control Panel, там найдите System, далее отройте закладку Performance, а на ней - Virtual Memory).

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

Для установки Async IO Buffers в секции 386Enh пропишите параметр PageBuffers=32. Для настройки кэша для файлов создайте раздел (если его еще нет) [vcache]. Дальше пропишите:

MinFileCache=минимальный размер кэша для файлов в килобайтах;

MaxFileCache=максимальный размер кэша для файлов в килобайтах;

Chunksize=512

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

Мне осталось только сказать, что скачать MemTurbo можно тут - www.memturbo.com. Распространяется она как shareware, но вы, я надеюсь, знаете, как "регистрироваться" :).

Но не было бы на земле прогресса, если бы не было соперничества. Вот я и хочу поведать вам про достойного конкурента MemTurbo - программку RAM Idle. Она распространяется как freeware, качать можно здесь: http://www.tweaknow.com.

Программка мирно сидит в виде иконки в System Tray, при наведении мышкой на которую мы можем наблюдать количество свободной памяти, а при нажатии правой кнопкой мыши на ней мы получаем доступ к меню, при помощи которого мы можем и выключать компьютер (Shutdown Windows), и перезагружать его (Restart Windows), можем погружать компьютер в режим Suspend (если он у вас поддерживается), очищать буфер обмена. Но нас-то больше интересуют возможности программы в качестве менеджера памяти. Что ж, программа позволяет дефрагментировать и очищать память в двух режимах: принудительная очистка (для этого надо выбрать в меню один из трех возможных вариантов, например, Free up 8 MB), автоматическая очистка по достижению критического объема свободной памяти и автоматическая очистка через заданный промежуток времени. Для настройки автоматических опций выберем пункт меню Open RAM Idle. В основном окне нашему сбору предстанут 7 закладок, наибольший интерес из которых представляют 5. На первой закладке - RAM Idle - мы можем настроить минимально допустимый объем памяти (Minimum free RAM), по достижению которого сработает автоматическая очистка до уровня Target free RAM. Настройка этих двух ползунков осуществляется, как и в MemTurbo.

На этой же закладке устанавливаем, что программа очищает память, только если загрузка меньше 90% (CPU Usage detection настоятельно рекомендуется держать включенным). Тут же определяем параметры очистки памяти через заданный промежуток времени (скажем, 2 мегабайта каждые 3 минуты) и те три возможные варианты принудительной очистки, которые будут появляться в менюшке в трее.

На закладке Options единственная, на мой взгляд, полезная опция - Start automatically with Windows. Можно, конечно, еще попросить программу показывать в трее количество свободной памяти, однако для этого понадобятся дополнительные 200 килобайт. Такие опции, как Clear clipboard when freeing up и Make a sound when freeing up, - чистое баловство.

Следующая закладка - Disk Cache. Тут все аналогично Cache Tuning в MemTurbo.

На закладке File Cache можно установить типичную роль компьютера (сервер, десктоп, мобильный) или самому настроить такие два параметра, как Name Cache и Directory Cache. Первым устанавливается количество файлов, отслеживаемых Windows, а вторым - количество директорий. Мой совет таков: при наличии 64 и более мегабайт памяти просто ставьте схему на Network Server. В других случаях самая подходящая роль для вашего компьютера - Desktop Workstation.

В последней версии RAM Idle появилась новая закладка - Tweak. Там три интересные опции:

Contiguous file allocation size. Полезно, если вы работаете с мультимедиа. Эта опция заставит Windows перед записью файла на диск сначала найти для него подходящее место, тем самым, уменьшая фрагментацию файлов. Вы можете сами включить эту опцию, добавив в реестр параметр [HKEY_LOCAL_ MACHINE\System\CurrentControlSet\Control\FileSystem] "ContigFileAllocSize" = dword:00000200.

Add buffer for harddisk. Знакомая нам уже опция по MemTurbo. Там это называлось конфигурированием Async IO Buffers.

Make Windows use RAM as much as possible. А вот эта опция заставит Windows использовать своп-файл только в том случае, если физическая оперативная память полностью занята. Рекомендуется только, если у вас 128 и более мегабайт памяти. Опцию эту вы можете включить и без помощи RAM Idle, для этого пропишите в секции 386Enh файла System.ini такую строку: ConservativeSwapfileUsage=1.

Вот, пожалуй, и все. Представление о подобного класса программах вы получили, а посему буду считать свою задачу выполненной. Успехов вам в настройке компьютера! Andy Mad, andy_dim@tut.by (c) компьютерная газета


Компьютерная газета. Статья была опубликована в номере 50 за 2000 год в рубрике soft :: системные программы

©1997-2024 Компьютерная газета