Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы. Персонализация и виртуальная память в Windows 7.pdf
Скачиваний:
37
Добавлен:
11.03.2016
Размер:
1.52 Mб
Скачать

2.2.Оптимизация виртуальной памяти в Windows 7

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

Большинство таких программ созданы с целью заработка денег и память они вовсе не оптимизируют в лучшем случае, а в худшем ещё и замедляют работу системы. Такие программы основываются на неверном представлении пользователей о механизме работы памяти — а именно на вопросе «доступной памяти» — и обманным образом продают свои продукты. Подобного вида шарлатанство не редкость и имеет термин snake oil, что означает

«змеиное масло» как лекарство от всех болезней и использовалось ещё до 19-го века.

В Windows свободная память расценивается как выброшенная на ветер, так как она используется для кэширования в Standby листе, о чём мы говорили в предыдущем разделе.

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

Данные программы обычно действуют тремя способами:

Вызывают EmptyWorkingSet или SetProcessWorkingSetSize или

SetProcessWorkingSetSizeEx WinAPI функцию, заставляя менеджер производить тримминг [19]. Данные функции удаляют из рабочего набора столько страниц,

сколько возможно [20d].

Вызывают VirtualAlloc WinAPI, запрашивая огромное количество памяти для себя,

заставляя Windows освобождать для этого место в ОЗУ (при чём,

инициализированное нулями), после чего они сразу же вызывают VirtualFree

WinAPI, освобождая это количество памяти, оставляя его пустым [19].

Выполняют работу с использованием своих собственных функций, вместо WinAPI.

Как говорилось ранее, тримминг производится следующим образом: рабочий набор данного процесса переносится в Modified лист, уменьшая используемую память. Для этого нужно просто указать метку в страницах (отвечающую за принадлежность к определённому листу) и на производительности это никак не сказывается. Далее эта память должна быть перемещена в Standby лист. Для этого все «грязные» страницы должны быть скопированы в файл подкачки, ведь, как мы знаем, Standby лист ненадёжно хранит данные и в любой момент может переопределить назначение своих страниц. Этот способ самый щадящий, так как большинство страниц всё равно остаётся в ОЗУ, хоть и в листе ожидания, и при надобности они могут быть быстро возвращены обратно.

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

Страница 19 из 31

памяти, из-за чего резидентную часть некуда будет перемещать внутри ОЗУ — только на диск. Этот способ вредит больше, чем первый, так как никаких кэшированных данных в ОЗУ теперь не находится и понадобится много времени, чтобы система смогла заново просчитать или загрузить (если это, по мнению ОС, будет быстрее, чем просчёт) данные из файла подкачки.

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

2.3.Программа-оптимизатор памяти Windows 7

Изучая эту проблему, я наткнулся на одну очень интересная программу, которая

называется CleanMem. Интерфейс представлен на рис. 15.

Рисунок 15 [21a]

Страница 20 из 31

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

По словам её создателя, главная идея программы в том, чтобы поддерживать некий объём доступной оперативной физической памяти, что должно уменьшить количество жёстких страничных прерываний (hard page faults). И правда, как мы выяснили, при таком раскладе Windows незачем использовать файл подкачки, кроме случаев, когда процессы сами того просят, что, впрочем, не редкость. Также, при неком объёме доступной оперативной физической памяти тримминг не производится. Но механизм «освобождения» памяти всё равно заставляет насторожиться. Автор же убеждает, что его программа абсолютно безопасна, так как все свои действия совершает через WinAPI [21d], что,

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

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

Сборка мусора, конечно, производится системой, но не всегда эффективно. Что делает данная программа — это заставляет Windows проводить сборку мусора путём вызова функции EmptyWorkingSet [21c]. Концепция в том, что рабочие наборы перемещается в

Standby лист, а процессы немедленно отзывают обратно свои страницы, но только те,

которые они действительно используют. Таким образом, доступная ОЗУ расширяется без вреда системе, так как перемещение внутри ОЗУ практически мгновенное. Также, автор утверждает [21c], что функция EmptyWorkingSet, которую он использовал в CleanMem, в

отличие от SetProcessWorkingSetSize, которую использовал его конкурент в SweepRAM,

не записывает ничего в файл подкачки, что он проверил опытным путём. Однако, на сайте

Microsoft, в описании этих функций, про файл подкачки вовсе ничего не сказано, что больше, там сказано, что эти функции взаимозаменяемые. Также, программа умеет чистить системный кэш, подобно утилите от Microsoft CacheSet v1.0 [21e], которая работает через вызов функций NtQuerySystemInformation и NtSetSystemInformation [20f]. При больших объёмах работы с жёстким диском, например, при дефрагментации или резервном копировании, системный кэш имеет свойство заполняться, что отрицательно сказывается на производительности системы. Но эта проблема случается очень редко, если вообще случается, учитывая развитие современной ОС Windows, а при постоянной очистке системного кэша производительность вовсе может уменьшиться, но иногда это полезно.

Проведём эксперимент с этой программой:

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

Запечатлим состояние виртуальной памяти сразу после запуска CleanMem

Запечатлим конечное состояние виртуальной памяти после запуска CleanMem,

когда система придёт в «состояние покоя»

Страница 21 из 31

Сделаем статистический вывод о полезности работы программы

Состояние системы будет определять, как данные таблиц «глобального использования памяти» и «графов» из монитора ресурсов и окна информации об ОЗУ из мини монитора (приложение А). Наиболее важными параметрами, которые мы позже заключим в таблицу, являются:

1.Modified лист.

2.Доступная физическая оперативная память (секция Available в таблице

«глобальное использование памяти» в мониторе ресурсов)

3.Используемая физическая оперативная память (секция In Use в таблице

«глобальное использование памяти» в мониторе ресурсов)

4.Commit Total (то есть общий коммит системы; в окне информации от ОЗУ из мини монитора)

5.Current pagefile usage (текущее использование файла подкачки; в окне

информации об ОЗУ из мини монитора)

Посмотрим на снимки экрана (отредактированные для наглядности), расположенные друг под другом в три строки, где верхняя отвечает за состояние системы до запуска очистки,

средняя за состояние сразу после, нижняя за конечное состояние, а графики отвечают за первые два состояния (рис. 16):

Начальное состояние

Состояние сразу после очистки

Конечное состояние

Рисунок 16

Из рисунка видно, что произошёл процесс тримминга, ровно как мы описывали раньше.

Используемая ОЗУ упала с 5301Мб до 1752Мб. Доступная память выросла с 2767Мб до

3248Мб. Но на этом положительные стороны заканчиваются. Большинство информации оказалось «грязной» и с течением времени (около часа) файл подкачки вырос ровно настолько, насколько вырос Modified лист сразу после «оптимизации», при этом, после копирования, этот лист опустел за счёт роста Standby листа.

Страница 22 из 31

Занесём наиболее важные значения в таблицу:

 

Modified лист,

Available,

In Use,

Commit

Current pagefile

 

Мб

Мб

Мб

Total, Гб

usage, Мб

 

 

 

 

 

 

Начальное состояние

77

2767

5301

6,77

306

 

 

 

 

 

 

Состояние сразу после

3145

3248

1752

6,77

312

очистки

 

 

 

 

 

 

 

 

 

 

 

Конечное состояние

62

5052

3031

6,82

2649

 

 

 

 

 

 

Как мы могли заметить, утечка памяти действительно имеет место, ведь сразу после очистки в используемую память было отозвано лишь 33% страниц, а другие 66% были в памяти, как оказалось, без особой надобности. К концу эксперимента использование файла подкачки сильно возросло, и этому виной, очевидно, данная «оптимизация».

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

не в файл подкачки. … задача CleanMem — помочь избежать использования файла подкачки. [21d]», она, как мы выяснили как раз связана, но косвенно, ведь она обращается к менеджеру памяти через WinAPI, а уже он и работает с файлом подкачки, потому что нельзя освободить память без её резервной копии на диске, иначе приложения будут подвержены риску потери данных и краху. В данном случае, автор очень хитро использует терминологию Windows: «тримминг не связан с файлом подкачки [20a]», а функция

EmptyWorkingSet как раз заставляет менеджер делать тримминг, но тот, в свою очередь,

перемещая страницы в Modified лист, заставляет менеджер обрабатывать hard page fault, а

о прерываниях речь не заходила. Но некоторые многолетние (этой программе уже более 7

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

др. темы на форуме 21c) о работе этой программы и их можно понять: у сервера очень высокая нагрузка на физическую оперативную память и такая характеристика, как доступная память в ОЗУ, ценится очень и очень высоко, тогда как жёсткие диски там очень быстрые и запись в файл подкачки (которую сам Windows здорово оптимизирует,

периодически записывая страницы крупными порциями в фоновом режиме) не сильно сказывается на общей производительности. Выходит, владельцу сервера намного выгоднее потратить $5 на эту программу и производить выборочную очистку определённых процессов при достижении потребления памяти у них определённого значения (см возможности pro версии в приложении А), чем покупать новое оборудование.

Страница 23 из 31

6. ВЫВОД

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

Использование программ-оптимизаторов памяти чаще всего либо бесполезно, либо вовсе приносит вред, так как освобождение памяти имеет обманчивый эффект, который неочевиден обычному пользователю. Современные ОС прекрасно справляются с менеджментом памяти. Если говорить о серверных станциях, то освобождение используемой памяти в ОЗУ от утечек памяти некоторых процессов оказывается весьма полезным инструментом. Также, говоря о портативных устройствах, такие программы могут оказаться полезными в плане экономии электроэнергии: например, программы типа

«task killer» (дословно убийца задач) на смартфонах при каждом блокировании девайса закрывают все фоновые приложения. Оптимизация памяти — понятие относительное — в

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

Однако, отдельные ОС не используют некоторые концепции виртуальной памяти,

например, iOS убивает процесс, если кончается физическая память, выводя перед этим некоторые предупреждения, а OS X 10.9 использует компрессию устаревших страниц в ОЗУ, вместо файла подкачки, что выходит быстрее, чем обращение к диску [17a].

Страница 24 из 31

7. ИСТОЧНИКИ

*указаны гиперссылки

1.fastvista.ru — «Оптимизация и настройка Windows 7 …»

2.komputer-info.ru — «Оптимизация Windows 7 или как ускорить компьютер»

3.windows.microsoft.com

a.«Обеспечение оптимальной производительности Windows»

b.«Способы повышения производительности компьютера»

4.webexpertu.ru — «Как ускорить работу компьютера на Windows 7 (части 1-3)»

5.esate.ru — «Оптимизация windows 7. Все об оптимизации windows 7.»

6.youtube.com — «20 Amazing Windows 7 Performance Boosting Tips»

7.slideshare.net — «8 Quick Tips to Optimize and Speed up Windows 7»

8.poweradmin.com — «Top 12 Tips: How to Optimize and Speed Up Windows 7 Performance»

9.sevenforums.com — «How to Optimize Windows 7»

10.wikihow.com — «How to Optimize Windows 7»

11.pcworld.com — «Optimize Your Windows 7 PC»

12.developers.google.com — «Public DNS»

13.techrepublic.com

a.«10 ways to speed up Windows 7»

b.«Track stability in Windows 7 with the Reliability Monitor»

c.«Learn how to use the Windows 7 Resource Monitor for effective troubleshooting»

d.«Investigate memory usage with Windows 7 Resource Monitor»

14.wikipedia.org

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

b.Подкачка страниц

c.Page replacement algorithm

d.Virtual address space details

e.Working Set

f.Кэш процессора

g.ReadyBoost

h.«Твикер»

15.lifehacker.com — «Five Best Windows 7 Tweaking Applications»

Страница 25 из 31

16.intuit.ru

a.Операционные среды, системы и оболочки (лекции 8, 9) — Назаров С.В

b.Основы операционных систем (Лекция 3) — Академия Intel

17.youtube.com

a.Virtual memory (части 1-14) — David Black-Schaffer

b.High Performance Computer Architecture: Part 4 (части 1-37, 43, 44, 46) — Georgia Tech

c.High Performance Computer Architecture: Part 3 (части 137, 142, 149) — Georgia Tech

18.cs.umd.edu — Virtual Memory (Charles C. Lin.)

19.howtogeek.com — Why Memory Optimizers and RAM Boosters Are Worse Than Useless

20.microsoft.com

a.MemorySizingGuidanceWin7.docx(копия документа на hitpages.com)

b.Pushing the Limits of Windows: Paged and Nonpaged Pool

c.Memory Pools

d.Working Set

e.File Caching

f.CacheSet v1.0

21.PcWinTech.com

a.CleanMem

b.CleanMem Help & Info

c.Forum: Need some info please.

d.About CleanMem

e.CleanMem Change Log

Страница 26 из 31