• Авторизация


Своп-файл - зло 25-08-2009 17:43 к комментариям - к полной версии - понравилось!


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

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

Казалось бы, своп-файл задумывался как временное решение проблемы нехватки памяти на старых компьютерах, когда она была еще дорогая. Однако даже с ростом объемов памяти компьютеров в 1000 раз за последние 15 лет; даже несмотря на то, что объемы оперативной памяти сегодня в разы превышают емкость тогдашних дисков -практика использования своп-файлов так и не отмерла. Более того, она получает постоянное развитие. Стратегии реализации своп-файлов постоянно усложняются. Так, например, система использует своп-файл даже тогда, когда свободная оперативная память еще не исчерпана. Система как бы "превентивно" выгружает в своп-файл те страницы оперативной памяти, которые редко используются программами, тем самым освобождая память и несколько оттягивая момент ее исчерпания.

Некоторые придерживаются мнения, что наличие своп-файла УСКОРЯЕТ работу операционной системы. Так, в частности, когда пользователь изъявляет желание отключить своп-файл, Windows выводит на экран предупреждение, что это может ухудшить производительность. "Как так может быть?" - спросит читатель. "Ведь расширение оперативной памяти за счет медленного диска может только замедлить, но никак не ускорить работу системы!". Ответ будет приведен ниже (вместе с разоблачением).

Во всех современных операционных системах используется еще один, в чем-то родственный механизм: кэширование диска. Области диска, к которым программы часто обращаются, временно сохраняются в оперативной памяти. Тем самым существенно ускоряется обращение к этим частям диска и повышается быстродействие всей системы и отдельных программ. Я помню существенную разницу в быстродействии MS-DOS, в зависимости от того, запущен ли драйвер кэширования диска SMARTDRV.

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

Эффективность кэширования диска зависит от объема используемой для этого оперативной памяти. Чем он больше - тем потенциально эффективнее кэширование. Например, программа обратилась к сектору диска по номеру A. Сектор A при этом будет помещен в кэш. Но если программа больше к этому сектору долго не обращалась, а в системе присутствовала дисковая активность, то сектор A будет вытеснен из кэша другими секторами, обращение к которым шло в последнее время. И если после этого программа снова обратится к сектору A, то его придется заново считывать с диска. Кэш не сработал. А если бы объем кэш диска был больше, то этого могло и не произойти.

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

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

Именно в этом и заключается обоснование мнения, что "своп-файл повышает производительность системы".

Современные ОС (Windows, Linux) реализуют эту стратегию дополнительно к вышеописанному "превентивному" использованию своп-файла. Поэтому даже на тех компьютрах, где объема оперативной памяти достаточно для вмещения всех запущенных программ, своп-файл постоянно используется.

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

Почему?

Увеличение объемов оперативной памяти, используемой для кэширования диска, ощутимо повышает производительность лишь до определенного предела. Начиная с этого предела потери в производительности от своп-файла будут превосходить выигрыш от кэширования. Особенно это проявляется тогда, когда программы обращаются к большим файлам и только один раз. Например, я запускаю обработку звука или видео. Программа считывает один раз исходный файл и записывает один раз результирующий файл. Файлы эти большие, и никакого толку от помещения их в кэш нет, потому что повторного обращения к ним не будет. Но система же не знает, что я планирую делать дальше и, следуя стратегии "дисковый кэш превыше всего", она выгружает из памяти все, что только можно, в своп-файл. В результате наблюдаются тормоза во время и после обработки звука/видео, когда пытаешься переключиться на другие программы.

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

Аналогично при записи больших файлов. Если при записи маленького файла стратегия отложенной записи позволит быстрее освободить ту программу, которая его записывает, то при записи больших файлов это не работает. Сначала, когда программа только начинает запись, данные "уходят" быстро, потому что они попадают в кэш. Но когда доступные размеры кэша будут исчерпаны, приходится все равно начинать запись на диск. И пока за счет записи на диск не освободится место в кэше, то программу, генерирующую данные, приходится задерживать.

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

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

Поэтому вывод однозначный: своп-файл - отключить. Если у вашего компьютера имеется хотя бы 1Гб оперативной памяти с Windows XP - то попробуйте и вы!
вверх^ к полной версии понравилось! в evernote
Комментарии (7):
Пчёлы 26-08-2009-11:43 удалить
Вообще было бы полезно завести в ОС опцию, позволяющую управлять свопом в рамках конкретной программы. Т.е. как режим совместимости — хочу включаю, хочу нет. Тогда ресурсоемким программам (в т.ч. играм) можно было бы выставить опцию использовать файл подкачки, а стандартным офисным приложениям — нет. А дергать его туда-сюда вручную в зависимости от задач — накладно слишком, ИМХО.
Optical_Race 26-08-2009-16:19 удалить
Я использую файл подкачки в одном-единственном случае. А именно - нехватки памяти. Когда даже после закрытия всех ненужных приложений (в том числе фоновых) нужная программа не может выполнить свою работу. Такое у меня случается крайне редко (2Гб ОЗУ). Как правило, это собственные программы, написанные на Матлабе, причем написанные криво (если их оптимизировать, то они не будут столько памяти жрать).

Интернет експлорер 8 жрет очень много памяти. Там теперь реализовано разделение страниц между процессами. На каждую открытую закладку запускается новый iexplore.exe, отжирающий около 45Мб памяти. Мне удалось настройками реестра отключить это расточительство, теперь у меня на каждое открытое окно IE приходится около 45МБ плюс 2-3Мб на каждую новую закладку.
02-03-2016-20:38 удалить
Эта статья написана от непонимания назначения и функций своппинга. А всё просто, если представлять себе вращение позиционеров и головки дисковода.
02-03-2016-20:45 удалить
1-2 гигабайта для нынешних программ видеомонтажа это ничто. Для того, чтобы скорость позиционирования и чтения видеофайла в разжатом виде не падала и компьютер не зависал при каждом движении курсора намертво, вам без своп-файла потребуются терабайты оперативной памяти.
Optical_Race 02-03-2016-21:28 удалить
Ответ на комментарий # Боюсь, что вы ошибаетесь. Но если настаиваете - то поясните пожалуйста, что именно я, по-вашему, не понимаю, и укажите на ошибки в рассуждениях.
Optical_Race 02-03-2016-21:32 удалить
Ответ на комментарий # Посмотрите на дату публикации и задумайтесь. Может быть, вам стоило еще лет 10 подождать и тогда заявить, что 1 гигабайт - это ничто? Тогда, вероятно, оперативная память и будет терабайтами измеряться.

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


Комментарии (7): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Своп-файл - зло | Optical_Race - Дневник Optical_Race | Лента друзей Optical_Race / Полная версия Добавить в друзья Страницы: раньше»