9

Когда мы хотим настроить систему Linux, обычно предлагается установить пространство подкачки в два раза больше вашей физической памяти. Я хочу знать, зачем нам это нужно, и как это предложение стало возможным?

4 ответа4

8

Краткий ответ: «Вам не нужно ».

В зависимости от типа ядра / системы может иметь смысл подобрать такой размер пространства подкачки, например, на man-странице tuning(7) во FreeBSD мы находим следующее обоснование размера подкачки, по крайней мере, в 2 раза превышающего объем физической памяти:

Как правило, размер пространства подкачки должен составлять примерно 2x основной памяти для систем с объемом оперативной памяти менее 2 ГБ или примерно 1x основной памяти, если у вас больше. Однако, если у вас недостаточно ОЗУ, вам, как правило, потребуется гораздо больше операций подкачки. Не рекомендуется настраивать размер подкачки менее 256 МБ в системе, и вы должны помнить о будущем расширении памяти при определении размера раздела подкачки. Алгоритмы подкачки виртуальной машины в ядре настроены так, чтобы работать лучше всего, когда есть как минимум 2-кратный обмен по сравнению с основной памятью. Настройка слишком малого объема подкачки может привести к неэффективности в коде сканирования страницы виртуальной машины, а также к возникновению проблем в дальнейшем, если вы добавите больше памяти на свой компьютер. Наконец, в более крупных системах с несколькими дисками SCSI (или несколькими дисками IDE, работающими на разных контроллерах) мы настоятельно рекомендуем настроить подкачку на каждом диске. Разделы подкачки на дисках должны быть примерно одинакового размера. Ядро может обрабатывать произвольные размеры, но внутренние структуры данных масштабируются в 4 раза по сравнению с самым большим разделом подкачки. Сохранение разделов подкачки примерно одинакового размера позволит ядру оптимально распределить пространство подкачки по N дискам. Не беспокойтесь о том, что он немного переусердствовал, пространство подкачки - это экономия для UNIX, и даже если вы обычно не используете большой объем подкачки, это может дать вам больше времени на восстановление после сбойной программы до того, как ее заставят перезагрузиться.

Другие факторы могут быть важны, когда вы решаете, сколько места подкачки выделять, где его выделять и так далее. Например, если вы устанавливаете большой сервер со 128 ГБ физической памяти, вероятно, стоит избегать предварительного выделения 256 ГБ дискового пространства для подкачки, которая никогда не будет использоваться.

С другой стороны, наличие некоторого пространства подкачки часто позволяет получить дампы ядра (например, в Open-, Net- и FreeBSD). Так что неплохо бы иметь как минимум достаточно места подкачки, чтобы захватить полный дамп ядра при панике.

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

4

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

Тем не менее, есть случай, когда желательно иметь как минимум столько же подкачки, сколько и ОЗУ - спящий режим. Поскольку Linux использует файл подкачки для режима гибернации (он же как suspend-to-disk), вам нужно достаточно подкачки для хранения всех данных в оперативной памяти, а также всех данных, которые уже были выгружены (за исключением кэш-памяти RAM). Это относится только к машинам, которые нуждаются в спящем режиме, например к ноутбукам.

Наконец, слишком большой своп может быть плохой вещью, несмотря на то, что говорят другие. Подумайте - если у вас 4 ГБ ОЗУ, и вдобавок к этому требуется дополнительный 8 ГБ подкачки, думаете ли вы, что ваша система все еще будет пригодна для использования, что она делает со всеми операциями свопинга на / с диска? Часто лучше, если процесс переполнения памяти будет убит сразу, когда у вас закончится память, а не когда вся система замедлится до непригодного уровня, когда она начнет тратить все свое время на маршалинг данных в своп и из него.

1

Давным-давно был распространенный вариант Unix (я думаю, что это был BSD, но я не могу найти ссылку прямо сейчас), который бы выделял каждую страницу виртуальной памяти в пространстве подкачки. Таким образом, если бы у вас было столько же объема подкачки, сколько у ОЗУ, размер вашей виртуальной памяти все равно был бы таким же, как у ОЗУ. Тогда обычной рекомендацией было иметь вдвое больший объем подкачки, чем ОЗУ, что делало виртуальную память в два раза больше ОЗУ.

Современные юниты так себя не ведут, поэтому причина этого правила устарела (я думаю, что он уже устарел в 1992 году, поэтому он никогда не был актуален для Linux). Но, как ни странно, правило выжило. Если вы последуете этому сейчас, вы получите виртуальную память, которая в три раза превышает объем ОЗУ, тогда как изначально предполагалось получить в два раза больше.

То, что историческая причина, лежащая в основе правила, неверна, не означает, что она глупа. Дисковое пространство стало дешевле, поэтому имеет смысл выделить больше подкачки. Какой объем свопа у вас должен быть, зависит от того, сколько у вас оперативной памяти и как вы ее используете. Вы можете запустить систему без подкачки, но тогда у вас не будет возможности выбрать, какие программы убивать, если ваша RAM заполняется, а система может работать медленнее (иногда лучше использовать RAM для кеширования и подкачки некоторой программной памяти). из). Выделение слишком большого объема подкачки требует небольшого количества оперативной памяти (для структур данных ядра) и, конечно, дискового пространства (но в настоящее время это обычно очень дешево, за исключением SSD). Если вы хотите перейти в спящий режим, необходимо иметь достаточно подкачки, чтобы вместить всю вашу виртуальную память.

0

Древняя рекомендация, основанная на предположениях о типичной емкости системной памяти, скорости шины памяти и скорости диска, а также проценте времени, которое процессы проводят в различных состояниях ожидания. Я скептически отношусь к тому, что в эти дни вам понадобится больше, чем, возможно, 1/2 физической памяти в пространстве подкачки - этого достаточно, чтобы предотвратить случайное убийство OOM, когда вы работаете почти на полную загрузку памяти. Но все зависит от вашей типичной рабочей нагрузки, YMMV и т.д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .