Сколько подкачки нужно взять с 1 ГБ до 8 ТБ ОЗУ на 14.04 или выше?

Я собираюсь установить 64-битную версию 14.04 на новую машину с объемом от 1 до 128 ГБ ОЗУ и еще больше ОЗУ позже. Сколько места я должен выделить под раздел подкачки?

И особенно: ПОЧЕМУ эти рекомендации для этих номеров?

(Ни один из существующих ответов здесь и здесь не объясняет почему и немного устарел, если мы посмотрим на 1 ГБ или ОЗУ и выше)

2 ответа

Решение

Краткий ответ:

Установите свой файл подкачки на:

  • round(sqrt(RAM)) если вы не используете спящий режим
  • RAM+round(sqrt(RAM)) если вы используете спящий режим

Установите свой swappiness до 10 на рабочем столе, но не на сервере!

Длинный ответ:

В прошлом:

Эмпирическое правило, используемое в течение последних 25 лет, было минимум 1xRAM и максимум 2xRAM, так что это то, что вы будете видеть в кавычках все время.

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

Максимум был установлен в то время из-за уменьшения отдачи: слишком медленно менять объем памяти, поскольку доступ к жестким дискам в 1000 раз медленнее, чем объем оперативной памяти: хорошо в чрезвычайной ситуации, но не очень хорошо для повседневного использования! В то время, когда вам не хватило места подкачки, пришло время добавить больше оперативной памяти! (что все еще верно сегодня).

В настоящее время:

  1. Если вы не используете гибернацию, а объем вашей памяти превышает 1 ГБ, новое правило round(sqrt(RAM)) где RAM очевидно, ваш размер оперативной памяти в ГБ.

  2. Если вы используете спящий режим, вам нужно иметь возможность поменять весь объем ОЗУ + уже перенесенную ОЗУ на диск, поэтому формула будет выглядеть так: RAM+round(sqrt(RAM))

  3. Правило уменьшения отдачи остается в силе и сегодня для максимума, но если вы не протестируете свое фактическое использование, использование 2xRAM - это просто трата дискового пространства, поэтому не используйте максимум, если у вас не заканчивается пространство подкачки с использованием других методологий.

Все это вместе дает следующую таблицу: (последние 3 столбца обозначают пространство подкачки)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB
    2TB             46GB              2094GB        4TB
    4TB             64GB              4160GB        8TB
    8TB             91GB              8283GB       16TB

Выше просто эмпирическое правило; это не закон гравитации!
Вы можете нарушить это правило (в отличие от закона гравитации), если ваш конкретный вариант использования отличается!

Совет для профессионалов: всегда выделяйте SWAP в начале жесткого диска, поскольку головки должны меньше перемещаться внутри диска.
Да: на SSD больше не имеет значения, где вы располагаете область подкачки, поскольку они используют квантовое туннелирование вместо движущихся головок, а современные SSD используют все свои ячейки памяти (даже нераспределенное пространство) для предотвращения квантовой деградации.

Как проверить, отличается ли ваше использование swap от "общего" правила:

Просто выполните:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

который выдаст вам список всех запущенных программ, которые поменялись местами (одна из них использует больше всего пространства подкачки сверху)

Если вы используете больше, чем несколько КБ: измените размер больше, чем минимум, в противном случае, не беспокойтесь...

Если вы на сервере, прекратите читать сейчас: все готово!


Если вы используете клиент для настольного компьютера / ноутбука (не сервер), вы хотите, чтобы ваш графический интерфейс был максимально отзывчивым и менялся только тогда, когда это действительно необходимо. Ubuntu был оптимизирован для ранней замены для использования на сервере, но на вашем клиенте вы хотите отредактировать это огромное 250-мегапиксельное необработанное изображение в gimp чтобы быть быстрым, так что настройте свой swappiness 10 будет препятствовать обмену ядра слишком рано, в то же время гарантируя, что оно не произойдет слишком поздно:

sudo nano /etc/sysctl.conf

и добавить:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

в конец файла сохраните файл (Ctrl + X Y + Enter in nano) и выполните:

sysctl --system

перезагрузить параметр или воспользоваться подходом Window$ и перезагрузиться... :-)

Необходимость обмена

Своп полезен по 3 причинам:

  1. Удаление беспорядка из RAM. Из статьи на kernel.org:

    "Значительное количество страниц, на которые ссылается процесс в начале его жизни, может использоваться только для инициализации, а затем никогда не использоваться снова. Лучше поменять эти страницы и создать больше дисковых буферов, чем оставлять их резидентными и неиспользованными".

    Другими словами, данные, хранящиеся в ОЗУ, могут быть полезны только тогда, когда процесс запущен (например, процесс запуска), а затем просто находится там в ОЗУ, загромождая пространство, которое можно использовать для лучших целей.

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

  3. Спящий режим: при переходе компьютера в спящий режим содержимое оперативной памяти отправляется на диск.

Сумма обмена

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

Например, linux.com рекомендует:

Практическое правило заключается в следующем: 1) для настольной системы используйте пространство подкачки двойной системной памяти, поскольку это позволит вам запускать большое количество приложений (многие из которых могут быть простаивающими и легко заменяться), делая больше оперативной памяти доступно для активных приложений; 2) для сервера используйте меньший объем подкачки (скажем, половину физической памяти), чтобы у вас была некоторая гибкость для подкачки при необходимости, но следите за объемом используемого пространства подкачки и обновляйте свою оперативную память при необходимости; 3) для старых настольных компьютеров (скажем, только 128 МБ) используйте столько места подкачки, сколько сможете, даже до 1 ГБ.

Из личного опыта вот что я бы сделал:

Если рассматривать машину с 1–2 ГБ, которая не нуждается в спящем режиме, и для случайного использования можно использовать пространство подкачки от 1 до 2 ГБ. Мой компьютер с 14.04 Ubuntu имеет 1 ГБ оперативной памяти и 2 ГБ подкачки. Сумма подкачки никогда не пересекает границу 800 МБ, и я использую свой компьютер только для работы в Интернете и написания сценариев.

Если у вас более 2 ГБ компьютера, и вам не нужно переходить в спящий режим, вы можете сохранить объем подкачки от 512 МБ до 1 ГБ. У меня есть ноутбук с 15.04, который я никогда не впадаю в спящий режим и который имеет файл подкачки (не раздел) 512 МБ. Объем оперативной памяти составляет 6 ГБ, но не превышает 2-3 ГБ. Опять же: случайное использование.

Космоскалибур и Фабби уже обратились к свопу на случай, если вам понадобится спящий режим, поэтому я не буду вдаваться в подробности. Мое скромное мнение таково:

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

Другие вопросы по тегам