Shtsh 15.09.2010 21:10
Переводы — Всё о подкачке в Linux.
ОригиналПереведено при помощи сервиса translated.by инициативной группой переводчиков welinux при участии пользователей Shtsh, settler, zereal.
Linux делит физическую память (RAM, random access memory, память с произвольным доступом) на участки, называемые страницами. Свопинг - это процесс, когда страницы памяти копируются на заранее определённое место на жёстком диске, называемое областью подкачки (swap). Совместно физическая память и область подкачки составляют виртуальную память.
Свопинг необходим по двум важным причинам. Во-первых, когда системе требуется больше памяти, чем физически доступно, ядро выгружает в своп наименее используемые страницы и даёт память текущему приложению, которому память требуется немедленно. Во-вторых, значительное число страниц, используемых приложением, требуется только для их инициализации и после уже не нужны. Система может выгрузить эти страницы и освободить память для других программ или для дискового кеша.
Однако, у свопинга есть и отрицательная сторона. В сравнении с оперативной памятью, диски очень медленные. Время доступа к памяти измеряется в наносекундах, тогда как к дискам -- в миллисекундах, так что диски в десятки тысяч раз медленнее. В результате, чем чаще происходит свопинг, тем медленнее будет ваша система. Иногда излишний свопинг (trashing) возникает в случаях, когда страница выгружается, а затем очень быстро опять помещается в память и так происходит постоянно. В таких случаях система борется за свободную память и не даёт приложениям возможность работать одновременно. Единственная возможность помочь - добавить оперативной памяти.
В Linux есть две формы области подкачки: своп-раздел и своп-файл. Своп-раздел - это независимый раздел на жёстком диске, который используется исключительно для подкачки, никакие другие файлы не могут там располагаться. Своп-файл - специальный файл в файловой системе, который расположен среди системных файлов и данных.
Для того, чтобы посмотреть, какие области подкачки есть в системе, используйте команду swapon. Вывод будет примерно таким:
1 |
|
Каждая линия отображает отдельную область подкачки, используемую системой. Здесь поле "Type" отображает, что используется раздел, а не файл (подразумевается именно своп-файл, ведь раздел -- это тоже файл -- прим. перев.), в поле "Filename" мы видим, что что это /dev/sda5. Поле "Size" показывает размер в килобайтах, а поле "Used" отображает, сколько килобайтов используется системой (в данном случае 0). "Priority" указывает Linux, какую область подкачки использовать в первую очередь. Замечательной особенностью подсистемы подкачки Linux является то, что вы можете монтировать две (или больше) области подкачки (предпочтительно на разных устройствах) с одинаковым приоритетом, Linux разделит активность подкачки между ними, что может значительно ускорить быстродействие свопинга.
Раздел подкачки
Чтобы добавить своп-раздел в систему, сначала нужно его подготовить. Во-первых, нужно удостовериться, что раздел помечен как своп, во-вторых, нужно создать файловую систему своп-раздела. Чтобы проверить, помечен ли раздел как своп, выполните от имени суперпользователя:
1 |
|
Замените /dev/hdb тем разделом на жёстком диске, который вы собираетесь использовать как своп. Вывод должен быть похож на это:
1 |
|
Если раздел не помечен как своп, вам следует изменить это, запустив fdisk и используя меню, вызываемое клавишей "t". Будьте осторожны, работая с разделами - вы же не хотите по ошибке удалить важные разделы или случайно изменить идентификатор системного раздела на своп. Все данные на своп-разделе будут потеряны, так что несколько раз проверьте каждое сделанное изменение. Также заметьте, что Solaris использует для разделов тот же идентификатор что и Linux для swap, так что будьте осторожны и не убейте разделы Solaris.
После того, как разделы помечены как swap, вам нужно подготовить их, используя команду mkswap (make swap) с правами суперпользователя.
1 |
|
Если вы не увидите ошибок, значит область подкачки готова к использованию. Чтобы немедленно её активировать, введите
1 |
|
Вы можете проверить, что она используется, выполнив swapon -s. Чтобы область подкачки автоматически монтировалась при загрузке, нужно добавить запись в файле /etc/fstab, который содержит список файловых систем и областей подкачки, которые монтируются во время загрузке системы.
Так как область подкачки -- особый тип файловой системы, то многие параметры не используются. Для области подкачки добавьте:
1 |
|
где /dev/hdb1 - своп-раздел. У него нету точки монтирования, поэтому стоит "none". Тип раздела "swap" с опциями "sw", последние два параметра в данном случае не используются, поэтому стоит 0.
Чтобы проверить, примонтируется ли область подкачки автоматически, не перезагружаясь, можно выполнить swapoff -a (которая отключит все области подкачки) и затем swapon -a (которая примонтирует все области подкачки, описанные в /etc/fstab). После этого можно проверить при помощи swapon -s.
Файл подкачки
Кроме раздела подкачки, Linux также поддерживает файл подкачки, который вы можете создать, подготовить, и смонтировать похожим образом к тому как монтируется раздел подкачки. Преимущества файлов подкачки в том, что вам не нужно искать свободный раздел или переразбивать диск чтоб добавить дополнительную область подкачки.
Чтобы создать файл подкачки используйте команду dd, чтобы создать пустой файл. Для того чтоб создать файл размером 1 Гб, наберите:
1 |
|
/swapfile это имя файла подкачки, а число 1048576 - размер файла в килобайтах (равно 1 Гб).
Подготовьте файл подкачки, используя команду mkswap так же, как и при работе с разделом, но в этом случае используйте имя файла подкачки.
1 |
|
И так же примонтируйте его используя команду swapon:
1 |
|
Запись в файле /etc/fstab будет выглядеть так:
1 |
|
Какого размера должна быть область подкачки?
Можно запустить Linux и без области подкачки, и система нормально запустится если у вас много памяти -- но если у вас закончится физическая память, то система упадет, так как больше ничего не сможет сделать, поэтому рекомендуется иметь область подкачки, особенно ввиду того, что дисковое пространство достаточно дешевое.
Ключевой вопрос - сколько? Старые версии Unix-подобных операционных систем (такие как Sun OS или Ultrix) требовали в два-три раза больше объема области подкачки, чем размер физической памяти. Современные реализации (такие как Linux) не требуют так много, но они могут использовать его если настроить.
Надо руководствоваться следующим:
1) для настольных систем, используйте область подкачки с удвоенным размером физической памяти, так как это позволит запускать вам множество приложений (многие из которых могут простаивать, и легко перенесутся в область подкачки), освободив больше RAM для активных приложений;
2) для сервера, можно использовать меньшую область подкачки (допустим в половину размера физической памяти) - так вы будете иметь возможность использовать подкачку когда понадобится, но наблюдать за количеством используемой области подкачки и добавлять RAM, если потребуется;
3) для старых рабочих станций (скажем, со 128 Мб), используйте побольше области подкачки про запас, даже до 1 Гб.
В ядре версии 2.6 добавлен новый параметр, называемый swappiness, позволяющий администратору настраивать, как происходит свопинг в Linux. Это число от 1 до 100. Чем больше значение, тем больше страниц свопится, а чем меньше, тем меньше страниц попадает в область подкачки, даже если они простаивают. Разработчик ядра Эндрю Мортон сказал, что он запускает свой компьютер со значением 100, заявив: "Я считаю, что уменьшение свопинга ядра неправильно. Вы же не хотите, чтобы на машине были сотни мегабайт неиспользуемой памяти. Пускай убирается на диск, а память используется для чего-нибудь полезного."
Отрицательной стороной идеи Мортона, является то, что память свопится слишком быстро, в результате появляются задержки отклика приложения. Это происходит из-за того, что, при щелчке по окну приложения, системе нужно вернуть приложение из свопа в память, из-за чего заметны "тормоза".
Значение по-умолчанию 60. Вы можете временно (до перезагрузки) изменить его, введя с правами рута:
1 |
|
Если вы хотите изменить это навсегда, тогда задайте значение параметра vm.swappiness в файле /etc/sysctl.conf.
Заключение
Управление областью подкачки -- неотъемлемый аспект системного администрирования. Благодаря хорошо спланированной и корректно используемой подкачке можно получить множество преимуществ. Не бойтесь экспериментировать и всегда следите за своей системой, чтобы быть уверенным, что вы получаете нужный результат.
Если Вы особо не пользуетесь приложениями, которые едят оперативку, то можете поставить процентов 10.
Скажем, у меня нетбук с 2 гб оперативки. Сразу докупил, т.к. она быстрее свопа и отн. дешевая (1к.руб). Своп у меня 2.5Гб. Такой размер свопа нужен чтобы при саспендах нормально хранились данные из оперативки. На деле же никогда выше 600 метров не поднимается практически.
Вообщем, старайтесь избегать свопа, но если без него никак, но снизьте вероятность его использования.
Скажем, у меня нетбук с 2 гб оперативки. Сразу докупил, т.к. она быстрее свопа и отн. дешевая (1к.руб). Своп у меня 2.5Гб. Такой размер свопа нужен чтобы при саспендах нормально хранились данные из оперативки. На деле же никогда выше 600 метров не поднимается практически.
Вообщем, старайтесь избегать свопа, но если без него никак, но снизьте вероятность его использования.
Для обычных пользователей вариант по умолчанию всегда более предпочтительнее.
Ответ: нет.
Ответ: нет.
А что насчет спящего режима? Нужен, не нужен раздел подкачки. Я так разобраться внятно не смог.
Нужен. Должно работать и с файлом подкачки, я даже как-то разобрался как, но работало почемуто через раз и только с бубном. Так что если используешь hibernate, делай swap-раздел, сэкономишь кучу нервов.
А если например в данный момент используется полностью оперативная память и часть файла подкачки, как система поступает при переходе в hibernate? И используется ли своп при ждущем режиме?
для этого надо чтоб размер подкачки был больше размера памяти (какраз для таких случаев когда кроме оперативки занято еще и немного из подкачки). Только там наверно уже как повезет - смотря сколько занято.
Мне и четырёх гигов под своп (сколько оперативки) жаба душит, если честно, куда уж больше.
я сейчас точно не помню, курс "Операционные системы" был давно, но вроде бы посылается запрос всем приложения освободить как можно больше памяти. Кто-то реагирует на это, кто-то нет. Потом оперативная память скидывается в swap, нужый адрес (c которого потом стартовать) сохраняется и всё, poweroff. Если места не хватит, то hibernate обрывается и соответсвенно сейчас невозможен.
В standby память сохраняет все данные, т.е. остаётся под напряжением, проходит refresh. Процессор и остальная переферия выключены.
В standby память сохраняет все данные, т.е. остаётся под напряжением, проходит refresh. Процессор и остальная переферия выключены.
Лично мне нет. Одно дело когда рассказывают о своём экспириенсе. Там можно и вопрос задать, и дискуссию поднять. В перевод только текст. За ним ничего не стоит.. переводчики не являются тем у кого можно спросить по теме текста.
Может быть тогда сделать функционал типа "не показывать для меня блог БЛАБЛАБЛ". Просто получается функционал блогов не поддерживается в полной мере.И подписка мало на что влияет. Те кому интересно, могут подписаться на "переводы" и пусть он для них отображается, но те кому это неинтересно, не могут убрать этот контент для себя..
Может быть тогда сделать функционал типа "не показывать для меня блог БЛАБЛАБЛ". Просто получается функционал блогов не поддерживается в полной мере.И подписка мало на что влияет. Те кому интересно, могут подписаться на "переводы" и пусть он для них отображается, но те кому это неинтересно, не могут убрать этот контент для себя..
Зря Вы так, у нас люди не часто пишут технические статьи, так пускай хотя бы переводы будут, но конечно они не должны превосходить количество статей написанных пользователями (иначе welinux превратится в сборник переводов).
А вот сами переводы думаю следует выкладывать не в блоге "Переводы", а в соответствующем тематике статьи блоге, чтобы их потом было проще найти.
А вот сами переводы думаю следует выкладывать не в блоге "Переводы", а в соответствующем тематике статьи блоге, чтобы их потом было проще найти.
для этого есть таги, мелкие статьи возможно, большие технические тексты лучше всего будут себя чувствовать в блоге переводов =)
Зачем? Смысл же не только в самом факте перевода. Новая статья рождает дискуссии.
вот там выше затронул тему дискуссии..
хз кто минусы вам обоим влепил и непонятно за что.. ща плюсану :)
эти - с + что-то тоже поднадоели))
2Exelens нужен ребрендинг :D
хз кто минусы вам обоим влепил и непонятно за что.. ща плюсану :)
эти - с + что-то тоже поднадоели))
2Exelens нужен ребрендинг :D
Можно запустить Linux и без области подкачки, и система нормально запустится если у вас много памяти -- но если у вас закончится физическая память, то система упадет, так как больше ничего не сможет сделать
Система не упадёт, а откажет процессу в запросе на выделение памяти.
Многие программы адекватно реагируют на такую ситуацию и не падают.
Например, mysql не сдохнет, а откажется выполнить запрос выбросив исключение на клиенте. на которое клиентская программа может среагировать.
Другими словами , если я все правильно понял. Swappiness - это уровень свободной памяти, при котором система начнет активно сбрасывать память в своп. swappiness=100 - система отправляет данные в своп, swappiness=0 - система хранит данные в оперативе и в своп ничего не идет (или идет в том случае когда забита оперативка). Если оперативы много то значение надо выбирать ближе к 0, если мало то ближе к 100. Поправьте меня если я неправильно понял (время позднее мог и напутать), т.е. если мы ставим значение на пример 20... , то когда память будет заполнена на 80%, данные сверх 80 % буду записываться в своп, а 20 % останутся нетронутыми, для использования программами?
Вы же не хотите, чтобы на машине были сотни мегабайт неиспользуемой памяти. Пускай убирается на диск, а память используется для чего-нибудь полезного
Этот "жжж" неспроста (c). Память действительно можно использовать полезнее, чем держать в ней открытый pdf который ты читал месяц назад, но забыл закрыть. Например для кэша дисковых данных, которые сейчас нужнее (видео, музыка) или записываются. Т.е. даже если оперативы много, это не значит, что своп плохо.
На счёт swappiness, не совсем, но похоже: прото есть два варианта: мы начинаем свапить только когда нам действительно дальше некуда (1) или мы начитаем свапить заранее, например как-только страницу не запрашивали несколько секунд она идёт в свап (100). Ну и между этими двумя крайнястями это как-то раскидывается (по времени таймаута и свободной памяти).
> Память действительно можно использовать полезнее, чем держать в ней открытый pdf
> который ты читал месяц назад, но забыл закрыть.
Вот! Это одна из важных причин, по которы нужен своп. С ПДФ-ом, конечно ясно. Но и на серверах та же картина. Даже в исполняемых файлах есть страницы памяти, которые используются, например только при запуске. Они давно отработали и не нужны до следующего запуска программы, а память занимают. В нагруженном сервере все такие страницы потихоньку, в моменты пиковых нагрузок мигрируют в своп и система потихоньку подстроится таким образом, чтобы максимально эффективно использовать оперативную память.
> который ты читал месяц назад, но забыл закрыть.
Вот! Это одна из важных причин, по которы нужен своп. С ПДФ-ом, конечно ясно. Но и на серверах та же картина. Даже в исполняемых файлах есть страницы памяти, которые используются, например только при запуске. Они давно отработали и не нужны до следующего запуска программы, а память занимают. В нагруженном сервере все такие страницы потихоньку, в моменты пиковых нагрузок мигрируют в своп и система потихоньку подстроится таким образом, чтобы максимально эффективно использовать оперативную память.
Странно, что в статье с таким громким названием нет ни слова про hibernate.
Надо руководствоваться следующим:
1) для настольных систем, используйте область подкачки с удвоенным размером физической памяти
1) для настольных систем, используйте область подкачки с удвоенным размером физической памяти
Насколько я знаю, при 2Гб и более это уже нерационально, да можно сказать неправильно. Данные немного устарели. Кстати, практически на каждом форуме с линуксовой тематикой данный вопрос поднимался много-много раз.
А выбор скорее происходит на основе того, чем собираешься заниматься.
Соглашусь, у меня 2 Гб памяти и вообще нет свопа, и ни разу за два года не было ситуации когда память кончилась.
Если в системе несколько физических дисков, откусываете от каждого по паре гигов и объединяете в софт рейд 0, а потом его под свап. Как мне рассказывали, эффект потрясающий.
у меня на ноутбуке 1024 mb оперативки, сейчас с оперой занято 316, вопрос есть ли мне смысл изощратся со значением ?