- Все о пространстве подкачки в ОС Линукс
- Раздел подкачки
- Файл подкачки (Swap file)
- Какого размера должно быть пространство подкачки?
- Заключение
- Какого размера должен быть файл подкачки страниц или раздел Swap?
- Назначение файла подкачки страниц или раздела swap
- Другое использование файла подкачки страниц и раздела swap
- Конкретный вопрос: Сколько оперативной памяти вы используете?
- Windows может управлять этим автоматически
- В Linux необходимо принимать решение
Все о пространстве подкачки в ОС Линукс
Оригинал: All about Linux swap space
Автор: Gary Sims
Дата: 3 декабря 2007
Свободный перевод: Алексей Дмитриев
Дата перевода: 6 декабря 2007
При копировании материала обязательны указание автора, переводчика и ссылки на оригинал статьи и настоящую страницу как первоисточник перевода!
В случае, когда компьютер должен выполнить программу, размер которой превышает физический объем оперативной памяти, современные операционные системы прибегают к технологии подкачки, или своппинга. При этом блоки памяти временно сохраняются на жестком диске, а освободившийся объем оперативной памяти используется для обработки другой информации. В настоящей статье рассмотрены несколько приемов, которые могут помочь вам лучше управлять подкачкой на Линукс-системах и получить наибольшую производительность подсистемы своппинга.
Линукс разделяет доступную физическую оперативную память (RAM — random access memory) на блоки, называемые страницами. Своппинг — это процесс, при котором страница памяти копируется в заранее заготовленное место на жестком диске, называемое пространством подкачки, чтобы освободить данную страницу памяти для новой информации. Сумма объемов физической оперативной памяти и пространства подкачки называется объемом доступной виртуальной памяти.
Подкачка необходима по двум причинам. Во-первых, когда системе требуется больше памяти, чем физически доступно, ядро переносит из памяти на диск наименее используемые страницы и отдает освободившуюся память тому приложению (процессу) который нуждается в ней немедленно. Во-вторых, значительное количество страниц памяти задействуется приложениями только во время их загрузки, и может больше не понадобиться по окончании процесса инициализации. Система может откачать эти страницы на диск, освободив тем самым память для других приложений, или даже для дискового кэша.
Однако подкачка имеет и оборотную сторону. По сравнению с памятью, диск работает очень медленно. Скорость памяти измеряется в наносекундах, тогда как скорость диска в миллисекундах, получается, что доступ к диску может быть в десятки тысяч раз медленнее доступа к физической памяти. Чем больше происходит подкачки, тем медленнее работает система. Иногда чрезмерный своппинг приводит к пробуксовке, когда страница откачивается, затем тут же закачивается обратно, потом снова откачивается и так далее. В такой ситуации система борется за свободную память, «гоняя» приложение на месте. В такой ситуации только добавление дополнительной оперативной памяти может помочь.
В Линуксе пространство подкачки бывает двух видов: раздел подкачки (swap partition) и файл подкачки (swap file).
Раздел подкачки — это независимая секция жесткого диска, используемая исключительно для подкачки, никаких других файлов там нет. Файл подкачки — это файл особого типа внутри файловой системы, среди прочих файлов всех других типов. Чтобы узнать каким пространством для подкачки вы располагаете, наберите в командной строке:
В ответ вы получите что-то типа:
Каждая строка относится к отдельному пространству подкачки, имеющемуся в системе. В данном случае строка всего одна. Поле ‘Type’ (Тип) говорит, что мы имеем раздел (partition), а не файл. Поле ‘Filename’ сообщает, что этот раздел находится на диске sda5. Поле ‘Size’ (размер) показывает размер раздела в килобайтах. Поле ‘Used’ (Использовано) сообщает, сколько килобайт пространства подкачки используется (в данном случае ноль). ‘Priority’ (Приоритет) сообщает, какое из пространств подкачки Линукс использует первым. Подсистема подкачки в линуксе имеет замечательное свойство: если вы смонтируете с одинаковым приоритетом два (или больше) пространств подкачки (желательно на разных устройствах), Линукс станет использовать их для подкачки поочередно, что существенно увеличит производительность своппинга.
Раздел подкачки
Для того чтобы добавить дополнительный раздел подкачки в свою систему, необходимо сначала подготовить его. Шаг первый — убедиться, что раздел помечен как swap partition (раздел подкачки). Шаг второй — создать на нем специальную файловую систему — swap filesystem. Чтобы удостовериться, что раздел помечен как swap, с правами root (суперпользователя) наберите команду:
Замените /dev/hdb на то устройство, которое хотите проверить. В ответ получите что-то вроде:
Если раздел не помечен как Linux swap, то придется изменить его с помощью программы fdisk, используя опцию ‘t’. Будьте предельно осторожны при работе с разделами, если не хотите по ошибке удалить важный раздел, или переформатировать системный раздел в раздел подкачки. Вся информация на swap-разделе будет потеряна, так что семь раз отмерьте, один раз отрежьте. Также имейте в виду, что Solaris помечает свои разделы тем же идентификатором, что Линукс — свои разделы подкачки (Linux swap), так что поостерегитесь случайно испортить раздел Solaris (если они у вас есть). Когда раздел помечен как swap, необходимо отформатировать его командой mkswap (make swap), опять же, как root:
Если не появляется сообщений об ошибках, значит ваш раздел отформатирован и готов к работе. Чтобы немедленно его активировать напечатайте:
Убедиться, что раздел используется, можно запустив команду swapon -s . Чтобы новый раздел автоматически подключался (монтировался) при запуске компьютера, нужно отредактировать файл /etc/fstab, который содержит список файловых систем, подключаемых (монтируемых) при загрузке. Формат каждой строки таков:
Так как пространство подкачки является специальным типом файловой системы, многие из этих параметров не понадобятся. Для раздела подкачки добавьте строку
/dev/hdb1 none swap sw 0 0
Здесь /dev/hdb1 — сам раздел подкачки, он не имеет специальной точки монтирования (mount point), следовательно, пишем none (нет). Его тип (type) — swap, обозначается опцией sw. Последние два параметра не используются, поэтому там нули.
Можно проверить без перезагрузки компьютера, будет ли ваш новый раздел подкачки автоматически подключаться. Для этого сначала отключим все пространства подкачки командой swapoff -a , затем обратно подключим все пространства подкачки, перечисленные в /etc/fstab командой swapon -a , затем проверим, что именно подключилось, командой swapon -s .
Файл подкачки (Swap file)
Кроме разделов подкачки, Линукс поддерживает также файлы подкачки, которые можно создавать, подготавливать и монтировать способом, похожим на вышеописанный. Преимущество файлов подкачки в том, что не нужно искать свободный раздел или создавать новый для увеличения пространства подкачки.
Для создания файла подкачки используйте команду dd , которая «умеет» создавать пустые файлы. Для создания файла в 1Гб напечатайте:
dd if=/dev/zero of=/swapfile bs=1024 count=1048576
Здесь: /swapfile — имя файла подкачки, а число 1048576 — это размер файла в килобайтах (т.е. 1Гб) Подготавливаем файл подкачки при помощи команды mkswap, также как поступали с разделом, но на этот раз указываем имя файла:
Аналогично монтируем его командой swapon:
Строка в файле /etc/fstab для файла подкачки выглядит так:
Какого размера должно быть пространство подкачки?
В принципе, возможно использовать Линукс систему вообще без подкачки, и система будет работать хорошо, если у нее большая оперативная память. Но, если, в один прекрасный момент, этой памяти не хватит, то систему ждет крах — ей просто не останется шансов. Так что советую иметь пространство подкачки, особенно в наши дни, когда место на винчестере сравнительно дешево.
Ключевой вопрос — сколько? Старые версии Unix-подобных операционных систем (такие как Sun OS и Ultrix) рекомендовали пространство подкачки вдвое или втрое превышающее размер оперативной памяти. Современные разработки (такие как Линукс) не требуют так много, но могут использовать его, если им дадут. Правило тут такое: 1) для настольных систем выделяйте пространство подкачки равное удвоенному размеру оперативной памяти, это позволит вам одновременно запускать много приложений (многие из которых, будучи неактивны, легко могут быть откачаны на диск, освободив память для активных); 2) для сервера выделяйте меньше пространства подкачки (около половины размера оперативной памяти), так, чтобы обеспечить при необходимости возможность своппинга, но следите за использованием пространства подкачки, и при необходимости наращивайте оперативную память (RAM); 3) для старых компьютеров с маленьким объемом оперативной памяти (скажем, только 128Мб), выделяйте столько пространства для подкачки, сколько сможете, вплоть до 1Гб.
Ядро Linux 2.6 добавило новый параметр, называемый swappiness (перевода не существует), позволяющий администратору регулировать то, как Линукс оперирует с пространством подкачки. Это число от 0 до 100. В общих чертах, чем больше это число, тем больше страниц откачиваются из оперативной памяти на диск, а чем меньше значение swappiness, тем большее число приложений остаются в оперативной памяти, даже если они неактивны. Разработчик ядра Andrew Morton утверждает, что выставляет на своих десктопах swappiness на высочайший уровень — 100, говоря при этом: «Я считаю, что не следует ограничивать ядро в его стремлении откачивать мусор. Вы же не хотите, чтобы сотни мегабайт памяти, занятой раздувшимися приложениями, без пользы зависли в вашей машине. Выгрузите их на диск, а память используйте на что-нибудь полезное». У идеи Мортона есть и оборотная сторона: если память освобождается слишком быстро, то время отклика приложений возрастет, так как при вызове приложения, система должна будет сначала закачать его обратно в память, что создаст ощущение медлительности.
Значение swappiness по умолчанию равно 60. Можно изменить его временно (до следующей перезагрузки) командой от имени root:
echo 50 > /proc/sys/vm/swappiness
Если хотите изменить его на постоянной основе, тогда нужно изменить параметр vm.swappiness в файле /etc/sysctl.conf
Заключение
Управление пространством подкачки является важным аспектом системного администрирования. Хорошо спланированный и правильно используемый своппинг дает много преимуществ. Не бойтесь экспериментировать и постоянно ведите мониторинг своей системы, чтобы убедиться, что вы достигли именно того результата, к которому стремились.
Источник
Какого размера должен быть файл подкачки страниц или раздел Swap?
Согласно старому правилу ваш файл подкачки страниц или раздел swap должен быть «вдвое или в 1,5 раза больше размера оперативной памяти». Но в случае, если у вас 16 Гб оперативной памяти, вам действительно нужен файл подкачки страниц или раздел swap размером в 32 Гб?
Вам, вероятно, не потребуется файл подкачки или раздел swap такого размера, что хорошо, поскольку в современном компьютере может быть твердотельный накопитель очень небольшого размера.
Назначение файла подкачки страниц или раздела swap
Во-первых, давайте вспомним о действительном назначении файла подкачки страниц в Windows или раздела swap в Linux. В обоих случаях вашему компьютеру предоставляется дополнительная рабочая память. Например, если у вашего компьютера есть 2 Гб оперативной памяти и вы открываете большое количество программ или файлов, компьютеру, возможно, потребуется в рабочей памяти хранить 3 Гб данных. Компьютер запоминает этот дополнительный 1 Гб данных в файле подкачки страниц или разделе swap. Файл подкачки страниц или раздел swap выступают в качестве области «переполнения», в которой находятся такие дополнительные данные. Ваш компьютер автоматически передает эти данные обратно в оперативную память, когда они должны использоваться, и перемещает эти данные в файл подкачки страниц или раздел swap в случае, когда эти данные не используются.
Если вы использовали старый настольный компьютер, вы могли видеть, что случается через некоторое время после того, как вы к закрываете (минимизируете) окно программы, работающей на рабочем столе. Когда вы его немного позже открываете, требуется некоторое время для того, чтобы оно появилось, и вы слышите, как работает ваш жесткий диск, что подтверждается активным миганием светодиода активности диска — данные перемещаются из вашего файла подкачки или раздела swap в оперативную память. Оперативная память работает гораздо быстрее, чем файл подкачки или раздел swap. В современных компьютерах, имеющих оперативную память достаточного размера для хранения программ в оперативной памяти, такая ситуация встречается намного реже.
В большинстве приложений предполагается, что они получать столько памяти, сколько они запросят. Если ваша оперативная память занята и у вас нет файла подкачки, а вы открываете еще одну программу, эта программа, скорее всего, работать не будет. Когда файл подкачки имеется, то с программами, которым требуется дополнительная память, такого не произойдет.
Другое использование файла подкачки страниц и раздела swap
В системах Windows и Linux файл подкачки страниц и пространство swap также используются для других целей:
- Аварийный дамп Windows: В Windows файл подкачки страниц используется для сохранения аварийных дампов. Чтобы создать полный дамп памяти, файл подкачки должен быть размером не меньше размера физической памяти + 1 МБ. Для дампов памяти ядра, файл подкачки страниц должен иметь размер не менее 800 Мб на системах с оперативной памятью размером 8 Гб или больше. Большинству людей не нужен полный дамп памяти, но дамп ядра может оказаться полезным. Необходимые 800 Мб файла подкачки сравнительно небольшие, но от вас потребуется его включить и не отключать. Эта информация взята из поста Understanding Crash Dumps (Что такое аварийный дамп) на сайте Microsoft TechNet.
- Режим сна в Linux (hibernate): В системах Linux режим hibernate — это состояние, когда при отключении системы содержимое оперативной памяти вашей системы сохраняется на диске для того, чтобы его можно было снова загрузить при загрузке системы. Содержимое оперативной памяти системы сохраняется в разделе swap. Этот также может называться как «приостановка работы с сохранением состояния на диске». Возможно, вы решите, что для того, чтобы использовать режим, вам нужен раздел swap такого же размера, как размер оперативной памяти, но, на самом деле, вам просто нужен раздел swap такого размера, сколько оперативной памяти вы используете. Так что если вы регулярно используете только 4 Гб вашей оперативной памяти размером 16 Гб, вам для режима hibernate было бы достаточно раздела swap размером в 4 Гб. Но если вы используете более 4 Гб оперативной памяти, вы сможете воспользоваться режимом hibernate. Часто будет надежным выбрать раздел swap, равный по размеру вашей оперативной памяти. Обратите внимание, что это касается только режима hibernate — если вы не планируете его использовать, вам не нужно об этом беспокоиться. В Windows в режиме hibernate данные сохраняются в файле C:\hiberfil.sys, поэтому в случае использования режима hibernate в Windows файл подкачки страниц не используется.
Конкретный вопрос: Сколько оперативной памяти вы используете?
Нет единого строгого и быстро применяемого правила, которое бы показало вам, какого размера вам нужен файл подкачки страниц или раздел swap. Ответ зависит от того, что вы делаете на вашем компьютере и сколько памяти вы используете. Например, если у вас есть 8 Гб памяти, но вы никогда не используете больше, чем 8 Гб, вы могли бы вообще обойтись без использования страниц подкачки или раздела swap — но, скорее всего, вам, в конечном итоге, потребуется файл или раздел размером более 8 Гб. С другой стороны, у вас, возможно, есть компьютер с 64 Гб памяти и он может регулярно работать с наборами данных размером в 100 Гб. Тогда вам, вероятно, захочется иметь на всякий случай файл подкачки размером по крайней мере в 64 Гб. Так для компьютера с 8 Гб оперативной памяти может не потребоваться файл подкачки, а компьютеру с 64 Гб оперативной памяти, возможно, потребуется огромный файл подкачки. Все зависит от того, что делает компьютер.
Большинство не сможет предсказать, какого размера может потребоваться файл подкачки страниц или раздел swap. Даже если вы прямо сейчас посмотрите, сколько используется памяти, никто не знает, сколько вашим программам потребуется памяти через неделю или через месяц.
Windows может управлять этим автоматически
В Windows файлом подкачки страниц является файл C:\pagefile.sys. По умолчанию Windows автоматически управляет размером этого файла. Сначала он маленький и он может расти ву случае, если это вам нужно. Мы рекомендуем разрешись системе Windows самостоятельно управлять размером файла подкачки страниц. Файл не должен занимать много места на системном диске. Если ваш файл подкачки страниц занимает на системном диске действительно много места, то это потому, что в прошлом вам потребовался большой файл подкачки, и система для вас автоматически увеличила его размер.
Например, в Windows 8.1, имеющей 4 Гб оперативной памяти, наш файл подкачки страниц имеет в настоящее время размер только 1,8 ГБ. Нам не нужно использовать всю оперативную память и Windows до тех пор, пока нам не потребуется больше памяти, использует небольшой файл подкачки страниц.
Вы не получите выигрыша по производительности в случае, если откажетесь от использования файла подкачки страниц, а лишь, вполне вероятно, столкнетесь с проблемами, вызванными нестабильностью системы, обусловленной сбоем работы программ в случаях, когда вы пользуетесь всей оперативной памятью. Вы бы могли отказаться от использования файла подкачки страниц с тем, чтобы сохранить место на системном диске, но этого, как правило, делать не стоит.
Если вы хотите самостоятельно установить размер файла, что делать не рекомендуется, обязательно имейте в виду то, что действительно имеет значение именно то, сколько памяти используется, а не только то, каков размер оперативной памяти. В документации Microsoft указывается, что:
«Причина, по которой выбирается размер файла подкачки страниц, не изменилась. Его размер всегда выбирался для поддержки использования аварийного дампа системы, если это было необходимо, или преодоления ограничений системы в случае, если требовалось это. Например, если установлен большой объем физической памяти, то для того, чтобы поддержать работу систему в момент пиковой нагрузки, файл подкачки станиц может не потребоваться. Для того, чтобы это сделать может быть достаточно имеющейся физической памяти».
Другими словами, если говорить о том, сколько памяти вам, на самом деле, нужно, это когда из-за имеющегося объема памяти в системе возникают ограничения.
В Linux необходимо принимать решение
В Linux эквивалентом в файл подкачки страниц Windows, является раздел swap. Поскольку это раздел, а не просто файл, вы должны принять решение о размере раздела swap при установке Linux. Конечно, можно позже изменять размеры разделов, но в этом случае работы будет больше. Linux не может вместо вас автоматически управлять размером раздела swap.
В каждом дистрибутиве Linux используется свой собственный инсталлятор, и каждый дистрибутив следует определенной логике, заложенной в его инсталляторе, согласно которой автоматически делается выбор подходящего размера для раздела swap. Для того, чтобы принять решение о размере раздела swap, в дистрибутивах Linux обычно использует размер оперативной памяти. Когда устанавливается система Ubuntu, типичный размер раздела swap оказывается равен размеру оперативной памяти плюс дополнительно пол гигабайта или что-то около этого. Это гарантирует, что режим сна hibernate будет работать должным образом.
Если вы в инсталляторе Linux вручную задаете размеры разделов, то размер оперативной памяти плюс 0,5 ГБ является хорошим правилом, которое действительно позволит вам использовать в системе режим hibernate. Этого, как правило, должно быть более чем достаточно для режима подкачки. Если у вас есть оперативная память большого объема, например, 16 Гб или что-то подобное, и вам не требуется режим hibernate, но нужно дисковое пространство, вы могли бы, вероятно, обойтись небольшим разделом swap объемом в 2 Гб. Опять же, это зависит от того, сколько памяти компьютера будет использоваться. Но на всякий случай хорошо иметь пространство подкачки некоторого размера.
Старое правило «удвоенный размер оперативной памяти» применяется к компьютерам с 1 или 2 Гб оперативной памяти. О том, какого размера вам потребуется файл подкачки страниц или раздел swap, единого для всех ответа нет. Все зависит от программ, которыми вы пользуетесь, и от того, что этим программам требуется. Если у вас есть сомнения в этом вопросе, то почти всегда будет хорошим решением придерживаться правила, используемому в вашей системе по умолчанию.
Источник