129

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

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

12 ответов12

177

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

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

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

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

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

Вы можете:

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

Я уверен, что от Amiga RAD можно описать гораздо больше: сбросить оставшиеся диски RAM на IOPS, выравнивание износа, и Gd знает, что. Тем не менее, я сокращу это и перечислю только еще один пункт:

Цены DDR3 (текущая DRAM) и цены SSD:

  • DDR3: 10 евро за ГиБ или 10 000 евро за ТиБ
  • Твердотельные накопители: значительно меньше. (От 1/4 до 1/10.)
71

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

В вычислительной технике кэш страниц, часто называемый дисковым кешем, является "прозрачным" кешем страниц с резервной копией на диске, которые хранятся в оперативной памяти (RAM) операционной системы для более быстрого доступа. Кеш страниц обычно реализуется в ядрах с управлением памятью подкачки и полностью прозрачен для приложений.

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

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

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

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

43

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

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

Вау! Жесткие диски в 100 раз дешевле оперативной памяти! И твердотельные накопители в 8 раз дешевле оперативной памяти.

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

8

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

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

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

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

8 Гб оперативной памятикаждый день SATA III HDD

5

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

4

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

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

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

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

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

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

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

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

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

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

4

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

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

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

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

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

3

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

У меня есть жесткий диск 3TB ($ 99): HDD Цитата

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

Это составит 34 512 долларов против 99 долларов. Не говоря уже о цене оборудования, необходимого для запуска 3 ТБ оперативной памяти.

2

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

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

2

Я думаю, что ответ частично можно ответить следующим образом:

Предпосылка:

  • Только те типы оперативной памяти дешевы, которые производятся и продаются в больших количествах
  • Производители RAM хотят продавать свой продукт.
  • низкие цены требуют продажи больших объемов, чтобы получить прибыль
  • большая база пользователей использует устоявшуюся технологию памяти
  • новая технология памяти занимает годы, чтобы получить широкое распространение
  • слоты памяти сильно ограничены в устройствах меньшего размера из указанной пользовательской базы
  • мобильная технология растет
  • не менее 0,1% от 1 млрд. Пользователи ПК могут выбрать 128 ГБ ОЗУ или более (предположение)
  • Технологические обновления, которые пользуются большим спросом, приносят большую прибыль, чем новые технологические поколения.

Учитывая ограниченное количество слотов памяти, важным решением является более высокая микросхема памяти с меньшими внутренними размерами и / или 3D-стекирование. Оба процесса прогрессировали, как и ожидалось, в течение последних 36 месяцев.

Таким образом, вопрос: « Максимальный объем памяти DDR3 » или семантически: « DDR3, почему нет модулей памяти больше 16 ГБ »?

И ответ:

Стандарт DDR3 позволяет использовать чипы емкостью от 512 мегабит до 8 гигабит, что обеспечивает максимальный размер модуля памяти 16 гигабайт (src ).

DDR4 изменит это, как показано на этой карте технологий:

Результат:

  • полузамкнутый рынок памяти
  • Apple Macbook Pro феерия останавливается на жалких 16 ГБ
  • повышенный спрос на облачные или удаленные службы (для размещения этих баз данных виртуальных машин и InMemory многие разработчики и инженеры с таким же успехом будут работать локально)
  • ...???

Несколько предостережений к основательному посту Хеннеса:

  • Обычная настольная (DDR3) оперативная память дешевая, но не совсем дешевая: достаточно дешевая, чтобы ее могли купить некоторые люди из-за большого объема данных
  • ОЗУ теряет свое содержание при отключении питания: люди сталкиваются с более сложными проблемами, чем энергозависимая память. Свидетельством тому являются патенты и решения по "работе с энергозависимой памятью" с 2010 года.
  • ОЗУ потребляет больше энергии: выборочно отключайте неиспользуемую память (банки) в мобильных устройствах. Также от 1 до 2 Вт меркнет по сравнению с 800 Вт графическими процессорами
  • вам понадобится много разъемов DIMM: чип-технология по-прежнему прогрессирует, как обычно, это означает, что возможность использования более высоких чипов памяти не просто существует, но производители чипов с удовольствием продадут их вам в большом количестве
  • вам также понадобится оперативная память для запуска ваших программ: True. Но pkr298 предполагает, что вся ОС и программы загружены в ОЗУ, а не то, что он должен отменить жесткий диск /SSD
1

Вы на самом деле правы. В ближайшее время все хранилище и память будут в форме на нано оперативной памяти. NRAM - это, по сути, "механические" переключатели шириной в несколько атомов. Он не нуждается в токе для поддержания состояния, поэтому он энергоэффективен и не требует охлаждения, а поскольку переключатели настолько малы, плотность очень высока и Это хорошо по двум причинам: одна из них - быстрый доступ к памяти, и вы сможете хранить терабайты данных на небольших устройствах, таких как мобильные телефоны. если вы хотите узнать больше, посмотрите это: http://www.nantero.com/mission.html и это http://en.wikipedia.org/wiki/Nano-RAM

0

Как уже говорили другие, оперативная память нестабильна и примерно в 10 раз дороже SSD.

Тем не менее, есть продукт, что там идет довольно близко к тому , что вы описываете , - к сожалению , я не могу вспомнить название.

Это накопитель на базе ОЗУ (IIRC max 64 ГБ), соединенный с CF-картой и батареей. Когда вы включаете систему, она копирует содержимое CF-карты в ОЗУ (я считаю, что обслуживание запросов с CF-карты, если они еще не были загружены). При выключении содержимое оперативной памяти копируется на CF-карту - батарея достаточно большая, чтобы позволить ей закончить до того, как она разрядится.

Это не дешево.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .