Почему мы должны установить пространство подкачки в два раза больше, чем наша физическая память?


10

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

Ответы:


8

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

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

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

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

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

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


4

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

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

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


1

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

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

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


Windows тоже это делает: если у менеджера памяти достаточно места подкачки, он также хранит копию страниц в памяти (начиная с наименее измененных, я думаю), поэтому, если ему нужно поменять их местами, он может сделать это просто выбрасывая страницы из памяти.
pqnet

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.