![Изменение размера раздела на компьютере с оперативной памятью 64 ГБ для интенсивной работы с памятью](https://rvso.com/image/1414634/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%B0%20%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0%20%D0%BD%D0%B0%20%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B5%20%D1%81%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C%D1%8E%2064%20%D0%93%D0%91%20%D0%B4%D0%BB%D1%8F%20%D0%B8%D0%BD%D1%82%D0%B5%D0%BD%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B%20%D1%81%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C%D1%8E.png)
У меня 64 ГБ ОЗУ и 240 ГБSSDна моем компьютере, который я собираюсь использовать для вычислений, интенсивно использующих память (машинное обучение, интеллектуальный анализ данных и т. д.). Большинство советов, которые я нашел в Интернете, касаются компьютеров с ОЗУ 2-4-8 ГБ, и они рекомендуют размер раздела подкачки ОЗУ в 2 раза больше (то есть 128 ГБ).
Разумно ли создавать раздел подкачки размером 128 ГБ? Какие преимущества я получу, создав огромный раздел подкачки?
Правильно ли я понимаю, что в случае, если у меня закончится физическая оперативная память:
- Если у меня нет подкачки, я получаю ошибку «недостаточно памяти»
- Если у меня есть раздел подкачки, некоторые страницы оперативной памяти будут скопированы в раздел подкачки, и программа продолжит работать (хотя и медленнее).
Некоторые говорят, что делать swap на SSD — плохая идея, так как у него ограниченное количество циклов чтения/записи. Как быстро использование swap исчерпает циклы чтения/записи SSD (насколько мне известно, это около 50000 IOPS записи)?
Я использую Linux (Убунту 14.04(Верный Тар)).
На данный момент я собираюсь установить объем подкачки в 16 ГБ, так как этого наверняка будет достаточно (например, RedHat предлагает 4 ГБ), а 16 ГБ дискового пространства на самом деле не так уж и много.
решение1
Вам, вероятно, понадобится лишь небольшой объем подкачки. Когда у вас достаточно оперативной памяти для типичного рабочего набора вашего компьютера, в чем я почти уверен, вам понадобится подкачка только для двух вещей:
Вам нужен swap, чтобы получить информацию, которая, скорее всего, никогда не будет доступна из ОЗУ, чтобы освободить больше места для кэша диска. Многие приложения запускаются при запуске системы и никогда больше не будут доступны. Вы не хотите, чтобы какие-либо страницы, которые они запачкали, навсегда застряли в ОЗУ. Поэтому вам нужен swap, чтобы хранить их.
Вам нужен swap, чтобы покрыть выделения, которые никогда не будут заполнены. Это пространство просто должно быть доступно, даже если оно не будет использоваться. Без него система будет вынуждена отказаться выделять память, даже если у нее много свободной физической оперативной памяти, поскольку у нее недостаточно резервного хранилища, чтобы разрешить использовать все ее выделения одновременно.
Ни один из них не требует большого объема подкачки. Например, 16 ГБ должно быть более чем достаточно. Цель не в том, чтобы позволить вам запускать большие рабочие наборы за счет скорости. Цель в том, чтобы позволить вам эффективно использовать ваши 64 ГБ и не засорять их мусором или резервировать для крайних случаев, которые никогда не произойдут.
(Я согласен с Бертом, что 4 ГБ, скорее всего, будет достаточно.)
решение2
Красная Шапкарекомендуется 4 ГБ на машине с 64 ГБ.
Однако определение размера swap — это скорее искусство, чем наука. Это зависит от того, для чего используется машина, сколько у вас дискового пространства и памяти, и других факторов. Помните,Вы всегда сможете добавить больше свопов позже.
Использование правила 2X физической памяти устарело с объемом памяти в современных системах. Но запуск с нулевым свопом не рекомендуется, если вы не знаете, что делаете. Рекомендация в 4 ГБ — хорошая отправная точка.
решение3
В Linux вам необходимо столько подкачки, чтобы общего объема доступной виртуальной памяти (ОЗУ + SWAP) хватило для всех процессов, которые вы хотите запустить одновременно, и их максимального виртуального объема.
Если у вас меньше swap, чем это, или swap вообще отсутствует, то происходит следующая ситуация: система исчерпывает память, пытаясь выделить страницу. Но это все равно мягкий сбой, даже если swap отсутствует, потому что в системе есть много страниц-"жертв", которые можно удалить, чтобы освободить место: а именно, страницы всех отображений памяти с файловой поддержкой, таких как исполняемые файлы и разделяемые библиотеки!
Поскольку вашей системе требуется все больше и больше места для данных (которые нельзя выгрузить), она будет все чаще освобождать исполняемый код (общие библиотеки и исполняемые файлы), что приведет к ужасной перегрузке, поскольку рабочий набор будет сокращаться до все более и более плотного набора страниц.
Пространство подкачки смягчает эту проблему, предоставляя место для выгрузки анонимных (не сопоставленных с файлами) страниц: страниц, используемых для выделения памяти, чтобы исполняемый код мог оставаться в памяти.
Тем не менее, если вы не часто запускаете задачи, интенсивно использующие память, вы можете обойтись без подкачки большую часть времени и вручную настроить файл подкачки (вместо выделенного раздела), когда он вам понадобится. Чтобы создать файл подкачки на лету, станьте пользователем root и:
dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768 # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile
Когда вам это больше не нужно:
swapoff /path/to/swapfile
rm /path/to/swapfile
Примечания:
Вам определенно не нужно настраивать по крайней мере столько же подкачки, сколько у вас есть RAM. Это правило берет свое начало в операционных системах, где это было жестким требованием из-за того, как была спроектирована подкачка.
Существуют способы вызвать жесткий сбой Linux при нехватке памяти, а именно, манипулируя значениями следующих записей sysctl:
vm.overcommit_memory vm.overcommit_ratio
решение4
Для выполнения рабочей нагрузки, которую вы хотите применить к машине, необходим определенный объем памяти (не забудьте добавить в уравнение достаточно памяти для обработки пиковых нагрузок), и вам необходимо настроить свой компьютер так, чтобы он имел как минимум этот объем.
Современные операционные системы предоставляют виртуальную память как комбинацию физической памяти и пространства подкачки, поэтому, если вам нужно больше памяти, чем доступно на компьютере, вы можетедолжендобавьте достаточно места подкачки, чтобы заполнить пробел. То есть, если вам нужно максимум 80 ГБ, а на машине 64 ГБ, вам понадобится 16 ГБ подкачки.
Обычно установщики операционных систем просят вас создать начальную область подкачки (так как это самый простой способ, который позволяет устанавливать даже крошечные компьютеры), и было обнаружено, что хорошим правилом для типичных операций Unix является размер виртуальной памяти в три раза больше физической памяти, поэтому это обычно предлагается. Однако вы знаете больше о шаблоне использования, поэтому вы можете изменить это по мере необходимости.
Нет ничего плохого в работе без swapspace, если давление памяти всегда меньше. Linux будет прозрачно использовать любую неиспользуемую память как дисковый кэш.