На моем компьютере 64 ГБ ОЗУ и SSD на 240 ГБ , которые я собираюсь использовать для вычислений с интенсивным использованием памяти (машинное обучение, анализ данных и т. Д.). Большинство советов, которые я нашел в Интернете, касаются компьютеров с ОЗУ 2-4-8 ГБ, и они рекомендуют в 2 раза увеличить размер раздела подкачки ОЗУ (т.е. 128 ГБ).
Разумно ли сделать раздел подкачки объемом 128 ГБ? какие преимущества я получу, создав огромный раздел подкачки?
Правильно ли я понимаю, что в случае, если у меня заканчивается физическая память:
- Если у меня нет свопа, я получаю ошибку «недостаточно памяти»
- Если у меня есть своп, некоторые страницы ОЗУ будут скопированы в раздел подкачки, и программа продолжит работу (хотя и медленнее).
Некоторые люди говорят, что делать своп на SSD - плохая идея, так как он имеет ограниченное количество циклов чтения / записи. Насколько быстро с помощью swap будут исчерпаны циклы чтения / записи SSD (насколько я знаю, это около 50000 операций записи в секунду)?
Я использую Linux ( Ubuntu 14.04 (Trusty Tahr)).
На данный момент мы собираемся установить своп на 16 ГБ, поскольку этого должно быть достаточно (например, RedHat предлагает 4 ГБ), а 16 ГБ дискового пространства на самом деле не имеет большого значения.
mmap
страниц рабочего набора. Тогда сумма вашего свопа будет именно той, которая вам нужна для вашего процесса.discard
помощью SSD. Кроме того (и это было упомянуто в ответе ниже), не забывайте, что вы можете использовать файл вместо раздела для потенциально более простого управления (и никакого снижения производительности на SSD, например, из-за фрагментации).Ответы:
Вам, вероятно, нужно только небольшое количество свопа. Когда у вас достаточно оперативной памяти для типичного рабочего набора вашего компьютера, что, я уверен, у вас есть, подкачка нужна только для двух вещей:
Вам нужен обмен, чтобы получить информацию, которая, вероятно, никогда не будет доступна из ОЗУ, чтобы освободить больше места для дискового кэша. Многие приложения запускаются при запуске системы и никогда не будут доступны снова. Вы не хотите, чтобы какие-либо страницы, которые они загрязняли, застряли в ОЗУ навсегда. Таким образом, вам нужно поменять их.
Вам нужен своп, чтобы покрыть ассигнования, которые никогда не будут заполнены. Это пространство просто должно быть доступно, даже если оно не будет использоваться. Без этого система будет вынуждена отказаться от выделения памяти, даже если у нее достаточно свободного физического ОЗУ, поскольку у нее недостаточно хранилища резервных копий для одновременного использования всех ее выделений.
Ни один из них не требует большого количества обмена. Например, 16 ГБ должно быть более чем достаточно. Цель состоит не в том, чтобы позволить вам запускать большие рабочие наборы за счет скорости. Цель состоит в том, чтобы позволить вам эффективно использовать 64 ГБ, и вам не придется забивать его мусором или резервировать для крайних случаев, которые никогда не произойдут.
(Я согласен с Бертом, что 4 ГБ вполне вероятно будет достаточно.)
источник
RedHat рекомендует 4 ГБ на машине с 64 ГБ .
Однако обмен размерами - это больше искусство, чем наука. Это зависит от того, для чего используется машина, сколько места на диске и памяти у вас есть, и других факторов. Помните, вы всегда можете добавить больше своп позже.
Использование правила физической памяти 2X устарело с объемом памяти, который есть у систем в наши дни. Но запуск с нулевой заменой не рекомендуется, если вы не знаете, что делаете. Рекомендация 4 ГБ является хорошей отправной точкой.
источник
В Linux вам нужно достаточно подкачки, чтобы общего объема доступной виртуальной памяти (RAM + SWAP) хватило для всех процессов, которые вы хотите запустить одновременно, и их максимальной виртуальной площади.
Если у вас меньше свопа, чем этот, или у вас нет вообще никакого свопа, то возникает следующая ситуация: системе не хватает памяти, пытающейся выделить страницу. Но это все еще мягкий сбой, даже если нет подкачки, потому что в системе есть много страниц-жертв, которые можно удалить, чтобы освободить место: а именно, страницы всех отображений памяти с файловой поддержкой, таких как исполняемые файлы. и общие библиотеки!
Поскольку вашей системе требуется все больше и больше места для данных (которые не могут быть выгружены), она будет все более и более эвакуировать исполняемый код (разделяемые библиотеки и исполняемые файлы), что приведет к ужасному перебиванию, так как рабочий набор обрезается в более плотный набор страницы.
Пространство подкачки смягчает эту проблему, предоставляя место для подмены анонимных (не отображаемых файлов) страниц: страницы, используемые для выделения памяти, так что исполняемый код может оставаться в памяти.
Тем не менее, если вы не часто запускаете задачи, интенсивно использующие память, вы можете избежать выполнения свопинга в большинстве случаев и вручную настроить файл подкачки (вместо выделенного раздела), когда вам это нужно. Чтобы сделать файл подкачки на лету, станьте пользователем root и:
Когда вам это больше не нужно:
Заметки:
Вам определенно не нужно настраивать как минимум столько же подкачки, сколько у вас есть RAM. Это эмпирическое правило восходит к операционным системам, где оно было жестким требованием из-за способа замены.
Есть способы заставить Linux терпеть неудачу, когда нет доступной памяти, а именно, манипулируя значениями этих записей sysctl:
источник
If I have no swap, I get an 'out of memory' error
- а именноfalse
- правда в том, что когда у вас заканчивается пространство подкачки, убийца нехватки памяти сработает и убьет случайный процесс освобождения места, поэтому объем необходимого пространства подкачки зависит от того, как написано ваше приложение.Есть еще соображения. Если вам нужно / хотите, чтобы приостановка работала, тогда вам нужен как минимум размер вашей оперативной памяти, а затем и немного. Однако это звучит маловероятно, если вам это нужно, учитывая, что вы, кажется, в основном строите вычислительную рабочую лошадь.
В этом случае, пожалуйста, рассмотрите возможность использования файла подкачки вместо раздела. Вам не нужно беспокоиться о больших размерах, чтобы избавиться от них или добавить их позже, не требуется перераспределение. Нет никакого (заметного) снижения производительности при использовании файла над разделом. Если вам когда-нибудь понадобится, посмотрите на размер, и это также даст вам хорошие советы.
источник
Для рабочей нагрузки, которую вы хотите применить к машине, требуется определенный объем памяти (не забудьте добавить достаточно в уравнение для обработки пиковых нагрузок), и вам необходимо настроить компьютер так, чтобы он был по крайней мере таким.
Современные операционные системы предоставляют виртуальную память как комбинацию физической памяти и пространства подкачки, поэтому, если вам нужно больше памяти, чем доступно машине, вы должны добавить достаточно места подкачки, чтобы заполнить этот пробел. То есть, если вам нужно максимум 80 ГБ, а на машине - 64 ГБ, вам потребуется обмен 16 ГБ.
Обычно установщики операционной системы просят вас создать начальную область подкачки (так как она является самой простой и позволяет устанавливать даже крошечные компьютеры), и было обнаружено, что хорошим правилом для типичных операций Unix является размер виртуальной памяти, который должен быть в три раза больше физической памяти, так что это обычно предлагается. Тем не менее, вы знаете больше о шаблоне использования, поэтому вы можете изменить его соответствующим образом.
Нет ничего плохого в том, чтобы работать без пространства подкачки, если нагрузка на память всегда меньше. Linux будет прозрачно использовать любую неиспользуемую память в качестве дискового кэша.
источник
Гораздо лучшая идея, чем «много подкачки», - это (ре) организовать работу так, чтобы рабочие наборы помещались в память, а затем использовать файловую систему для хранения и извлечения работы, которую вы делаете. То есть вместо того, чтобы заставлять ОС угадывать, каковы будут ваши шаблоны использования памяти, используйте то, что вы знаете о своих проблемах, чтобы контролировать свои шаблоны использования памяти.
В качестве случайного примера, который имеет непосредственное отношение ко мне этим летом ... При реализации квадратичного сита для разметки нужен большой (по-видимому) непрерывный массив (с некоторым сложным алгоритмом, детали которого на самом деле не имеют значения для этого примера). Массив должен быть ~ 100 гига-записей, так что легко в диапазоне 1 ТБ. Я мог бы притвориться, что выделил это, и позволил ОС сделать удивительное количество неэффективных операций подкачки, чтобы получить страницы в ОЗУ и из них для поддержки всех последовательных записей через массив. Вместо того, чтобы делать что-то с головой, я решил выделить гораздо меньший массив, который точно помещается в памяти, а затем повторно использовать этот маленький массив, чтобы итеративно покрыть остальную часть большого массива срезами. Я также удалил ОС, удалил работающий набор служб, заменил оболочку,
SSD может быть быстрым, но это не так быстро, как организация ваших вычислений для выполнения одного и того же набора операций без остановки обмена.
источник
Как уже упоминалось, раздел подкачки - хорошая идея, даже если у вас достаточно оперативной памяти. Не стоит помещать его на SSD; частые записи раздела подкачки со временем изнашивают ваш диск.
Если у вас есть запасной порт USB 3.0, я бы предложил использовать флэш-накопитель для вашего подкачки. Существует множество высокоскоростных флеш-накопителей, которые работают так же быстро, как и ваш SSD, но гораздо дешевле - достаточно дешевые, чтобы заменить их, если они начнут выходить из строя. Быстрый поиск на Amazon показывает, что есть много приличных 16 ГБ флешек USB 3.0 стоимостью менее 20 долларов, и даже около 64 ГБ дисков стоимостью менее 60 долларов.
Разбейте всю флешку как пространство подкачки, и у вас будет место подкачки, если вам это нужно, и спокойствие, зная, что многократно записываемая память легко (и дешево) заменяется.
источник
Вы будете в порядке даже с 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-х годах, оно никогда не было «золотой истиной» (просто то, что работало нормально для большинства пользователей), и в настоящее время оно не применяется вообще ,
У вас должно быть разумное количество свопа, которое вы легко можете себе позволить (скажем, гигабайт), чтобы ОС могла выводить некоторые устаревшие данные, и поэтому мир не сразу заканчивается, когда вы однажды попросите немного больше памяти. Но это все.
источник