
Когда мы хотим настроить систему Linux, есть общее предложение установить пространство подкачки в два раза больше, чем ваша физическая память. Я хочу знать, зачем нам это нужно, и как это предложение появилось?
решение1
Короткий ответ: «Вы неиметьк".
В зависимости от типа ядра/системы может иметь смысл задать такой размер пространства подкачки, например, в FreeBSDнастройка(7)На странице руководства мы находим следующее обоснование размера подкачки, по крайней мере, в 2 раза превышающего размер физической памяти:
Обычно следует устанавливать размер области подкачки примерно в 2 раза больше основной памяти для систем с оперативной памятью менее 2 ГБ или примерно в 1 раз больше основной памяти, если у вас ее больше. Однако если у вас не так много оперативной памяти, вам, как правило, понадобится намного больше подкачки. Не рекомендуется настраивать подкачку менее 256 МБ в системе, и следует учитывать будущее расширение памяти при определении размера раздела подкачки. Алгоритмы подкачки виртуальной машины ядра настроены на наилучшую производительность при наличии как минимум 2-кратной подкачки по сравнению с основной памятью. Настройка слишком малого объема подкачки может привести к неэффективности кода сканирования страниц виртуальной машины, а также создать проблемы в дальнейшем, если вы добавите больше памяти на свой компьютер. Наконец, в более крупных системах с несколькими дисками SCSI (или несколькими дисками IDE, работающими на разных контроллерах) мы настоятельно рекомендуем настраивать подкачку на каждом диске. Разделы подкачки на дисках должны быть примерно одинакового размера. Ядро может обрабатывать произвольные размеры, но внутренние структуры данных масштабируются до 4-кратного размера самого большого раздела подкачки. Поддержание разделов подкачки примерно одинакового размера позволит ядру оптимально распределить пространство подкачки по N дискам. Не беспокойтесь о том, что немного переусердствуете, пространство подкачки — это спасительная благодать UNIX, и даже если вы обычно не используете много подкачки, оно может дать вам больше времени на восстановление после вышедшей из-под контроля программы до того, как вам придется перезагрузиться.
Другие факторы могут быть важны, когда вы решаете, сколько пространства подкачки выделить, где его выделить и т. д. Например, если вы устанавливаете большой сервер с 128 ГБ физической памяти, вероятно, будет хорошей идеей избежать предварительного выделения 256 ГБ дискового пространства для подкачки, которое никогда не будет использоваться.
С другой стороны, имеянекоторыйПространство подкачки часто позволяет захватывать дампы ядра (например, в Open-, Net- и FreeBSD). Поэтому хорошей идеей будет иметь по крайней мере достаточно пространства подкачки, чтобы захватывать полный дамп ядра при панике.
Нет абсолютного правила, которое подходитвсеслучаи. Вам нужно прочитать о поведении вашей конкретной системы, узнать, как она работает, подумать о предполагаемом использовании системы и решить, какой размер подкачки лучше всего подходиттвойпотребности.
решение2
Вам это вообще не нужно. Старые версии Windows рассматривали каждую страницу выделенной памяти как по сути mmap в файле подкачки, поэтому для ее использования требовался как минимум общий физический размер ОЗУ в файле подкачки — сегодня это уже не так, и никогда не было так в Linux, но слухи продолжают ходить.
Однако есть случай, когда желательно иметь по крайней мере столько же подкачки, сколько и ОЗУ — гибернация. Поскольку Linux использует файл подкачки для гибернации (т. е. приостановки на диске), вам нужно достаточно подкачки, чтобы хранить все данные в ОЗУ, плюс все данные, которые уже были выгружены (за вычетом кэш-ОЗУ). Это касается только машин, которым нужна гибернация, например, ноутбуков, конечно.
Наконец, слишком большой объем подкачки может бытьплохойвещь, несмотря на то, что говорят другие. Подумайте - если у вас 4G RAM, и вдобавок к этому вам нужно дополнительно 8G подкачки, как вы думаете, ваша система все еще будет пригодна для использования, что со всеми этими подкачками на/с диска, которые она делает? Часто лучше сразу же остановить процесс, пожирающий память, когда у вас заканчивается память, чем замедлить всю систему до неиспользуемого уровня, когда она начнет тратить все свое время на сортировку данных в и из подкачки.
решение3
Давным-давно существовала распространенная версия unix (кажется, это была BSD, но сейчас я не могу найти ссылку), которая выделяла каждую страницу виртуальной памяти в пространстве подкачки. Так что если у вас было столько же подкачки, сколько и ОЗУ, размер вашей виртуальной памяти все равно был бы таким же, как и у вашей ОЗУ. Обычной рекомендацией тогда было иметь в два раза больше подкачки, чем ОЗУ, что делало виртуальную память в два раза больше ОЗУ.
Современные unice-системы так себя не ведут, так что причина правила устарела (я думаю, оно уже устарело в 1992 году, так что оно никогда не было актуально для Linux). Но как ни странно, правило сохранилось. Если следовать ему сейчас, то вы получите виртуальную память, в три раза превышающую объем вашей оперативной памяти, тогда как изначально предполагалось получить вдвое больше.
То, что историческая причина правила неверна, не означает, что оно глупое. Дисковое пространство стало дешевле, поэтому может иметь смысл выделять больше подкачки. Сколько подкачки вам нужно, во многом зависит от того, сколько у вас оперативной памяти и как вы ее используете. Вы можете запустить систему без подкачки, но тогда у вас не будет возможности выбирать, какие программы завершать, если ваша оперативная память заполнится, и система может работать медленнее (иногда лучше использовать оперативную память для кэша и выгрузить часть памяти программ). Выделение слишком большого количества подкачки стоит крошечного количества оперативной памяти (для структур данных ядра) и, конечно, дискового пространства (но в наши дни это обычно очень дешево, за исключением SSD). Наличие достаточного количества подкачки для размещения всей вашей виртуальной памяти необходимо, если вы хотите перейти в спящий режим.
решение4
Древняя рекомендация, основанная на предположениях о типичной емкости системной памяти, скорости шины памяти по сравнению со скоростью диска и проценте времени, которое процессы проводят в различных состояниях ожидания. Я скептически отношусь к тому, что в наши дни вам понадобится больше, чем, может быть, 1/2 физической памяти в пространстве подкачки — достаточно, чтобы предотвратить случайное уничтожение OOM при почти полном использовании памяти. Но все зависит от вашей типичной рабочей нагрузки, YMMV и т. д.