Сколько подкачки нужно взять с 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 ГБ, новое правило
round(sqrt(RAM))
гдеRAM
очевидно, ваш размер оперативной памяти в ГБ.Если вы используете спящий режим, вам нужно иметь возможность поменять весь объем ОЗУ + уже перенесенную ОЗУ на диск, поэтому формула будет выглядеть так:
RAM+round(sqrt(RAM))
Правило уменьшения отдачи остается в силе и сегодня для максимума, но если вы не протестируете свое фактическое использование, использование 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 причинам:
Удаление беспорядка из RAM. Из статьи на kernel.org:
"Значительное количество страниц, на которые ссылается процесс в начале его жизни, может использоваться только для инициализации, а затем никогда не использоваться снова. Лучше поменять эти страницы и создать больше дисковых буферов, чем оставлять их резидентными и неиспользованными".
Другими словами, данные, хранящиеся в ОЗУ, могут быть полезны только тогда, когда процесс запущен (например, процесс запуска), а затем просто находится там в ОЗУ, загромождая пространство, которое можно использовать для лучших целей.
Это увеличивает объем памяти, который могут использовать процессы. Это хорошо понято. Вы не хотите, чтобы система исчерпала память и зависала из-за ее отсутствия. По этой конкретной причине, своп должен существовать, выступая в качестве защитной функции.
Спящий режим: при переходе компьютера в спящий режим содержимое оперативной памяти отправляется на диск.
Сумма обмена
Зная цель подкачки и в зависимости от объема оперативной памяти вашей машины, вы можете выбрать размер подкачки, соответствующий вашим целям. Нет конкретных рекомендаций, есть только практические правила, которые вы можете использовать, чтобы адаптировать размер подкачки к вашей системе.
Например, 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 ГБ. Опять же: случайное использование.
Космоскалибур и Фабби уже обратились к свопу на случай, если вам понадобится спящий режим, поэтому я не буду вдаваться в подробности. Мое скромное мнение таково:
Если вы планируете переходить в режим гибернации, содержимое оперативной памяти необходимо будет заменить, поэтому он должен иметь размер, по крайней мере, такой же, как объем оперативной памяти.