Поменяйте размер раздела на компьютере с 64 ГБ ОЗУ для работы с большим объемом памяти

36

На моем компьютере 64 ГБ ОЗУ и SSD на 240 ГБ , которые я собираюсь использовать для вычислений с интенсивным использованием памяти (машинное обучение, анализ данных и т. Д.). Большинство советов, которые я нашел в Интернете, касаются компьютеров с ОЗУ 2-4-8 ГБ, и они рекомендуют в 2 раза увеличить размер раздела подкачки ОЗУ (т.е. 128 ГБ).

Разумно ли сделать раздел подкачки объемом 128 ГБ? какие преимущества я получу, создав огромный раздел подкачки?

Правильно ли я понимаю, что в случае, если у меня заканчивается физическая память:

  1. Если у меня нет свопа, я получаю ошибку «недостаточно памяти»
  2. Если у меня есть своп, некоторые страницы ОЗУ будут скопированы в раздел подкачки, и программа продолжит работу (хотя и медленнее).

Некоторые люди говорят, что делать своп на SSD - плохая идея, так как он имеет ограниченное количество циклов чтения / записи. Насколько быстро с помощью swap будут исчерпаны циклы чтения / записи SSD (насколько я знаю, это около 50000 операций записи в секунду)?

Я использую Linux ( Ubuntu 14.04 (Trusty Tahr)).

На данный момент мы собираемся установить своп на 16 ГБ, поскольку этого должно быть достаточно (например, RedHat предлагает 4 ГБ), а 16 ГБ дискового пространства на самом деле не имеет большого значения.

wrwt
источник
1
Вместо того, чтобы явно полагаться на своп, если вы знаете размер своего рабочего набора или хотите сделать немного более низкоуровневое управление памятью, рассмотрите возможность использования mmapстраниц рабочего набора. Тогда сумма вашего свопа будет именно той, которая вам нужна для вашего процесса.
пушистый
5
Совет, рекомендующий «удвоить объем оперативной памяти», восходит к старым временам, когда у компьютеров было мало оперативной памяти. В нескольких документах говорится, что в первую очередь это относится к компьютерам с <2 ГБ оперативной памяти. Кроме того, размер свопа в основном связан с тем, что вы делаете с машиной.
Джон У. С. Смит,
См. Также « Ошибка сервера». Если вы работаете с Java (и, возможно, с другими приложениями), вам нужно убедиться, что у вас достаточно подкачки, чтобы увеличить объем выделяемой памяти. Я лично придерживаюсь стандарта RHEL RAM + 2 для моего раздела подкачки
Уоррен
2
Обидно, большинство комментариев здесь были удалены. Добавление обратно: Кстати, стоит отметить, что если ваше ядро ​​поддерживает его, вы можете смонтировать раздел подкачки с discardпомощью SSD. Кроме того (и это было упомянуто в ответе ниже), не забывайте, что вы можете использовать файл вместо раздела для потенциально более простого управления (и никакого снижения производительности на SSD, например, из-за фрагментации).
Джейсон С
1
Если у вас есть приложение с интенсивным использованием памяти, такое как SVM-обучение, и у вас кончился оперативная память и вы начнете обмениваться, все станет слишком медленным для восстановления, и ваш единственный доступный ход будет тянуть пробку (это случилось со мной пару раз) , Возможно, вы захотите, чтобы ваш процесс был убит OOM, если он начнет меняться, чтобы вы могли по крайней мере изменить материал и начать заново. Может быть, с SSD накопителями все не так плохо. Я бы тоже проверил настройки OOMK - со мной в Ubuntu случалось так, что иногда процессы были убиты OOM, когда оставалось еще много оперативной
памяти,

Ответы:

36

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

  1. Вам нужен обмен, чтобы получить информацию, которая, вероятно, никогда не будет доступна из ОЗУ, чтобы освободить больше места для дискового кэша. Многие приложения запускаются при запуске системы и никогда не будут доступны снова. Вы не хотите, чтобы какие-либо страницы, которые они загрязняли, застряли в ОЗУ навсегда. Таким образом, вам нужно поменять их.

  2. Вам нужен своп, чтобы покрыть ассигнования, которые никогда не будут заполнены. Это пространство просто должно быть доступно, даже если оно не будет использоваться. Без этого система будет вынуждена отказаться от выделения памяти, даже если у нее достаточно свободного физического ОЗУ, поскольку у нее недостаточно хранилища резервных копий для одновременного использования всех ее выделений.

Ни один из них не требует большого количества обмена. Например, 16 ГБ должно быть более чем достаточно. Цель состоит не в том, чтобы позволить вам запускать большие рабочие наборы за счет скорости. Цель состоит в том, чтобы позволить вам эффективно использовать 64 ГБ, и вам не придется забивать его мусором или резервировать для крайних случаев, которые никогда не произойдут.

(Я согласен с Бертом, что 4 ГБ вполне вероятно будет достаточно.)

Дэвид Шварц
источник
2
@wrwt Поместите свой раздел подкачки в конец диска (или, по крайней мере, после раздела с данными), это сделает его изменение быстрее и менее трудоемким, если вы когда-нибудь захотите изменить его (точнее, это приведет к изменению размера раздела данных). чтобы разместить его проще, так как вам не нужно перемещать начало). На SSD нет связи между положением и производительностью, как это иногда бывает на механических дисках.
Джейсон C
Хотя этого ответа, вероятно, достаточно для большинства любителей, это плохой совет для реальных серверов - ответ зависит от того, как написано приложение, поскольку нехватка пространства подкачки приведет к тому, что убийца из нехватки памяти сработает и завершит работу. случайный процесс (да, вы правильно прочитали; «случайный»)
Сорен
3
@ Сорен Это суперпользователь, а не серверный сбой. ;) Это правда, что установка пространства подкачки - не единственное решение, которое вам нужно принять для «настоящих серверов». Вам также нужно принимать решения о таких вещах, как сверхкоммит, вам может понадобиться настроить убийцу OOM и так далее. (И ответы становятся намного более сложными, если вы ожидаете, что ваш рабочий набор будет превышать физический объем ОЗУ. Но почти никто больше так не работает с машинами.)
Дэвид Шварц
5
Linux будет перегружать память даже без включенной подкачки. Это просто будет обрабатывать OOMK, когда на самом деле используется слишком много памяти. Так что второй пункт ответа неверен.
Руслан
1
@MaciejPiechotka Или используйте файл.
Джейсон С,
29

RedHat рекомендует 4 ГБ на машине с 64 ГБ .

Однако обмен размерами - это больше искусство, чем наука. Это зависит от того, для чего используется машина, сколько места на диске и памяти у вас есть, и других факторов. Помните, вы всегда можете добавить больше своп позже.

Использование правила физической памяти 2X устарело с объемом памяти, который есть у систем в наши дни. Но запуск с нулевой заменой не рекомендуется, если вы не знаете, что делаете. Рекомендация 4 ГБ является хорошей отправной точкой.

Берт
источник
12
+1 за последний абзац. Рекомендация 2x восходит к тому моменту, когда на большинстве компьютеров не было достаточно оперативной памяти, чтобы избежать замены при нормальном использовании. Субъективно, из-за использования компьютеров ограничение в 2 раза, по-видимому, было выбрано как число, достаточно большое, чтобы компьютер стал необычайно медленным, прежде чем закончится свопинг.
Дэн Нили,
1
2X также хорошо работал, когда системы имели 4 ГБ / 8 ГБ ОЗУ и сотни гигабайт дискового пространства. Конечно, это было, вероятно, больше, чем нужно, но какой вред? Но теперь, когда системы имеют 16 ГБ / 64 ГБ ОЗУ и 128 ГБ / 256 ГБ твердотельных накопителей, вред очевиден.
Дэвид Шварц
12

В Linux вам нужно достаточно подкачки, чтобы общего объема доступной виртуальной памяти (RAM + 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

Заметки:

  1. Вам определенно не нужно настраивать как минимум столько же подкачки, сколько у вас есть RAM. Это эмпирическое правило восходит к операционным системам, где оно было жестким требованием из-за способа замены.

  2. Есть способы заставить Linux терпеть неудачу, когда нет доступной памяти, а именно, манипулируя значениями этих записей sysctl:

    vm.overcommit_memory
    vm.overcommit_ratio
    
Kaz
источник
2
+1 за фактическую ссылку на параметры конфигурации ядра - ключ в части вопроса If I have no swap, I get an 'out of memory' error- а именно false- правда в том, что когда у вас заканчивается пространство подкачки, убийца нехватки памяти сработает и убьет случайный процесс освобождения места, поэтому объем необходимого пространства подкачки зависит от того, как написано ваше приложение.
Сорен
@ Сорен Вероятно, что большая часть оперативной памяти будет заполнена фактическими данными, поэтому убийца нехватки памяти не будет иметь большого значения. Спасибо за «правду» в любом случае.
wrwt
3

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

В этом случае, пожалуйста, рассмотрите возможность использования файла подкачки вместо раздела. Вам не нужно беспокоиться о больших размерах, чтобы избавиться от них или добавить их позже, не требуется перераспределение. Нет никакого (заметного) снижения производительности при использовании файла над разделом. Если вам когда-нибудь понадобится, посмотрите на размер, и это также даст вам хорошие советы.

Kaste
источник
1
@ Kaz Я думаю, ты говоришь о чем-то ином, чем Касте. Каст говорит, что если вы хотите иметь возможность приостановить / перевести компьютер в спящий режим, выключить его и продолжить с того места, где вы остановились позже, вам понадобится достаточно места для подкачки, чтобы сохранить всю вашу оперативную память (иначе куда она пойдет?).
Амаллой
@amalloy Если вы сохранили свою оперативную память в пространстве подкачки, куда идет подкачка (помните, что подкачка рассматривается как память - если она была потеряна, то же самое, что потеря оперативной памяти).
NPSF3000
2

Для рабочей нагрузки, которую вы хотите применить к машине, требуется определенный объем памяти (не забудьте добавить достаточно в уравнение для обработки пиковых нагрузок), и вам необходимо настроить компьютер так, чтобы он был по крайней мере таким.

Современные операционные системы предоставляют виртуальную память как комбинацию физической памяти и пространства подкачки, поэтому, если вам нужно больше памяти, чем доступно машине, вы должны добавить достаточно места подкачки, чтобы заполнить этот пробел. То есть, если вам нужно максимум 80 ГБ, а на машине - 64 ГБ, вам потребуется обмен 16 ГБ.

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

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

Турбьерн Равн Андерсен
источник
2

Гораздо лучшая идея, чем «много подкачки», - это (ре) организовать работу так, чтобы рабочие наборы помещались в память, а затем использовать файловую систему для хранения и извлечения работы, которую вы делаете. То есть вместо того, чтобы заставлять ОС угадывать, каковы будут ваши шаблоны использования памяти, используйте то, что вы знаете о своих проблемах, чтобы контролировать свои шаблоны использования памяти.

В качестве случайного примера, который имеет непосредственное отношение ко мне этим летом ... При реализации квадратичного сита для разметки нужен большой (по-видимому) непрерывный массив (с некоторым сложным алгоритмом, детали которого на самом деле не имеют значения для этого примера). Массив должен быть ~ 100 гига-записей, так что легко в диапазоне 1 ТБ. Я мог бы притвориться, что выделил это, и позволил ОС сделать удивительное количество неэффективных операций подкачки, чтобы получить страницы в ОЗУ и из них для поддержки всех последовательных записей через массив. Вместо того, чтобы делать что-то с головой, я решил выделить гораздо меньший массив, который точно помещается в памяти, а затем повторно использовать этот маленький массив, чтобы итеративно покрыть остальную часть большого массива срезами. Я также удалил ОС, удалил работающий набор служб, заменил оболочку,

SSD может быть быстрым, но это не так быстро, как организация ваших вычислений для выполнения одного и того же набора операций без остановки обмена.

Эрик Тауэрс
источник
1

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

Если у вас есть запасной порт USB 3.0, я бы предложил использовать флэш-накопитель для вашего подкачки. Существует множество высокоскоростных флеш-накопителей, которые работают так же быстро, как и ваш SSD, но гораздо дешевле - достаточно дешевые, чтобы заменить их, если они начнут выходить из строя. Быстрый поиск на Amazon показывает, что есть много приличных 16 ГБ флешек USB 3.0 стоимостью менее 20 долларов, и даже около 64 ГБ дисков стоимостью менее 60 долларов.

Разбейте всю флешку как пространство подкачки, и у вас будет место подкачки, если вам это нужно, и спокойствие, зная, что многократно записываемая память легко (и дешево) заменяется.

ArmanX
источник
3
+1 за не переключение на SSD, -1 за переключение на компонент с очень коротким сроком службы при таком использовании.
Aviator45003
1
@TC - это правильно, ArmanX - если вы пытаетесь избегать использования флэш-памяти (SSD), зачем вам использовать флэш-память на USB? Это иррационально.
Уоррен
2
@TC: Не использовать SSD для обмена из-за износа носителя - неоправданная городская легенда. Обмен не происходит "все время", но редко. Кроме того, это то, что было тщательно исследовано в Microsoft после выпуска Win7, в результате чего типичные шаблоны доступа вполне приемлемы для SSD (это Windows, а не Ubuntu, но, вероятно, Linux работает не намного хуже). У вас в сто (или тысячу) раз больше операций записи, изнашивающих ваш SSD из-за глупых файлов журнала, которые никто никогда не читает (обычно синхронизируя каждую строку).
Деймон
Логика ошибочна: если флэш-накопитель действительно такой же быстрый, как SSD, почему он дешевле?
Agent_L
Это баланс. С одной стороны, неплохо иметь файл подкачки. С другой стороны, если файл подкачки изнашивает SSD (что, вы правы, это, вероятно, не имеет значения), было бы лучше использовать дешевую замену - и флешка за 20 долларов намного лучше, чем SSD для более чем 100 долларов.
ArmanX
1

Вы будете в порядке даже с 1 ГБ (и, вероятно, меньше) свопа. Мой рабочий компьютер обычно использует не более 140-150 МБ. Для этого достаточно гигабайта.
Если вы не выполняете вычисления задач, для которых требуются наборы данных в сотнях гигабайт и (это важно!) Доступ к данным осуществляется более или менее однократно, вы никогда не захотите иметь подкачку намного больше этой. Но опять же, простое отображение памяти в файле данных одинаково хорошо работает для этого приложения.

Но больше обмена помогает больше, верно? Больше всего всегда лучше!

Подумайте, как изменится обмен, скажем, на 16 ГБ (или подумайте о 64 ГБ). Если вы никогда не используете эти 16GiB, вы могли бы также не отложить их в первую очередь. Но если вы делаете используете их, что произойдет? Диск по сравнению с основной памятью работает очень медленно. Даже с твердотельным накопителем SATA-600 передача 16 ГБ занимает от 30 до 40 секунд и в 2–4 раза дольше в некоторых других конфигурациях.
Теперь кто-то неизбежно будет возражать, что вы, скорее, просматриваете и выводите дюжину или около того 4-килобайтных страниц, а не 16-гигабайтных за один раз. Хотя это и правда, суть все же остается. Если вам нужно только поменять местами пару страниц, вам не нужен 16-гигабайтный своп, но если вам нужен 16-гигабайтный своп, то вы тоже собираетесь их перенести (так или иначе).

Теоретически, 99,9% всех пользователей могут даже использовать машину 64 ГБ (или любую машину 8+ ГиБ) без какой-либо подкачки и, скорее всего, никогда не заметят, что чего-то не хватает. Однако это не рекомендуется.
Во-первых, это неоптимально, поскольку операционная система имеет меньше вариантов того, что она может отбросить, когда у нее заканчивается физическая память. Это может сделать две вещи: заменить что-то, что не используется, или выбросить страницы из буферного кэша. Если у вас нет свопа, он может сделать только одну вещь. Выбрасывание страниц из буферного кэша безвредно, но может заметно повлиять на производительность.
Во-вторых, частные анонимные сопоставления могут просто потерпеть неудачу, если нет обмена. Обычно этого не происходит, но, в конце концов, когда физической памяти недостаточно для их удовлетворения, и нет подкачки, операционная система имеет только один из этих вариантов, кроме ... В-
третьих, страшный убийца OOM может сработать Это означает, что более или менее случайный процесс может быть убит. Нет, спасибо. Это не то, что вы хотите, чтобы происходило.

С учетом сказанного, такой совет, как вам нужен обмен X раз, когда объем установленной оперативной памяти исходит от людей, которые повторяют то, что они слышали (и не понимали!), От кого-то, кто повторял то, что они слышали (и не понимали!) Десятилетия тому назад.
Правило «используй в 2 раза больше своей оперативной памяти» было простым в запоминании эмпирическим правилом в 1980-х и 1990-х годах, оно никогда не было «золотой истиной» (просто то, что работало нормально для большинства пользователей), и в настоящее время оно не применяется вообще ,

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

Damon
источник