Вопрос: Если оперативная память дешевая, почему бы нам не загрузить все в ОЗУ и запустить ее оттуда?


ОЗУ дешево и намного быстрее, чем SSD. Это просто неустойчиво. Итак, почему компьютеры не имеют много ОЗУ и при включении питания загружают все в ОЗУ с жесткого диска / SSD и просто запускают все оттуда, полагая, что нет никакой реальной необходимости сохранять что-либо за пределами памяти? Разве компьютеры не будут намного быстрее?

Конечно, текущая операционная система может вообще не поддерживать это, но есть ли причина, по которой ОЗУ не используется таким образом?


126
2017-08-27 15:20


Источник


Вы считаете, что ОЗУ дешево. Сколько стоит 1 ТБ ОЗУ? - Alan Shutko
То, что вы описали, называется RAMDisk, и люди уже делают то, что вы описываете. Я загружаю большинство своих программ в память с помощью RAMDisk. Вам также не нужно специальное оборудование, которое вы можете использовать для работы с системной памятью и программным обеспечением. - Ramhound
Мы делаем это под обложками, насколько это поддерживает ОС. Windows использует «неиспользуемую» оперативную память для «дискового кэша», и я предполагаю, что многие версии Linux тоже. Но есть слишком много дисков, чтобы все это было в ОЗУ. - Daniel R Hicks
«Дешевый» - относительный термин. Каждый бит памяти дешевле, чем это было пару лет назад, но это дороже, чем хранение на жестком диске. И все же прогресс прогресса обеспечит, чтобы программы всегда заполняли всю доступную оперативную память независимо от того, сколько доступно; если бы у каждого компьютера внезапно появилось больше оперативной памяти, разработчики добавили больше информации в свои программы. - jhocking
Google загружает интернет в ОЗУ - Ari


Ответы:


Существует несколько причин, по которым ОЗУ не используется таким образом:

  1. Обычная оперативная память (DDR3) дешево, но не совсем такая дешевая. Особенно, если вы хотите купить относительно большие модули DIMM.
  2. ОЗУ теряет свое содержимое при выключенном питании. Таким образом, вам потребуется перезагрузить контент во время загрузки. Предположим, вы используете RAM-диск размером SSD размером 100 ГБ, что означает задержку в две минуты, а 100 ГБ копируются с диска.
  3. ОЗУ использует больше мощности (скажем, 2-3 ватт на модуль DIMM, примерно такой же, как простаивающий SSD).
  4. Чтобы использовать столько оперативной памяти, вашей материнской плате потребуется много разъемов DIMM и следы на них. Обычно это ограничивается шестью или менее. (Больше пространства на борт означает больше затрат, тем самым, более высокие цены).
  5. Наконец, вам также понадобится RAM для запуска ваших программ, поэтому вам потребуется нормальный размер оперативной памяти (например, 18GiB и достаточно для хранения данных, которые вы ожидаете использовать).

Сказав это: да, RAM-диски действительно существуют. Даже как Плата PCI с разъемами DIMM и как устройства для очень высоких IOps. (В основном используется в корпоративных базах данных до того, как SSD стал вариантом). Эти вещи не дешево хоть.

Вот два примера низкопроизводительных дисковых карт RAM, которые сделали его в производство:

Обратите внимание, что есть способы сделать это больше, чем просто создать RAM-диск в общей памяти работы.

Ты можешь:

  1. Используйте специальный физический диск для него с изменчивой (динамической) памятью. Либо как устройство, либо интерфейс SAS, SATA или PCI [e].
  2. Вы можете сделать то же самое с резервным хранилищем с батареей (нет необходимости копировать в него исходные данные, так как он будет хранить содержимое до тех пор, пока резервная мощность остается действительной).
  3. Вы можете использовать статические ОЗУ, а не DRAMS (более простые, более дорогие).
  4. Вы можете использовать флэш-память или другое постоянное хранилище для хранения всех данных (Предупреждение: flash обычно имеет ограниченное количество циклов записи). Если вы используете флеш-память только для хранения, вы просто перешли на SSD. Если вы храните все в динамической ОЗУ и сохраняете флэш-резервную копию при отключении питания, вы возвращаетесь к приборам.

Я уверен, что есть способ описать, от Amiga RAD: сбросить оставшиеся RAM-диски в IOPS, изнашивать уровень и G-d знает что. Тем не менее, я сокращу этот короткий и только список еще один пункт:

DDR3 (текущая цена DRAM) по сравнению с ценами SSD:

  • DDR3: 10 евро за гигабайт, или 10 000 евро за TiB
  • SSD: Значительно меньше. (Около 1/4 до 1/10).

175
2017-08-27 15:28



+1 для удара по двум критическим точкам: HD еще дешевле, чем RAM, а RAM - volatile.RAM - это ваш рабочий стол, а ваш HD - это склад. Nuf sed. - Chad Harrison
@Hennes - Не предлагал загрузить весь диск в память с помощью программного обеспечения RAMDisk. Вы можете загрузить, скажем, Photoshop с механического диска в RAMDisk, используя точки соединения, и производительность будет лучше или лучше, чем установка SSD. - Ramhound
+1 для «RAM дешево, но не так дешево». Быстрый поиск показывает, что накопители SSD в настоящее время продаются от 75 центов до концерта в зависимости от мощности и производителя. Модули памяти DDR3, в зависимости от емкости, продаются по цене от 7 до 10 долларов США за ГБ, поэтому соотношение оперативной памяти и SSD-стоимости может составлять до 15: 1. - KeithS
RAM loses its contents when powered off. Точнее, работает только энергозависимая ОЗУ энергонезависимое ОЗУ сохраняет все даже при выключенном питании, например Flash-фишки, В этом смысле SSD не отличается от ОЗУ, а подтипом. - Saul
Я не согласен. Вспышкам на SSD может не понадобиться питание, но контроллер и другая электроника на SSD потребляют энергию. Не так много энергии, но примерно такая же, как мощность, потребляемая современным DIMM (1-3 Вт). - Hennes


Операционные системы уже делают это, кеш страницы:

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

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

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

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

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


70
2017-08-27 17:06



Отличный ответ. У ОС также есть такие функции, как Superfetch, которые будут загружать часто запрашиваемые данные с диска в ОЗУ во время загрузки. - Matthew Lock
Хороший ответ. все верхние атаки (попробуйте сделать недействительными) вопрос, а не отвечать на него - vsync


Как отмечает Алан Шутко в своем комментарии к этому вопросу, оперативная память фактически не дешевая.

Вот несколько точек данных. Когда я нахожусь в Google для 4 ГБ ОЗУ, 64 ГБ SSD и 1 ТБ HDD (механический жесткий диск), вот расходы, которые я вижу (это для 25 августа 2013 года):

Вау! Жесткие диски в 100 раз дешевле RAM! И SSD на 8 раз дешевле RAM.

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


42
2017-08-27 19:54



ОЗУ на несколько порядков выше SSD (без проблемы износа записи), которые на несколько порядков выше, чем прямая ржавчина и GLASS. И уверен, что вы можете с помощью 1 ТБ диска за 80 долларов, но попробуйте найти это хранилище на 15 000 об / мин с подключением SCSI или оптоволоконным каналом. Вы смотрите на 4 x 250Gb @ ~ $ 250 плюс стоимость контроллера BBU (около 500 долларов США), что делает стоимость примерно такой же, как SSD. - symcbean
@symcbean - Это несколько nitpicking; помните, что получение ОЗУ в больших номиналах (как вы хотите, чтобы заменить диск или SSD) стоит больше, чем $ 25 / ГБ. - Russell Borogove
Покупка @symcbean SSD с аналогичными характеристиками предприятия будет стоить более 1000 долларов. - mikebabcock
Было бы очень интересно видеть, что этот ответ пересматривается каждые несколько месяцев и изменяется цена, и видно, как цены постоянно снижаются. - Ofer Zelig
@OferZelig «Посмотрите, как цены постоянно снижались» Ты имеешь в виду за исключением случаев, когда они не? - Michael Kjörling


Я выполняю все мои непосредственные операции чтения / записи для создания контента в RAM-дисках на моей локальной машине. Я также храню там свои журналы ведения журнала MongoDB, а также мои компиляторы и интерпретаторы Python и стандартную библиотеку. Этот диск сохраняется при выключении и восстанавливается при запуске. Второй RAM-диск, который я использую, - 64 мегабайта, и все папки кэша моего интернет-браузера указывают там; что он теряется при закрытии и сбрасывается, когда он заполнен.

Используйте правильные инструменты для работы, я полагаю, был бы ответом, который я вам даю. Я генерирую данные на 30-1000 раз быстрее, используя RAM-диск, чем на моем 7200rpm Western Digital.

Это программа, которую я использую: http://www.romexsoftware.com/en-us/primo-ramdisk/

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

8 gig RAM diskeveryday SATA III HDD


8
2017-08-27 23:41



Вы знаете, что ОС кэширует вещи для вас уже, верно? - Potatoswatter
«когда 32 гигабайта Рама меньше 200 долларов», 32 ГБ на жестком диске 1 ТБ начинаются со скоростью около $ 3, дают или берут; потребительские накопители на 1 ТБ сегодня стоят менее $ 100, и даже приводы корпоративного класса могут быть использованы для аналогичных тарифов на один гигабайт (Amazon хочет $ 408 в настоящее время для 4-Тбайт Seagate ST4000NM0043, который имеет RRP в размере 520 долларов США, и это отдельные единицы без покупки вокруг). - Michael Kjörling
@Potatoswatter да, это так. Но он не кэширует 10 000 вновь созданных файлов. Итак, я явно «кеширую» их на своем RAM-диске. - blakev
@ MichaelKjörling Мы не пытаемся хранить 1 ТБ в ОЗУ. Это нелепо. Будьте реалистичны и выбирайте несколько ключевых папок, которые вы всегда хотите иметь в ОЗУ, и вы можете ЗНАЧИТЕЛЬНО (на порядок) ускорить определенные операции в вашем рабочем процессе. Смотрите мои изображения выше. - blakev
"все относительно. На моей машине он загружает «все» из моего 8-гигабайтного образа жесткого диска; байт для байта все 8 концертов клонируется каждый раз. Ради вопроса, если вы ищете решение для действительно сделайте это, вы останетесь в пределах «возможного» или выпустите его из пропорции, чтобы соответствовать типу ответа «это невозможно». - blakev


Да, это предпосылка многих баз данных в памяти, которые появляются на рынке. Одним из примеров является SAP HANA. Идея заключается в том, что оперативная память дешевая и с точки зрения производительности операции чтения / записи в ОЗУ на 1000 раз быстрее, чем операции с дисками. Поэтому большая часть данных хранится в ОЗУ, а затем вы определяете стратегию старения данных, с помощью которой старые данные возвращаются обратно в холодное хранилище (то есть диск).


4
2017-08-27 19:59





Краткое объяснение:

В первый раз, когда приложение выполняется, оно переносится с жесткого диска или сети в ОЗУ. Поэтому не беспокойтесь, вы уже это делаете.

Но, как правило, существует не только один файл приложения / процесса, и есть некоторые операции ввода-вывода, предназначенные для жесткого диска или сети (другие файлы приложения или другие операции ввода-вывода с системой и т. Д.), Что может замедлить работу заявление. Они могут быть направлены на RAM-диск, но вы должны учитывать, что RAM-диск удаляется при отключении питания и должен быть снова заполнен при запуске.

И ОЗУ не так дешево, как представлено в вопросе. Вы должны учитывать не только стоимость ОЗУ, но и стоимость рабочего ОЗУ, включая сокеты на вашей материнской плате (ограниченные / редкие и, следовательно, более ценные) и стоимость потерянных данных, когда мощность падает.

Например, компьютер с жестким диском 1 ТБ можно купить дешево, и речь идет о домашних компьютерах, компьютер с 1 ТБ ОЗУ находится в диапазонах суперкомпьютеров. (но Intel работает над чем-то средним диапазоном: http://vr-zone.com/articles/more-on-xeon-e5-terabyte-of-ram-even-at-midrange-/14366.html)


4
2017-08-28 09:38





Это БОЛЬШОЙ вопрос, и я нахожу ответы увлекательными. Я собираюсь прокомментировать это как Oracle DBA, и мои ответы КОНКРЕТНЫЕ для базы данных Oracle. Это большая ошибка, которую многие люди делают при работе с Oracle. Я не уверен, что это относится и к другим приложениям. Это не должно быть не по теме, а предназначено как специализированный ответ.

Когда вы настраиваете производительность с помощью Oracle, вы действительно хотите устранить узкие места. Хотя большинство из нас этого не говорит, оно основано на Теории ограничений: https://en.wikipedia.org/wiki/Theory_of_constraints

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

Запросы кажутся медленными. Консенсус в том, что если мы увеличим ОЗУ, мы должны увеличить время отклика запросов, поскольку память быстрее, чем диск. Ну ... Вот как Oracle обрабатывает управление памятью для данных. Oracle имеет множество мест памяти, которые распределяются по конкретным обязанностям. Таким образом, вы можете увеличить эти воспоминания. Область, используемая для данных, называется «буферным кэшем». Это серия связанных списков (число которых, как правило, увеличивается с каждой версией). Каждый раз, когда блок находится на диске во время запроса, на нем запускается алгоритм хеширования, чтобы определить, в какой список его вставить. Куда поместить его в список, основан на алгоритме подсчета очков (поясняется на сайте поддержки Oracle, поэтому вам придется заплатить, чтобы получить его ... это не очень важно).

ОДНАКО, когда вы запускаете запрос, Oracle выводит защелку на цепочку буферов, которую вы просматриваете в то время. Этот LATCH (обратите внимание: это не блокировка. «Защелка» Google, если вы не знаете разницу) блокирует все остальные операции в этой цепочке на время вашего чтения. Таким образом, он блокирует чтение и запись (это полностью отличается от того, что Oracle утверждает, что блокировки не блокируют чтение).

Это необходимо, потому что, когда вы читаете блок в цепочке, Oracle перемещает его в зависимости от того, как часто он «запрашивается». Чаще всего запрашиваемые блоки перемещаются в верхнюю часть и менее часто запрашиваемые блоки оставляются внизу и выходят из строя. У вас не может быть 2 сеанса, просматривающих связанный список и движущиеся блоки вокруг, или вы нажмете указатели, указывающие на несуществующие местоположения.

Когда вы увеличиваете размер памяти, вы увеличиваете размер каждого связанного списка. Это увеличивает время, необходимое для чтения списка. Один плохой запрос или сложный запрос может сделать десятки тысяч или даже миллионы прочитанных связанных списков. Каждое чтение выполняется быстро, но число из них приводит к защелкам, и они блокируют другие сеансы. Oracle называет это «логическим IO» (или буфером get или некоторым другим материалом). Этот жаргон специфичен для Oracle и может означать что-то еще в других частях ИТ-инфраструктуры.

Итак, если список длиннее и у вас действительно плохой SQL, то SQL-выражения будут удерживать их защелки дольше. Увеличение памяти иногда может привести к снижению производительности. Большую часть времени этого не произойдет. Люди будут тратить много денег и не получают никакой пользы. При этом есть моменты, когда вам нужно больше памяти в буферном кеше, но вам нужно правильно определить узкое место, чтобы узнать, подходит ли это. Я не могу обсуждать, как анализировать это в этой статье. См. Форумы DBA. Некоторые обсуждают это там. Это довольно сложно.

Кто-нибудь имеет конкретные примеры с другими программными продуктами, где это может произойти? Существует потрясающая бизнес-книга под названием «Цель», в которой обсуждается смягчение ограничений на фабрике. Этот процесс очень похож на то, что делают администраторы баз данных Oracle при оценке проблем производительности. Это часто стандартное чтение в программах MBA. Очень полезно читать для ИТ-профессий.

https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt


4
2017-08-28 16:06



Не shure это revelant на вопрос, но в ином случае интересно. - jb.
его причина не просто добавить барана. Это конкретный и узкий, но я думаю, что это применимо. - Bob
очень интересно. Это еще больше усугубляет общее обсуждение. - Lorenz Lo Sauer


ОЗУ может быть дешевой, но не такой дешевой, как традиционное хранилище.

У меня есть жесткий диск 3 ТБ (99 долларов США): Жесткие диски

И вам понадобится 48 из них для 3 ТБ по цене (719 долларов США) каждый: RAM Цитировать

Это составит 34 512 долларов против 99 долларов США. Не говоря уже о цене аппаратного обеспечения, необходимого для работы 3 ТБ ОЗУ.


3
2017-08-28 00:17



ответ не имеет отношения к вопросу - BlueBerry - Vignesh4303
Думаю, в конце он пытается сказать: «ОЗУ не дешево». - jaczjill
Также вы не можете подключить 48 из этих 8-канальных комплектов к любому устройству, о котором я знаю. Хотя существуют системы, которые принимают 16 (или более) 64 ГБ REG ECC-помех в один сервер. Однако это совсем не дешево. - drescherjm


Фактически это делается в некоторых сценариях. Если у вас достаточно операционная система / приложение, вы можете запустить его полностью в ОЗУ. Конечно, у него есть все недостатки, которые имеет принятый ответ. Но это возможно и происходит.

Взгляните на Puppy Linux, популярный дистрибутив Linux. Их работа на странице рассказывает о запуске из ОЗУ: http://puppylinux.org/wikka/howPuppyWorks 


2
2017-08-28 14:07



И, конечно же, в кластерной среде вы можете хранить стек приложений в распределенной / сетевой файловой системе, обслуживать базовую ОС через PXE или аналогичную систему и запускать бездисковые узлы, если хотите. - Aesin