如果RAM很便宜,为什么不将所有内容都加载到RAM并从那里运行呢?


132

RAM很便宜,并且比SSD快得多。它只是易变的。那么,为什么计算机没有大量的RAM,并在开机时从硬盘驱动器/ SSD将所有内容加载到RAM并仅从那里运行所有内容,前提是没有真正需要在内存之外保留任何内容?电脑会不会快得多?

当然,当前的操作系统可能根本不支持此功能,但是是否有任何原因不使用RAM?


109
您认为RAM很便宜。1TB RAM需要多少钱?
艾伦·舒特科

39
您所描述的被称为RAMDisk,人们已经按照您的描述进行了操作。我使用RAMDisk将大多数程序加载到内存中。您也不需要特殊的硬件即可使用系统内存和软件来执行此操作。
Ramhound

16
在一定程度上,我们会在一定程度上支持给定的操作系统。Windows使用“未使用的” RAM进行“磁盘缓存”,我认为许多版本的Linux也会这样做。但是,有太多磁盘无法将其全部装入RAM。
Daniel R Hicks

19
“便宜”是一个相对术语。每块内存都比几年前便宜,但是比硬盘驱动器上的存储要贵。无论如何,进步将确保程序总是填充所有可用的RAM,无论有多少可用空间。如果每个人的计算机突然有更多的可用RAM,则开发人员将在程序中添加更多内容。
飞速

15
谷歌加载互联网RAM
阿里

Answers:


177

不使用RAM的原因有几个:

  1. 普通台式机(DDR3)RAM很便宜,但并不便宜。特别是如果您要购买较大的DIMM。
  2. 关闭电源后,RAM会丢失其内容。因此,您将需要在引导时重新加载内容。假设您使用100GB的SSD大小的RAM磁盘,这意味着从磁盘复制100GB时大约要延迟两分钟。
  3. RAM使用更多的功率(例如,每个DIMM 2-3瓦,大约与空闲的SSD相同)。
  4. 要使用这么多的RAM,您的主板将需要大量的DIMM插槽及其走线。通常限制为六个或更少。(更多的电路板空间意味着更多的成本,因此价格也更高。)
  5. 最后,您还将需要RAM才能运行程序,因此您将需要正常的RAM大小才能工作(例如18GiB,足以存储您希望使用的数据)。

话虽如此:是的,RAM磁盘确实存在。甚至用作具有DIMM插槽的PCI板,以及用作具有很高IOps的设备。(通常在公司数据库中使用,然后成为SSD的选择)。这些东西并不便宜

以下是两个将其投入生产的低端RAM磁盘卡的示例:

请注意,除了在公共工作存储器中创建RAM磁盘外,还有更多的方法可以做到这一点。

您可以:

  1. 为它使用易失性(动态)内存的专用物理驱动器。无论是作为设备,还是具有SAS,SATA或PCI [e]接口。
  2. 您可以对电池后备存储器执行相同的操作(无需将初始数据复制到其中,因为只要备用电源保持有效,它就会保留其内容)。
  3. 您可以使用静态RAM而不是DRAM(更简单,更昂贵)。
  4. 您可以使用闪存或其他永久性存储来保留所有数据(警告:闪存通常具有有限数量的写周期)。如果仅将闪存用作存储设备,则仅移至SSD。如果将所有内容存储在动态RAM中,并在断电时保存到闪存备份中,那么您将返回设备。

我敢肯定,从Amiga RAD,还有更多方法可以描述:将尚存的RAM磁盘重置为IOPS,损耗平衡并且Gd知道什么。但是,我将简短介绍一下,仅列出另外一项:

DDR3(当前DRAM)价格与SSD价格:

  • DDR3:每GiB 10欧元,或每TiB 10,000欧元
  • SSD:少得多。(大约1/4至1/10。)

12
+1表示达到两个关键点:HD仍然比RAM便宜,RAM易失。RAM是您的工作台,HD是仓库。Nuf sed。
乍得哈里森

1
@Hennes-不建议使用软件RAMDisk解决方案将整个驱动器加载到内存中。您可以使用结点将说的Photoshop从机械驱动器加载到RAMDisk中,性能会更好或与SSD安装一样好。
Ramhound

29
+1表示“ RAM很便宜,但并不便宜”。快速搜索显示,根据容量和制造商的不同,SSD驱动器目前的售价在75美分至1美元之间。DDR3 RAM模块根据容量的不同,每GB的价格在7-10美元之间,因此RAM与SSD的成本之比可能高达15:1。
KeithS

2
RAM loses its contents when powered off.确切地说,只有易失性RAM可以工作,而非易失性RAM甚至在断电时也可以保留所有内容,例如闪存芯片。从这个意义上讲,SSD与RAM并无不同,只是其子类型。
索尔

1
我不同意。SSD上的闪存单元可能不需要电源,但是SSD上的控制器和其他电子设备会消耗电源。功率不多,但与现代DIMM(1-3瓦)消耗的功率大致相同。
Hennes

71

操作系统已经使用页面缓存执行此操作:

在计算中,页面缓存(通常称为磁盘缓存)是操作系统在主内存(RAM)中保留的磁盘支持页面的“透明”缓存,以加快访问速度。页高速缓存通常在具有页内存管理的内核中实现,并且对应用程序完全透明。

从磁盘读取页面时,操作系统会将数据加载到内存中,并保留在那里,直到可以更好地使用该内存为止。如果您有足够的内存,则操作系统将只读取一次每个页面,然后从内存开始使用它。操作系统执行真实磁盘IO的唯一原因是:它需要读取尚未在内存中的页面,或者写入页面(在这种情况下,您可能希望将其保存到磁盘)。

这种方式的优点之一是您不必将整个硬盘驱动器都加载到内存中,这在不适合的情况下很有用,并且还意味着您不会浪费时间阅读应用程序不需要的文件需要。另一个优点是,只要操作系统需要更多内存,就可以丢弃缓存(最好使下一个磁盘的读取速度稍慢一些,而不是使程序由于内存不足而崩溃)。同样,用户不需要手动决定虚拟磁盘中应该包含的内容也很有用:无论您最常使用什么,都会自动保存在主内存中。

如果您有很多内存,但是您的应用程序运行不如您预期的那样快,则很有可能它们运行缓慢,因为它们运行安全。例如,如果您告诉SQLite不要等待写入完成,则SQLite的速度要快几个数量级,但是如果您不干净地关机,则数据库将完全损坏。

而且,/tmp通常是Linux发行版上的虚拟磁盘,因为如果数据丢失了就可以。关于这是否是一个好主意,仍存在一些争论,因为如果写入太多数据/tmp,则可能会耗尽内存。


5
好答案。操作系统还具有Superfetch之类的功能,该功能将在引导时将磁盘中通常需要的数据加载到RAM中。
马修·洛克

好答案。所有排名靠前的攻击(尝试使它无效)而不是实际回答问题
vsync 2015年

44

正如Alan Shutko在对问题的评论中指出的那样,RAM实际上并不便宜。

这里是一些数据点。当我在Google上搜索4 GB RAM,64 GB SSD和1 TB HDD(机械硬盘)时,这是我看到的费用(这是2013年8月25日的费用):

哇!HDD比RAM便宜100倍!而且SSD比RAM便宜8倍。

(此外,如其他答案所指出的,RAM本质上是易失的,因此您需要某种其他形式的持久性存储。)


2
RAM比SSD快几个数量级(没有写磨损问题),而SSD比旋转生锈和GLASS快几个数量级。并且可以确定您可以以80美元的价格购买1TB磁盘,但是请尝试在具有SCSI或光纤通道连接性的15k rpm磁盘上找到该存储。您正在查看4 x 250Gb @〜250美元,加上BBU控制器的成本(约500美元),使成本与SSD相同。
symcbean 2013年

1
@symcbean-有点挑剔;请记住,以大面额获得RAM(如您要更换磁盘或SSD那样)的成本大约为$ 25 / GB。
罗素·博罗戈夫

3
@symcbean购买具有类似企业特征的SSD将花费超过1000美元。
mikebabcock

每隔几个月重新检查这个答案并修改价格,并观察价格如何持续下降,这将是非常有趣的。
Ofer Zelig

@OferZelig “看看价格如何持续下降”,您的意思是除了价格不下跌之外
CVn

9

我会立即执行所有读/写操作,以便在本地计算机上的RAM磁盘中生成内容。我还在那里存储了MongoDB日记文件夹,以及我的编译器,Python解释器和标准库。该磁盘在关闭时保存,并在启动时恢复。我使用的第二个RAM磁盘是64 MB,所有我的Internet浏览器的缓存文件夹都指向该磁盘。会在关闭时丢失,并在充满时自动刷新。

使用正确的工具来完成我认为的工作,这将是我给您的答案。使用RAM磁盘生成数据的速度比7200rpm Western Digital快30-1000倍。

这是我正在使用的程序:http : //www.romexsoftware.com/zh-cn/primo-ramdisk/

...并且当32gig的Ram低于200美元时,我不明白为什么这种情况没有变得越来越普遍。

8 gig RAM磁盘日常SATA III硬盘


4
您知道操作系统已经为您缓存了东西,对吗?
Potatoswatter

“当32gig的Ram低于200美元时,” 1 TB HDD上的32 GB起始价为3美元左右,买入或卖出;如今,消费者1 TB驱动器的价格不到100美元,甚至企业级驱动器的价格也可达到每千兆字节(亚马逊目前希望4 TB希捷ST4000NM0043的价格为408美元,RRP为520美元,而单个设备甚至没有购物周围)。
CVn

1
@Potatoswatter,是的。但是它不会缓存10,000个新创建的文件。因此,我明确地将它们“缓存”在我的RAM磁盘上。
blakev

@MichaelKjörling我们不是要在RAM中存储1 TB。这是荒谬的。现实一点,选择一些您一直希望在RAM中拥有的关键文件夹,您可以显着(数量级)加快工作流程中的某些操作。看到上面的图片。
blakev

1
“一切”都是相对的。在我的机器上,它确实从我的8 gig硬盘驱动器映像中加载了“一切”。每次克隆整个8字节的字节。出于问题的考虑,如果您正在寻找真正做到这一点的解决方案,则您将停留在“可能”范围内或将其超出比例以适合“这是不可能的”类型的答案。
blakev

5

是的,这是市场上出现的许多内存数据库的前提。一个示例是SAP HANA。这个想法是RAM很便宜,从性能的角度看,RAM上的读/写操作比磁盘操作快1000倍。因此,大多数数据都保存在RAM中,然后定义一个数据老化策略,利用该策略可以将旧数据回收回冷存储(即磁盘)。


4

简短说明

第一次执行应用程序时,会将其从硬盘或网络传输到RAM。因此,不用担心,您已经做到了。

但是,通常,不仅只有一个应用程序/进程文件,而且还有一些针对硬盘或网络的I / O操作(应用程序的其他文件或与系统相关的其他I / O操作等),这可能会降低您的速度应用。这些可以定向到RAM磁盘,但是您应该考虑到RAM磁盘在断电时会删除,并且应该在启动时再次填充。

RAM不像问题中那样便宜。当掉电时,您不仅应该计算RAM的成本,还应该计算工作RAM的成本,包括主板上的插槽(这些插槽有限/稀有,因此更有价值)和丢失数据的成本。

例如,可以廉价购买具有1TB HDD的计算机,这与家用计算机有关,具有1TB RAM的计算机属于超级计算机范围。(但英特尔正在研究中端产品:http : //vr-zone.com/articles/more-on-xeon-e5-terabyte-of-ram-even-at-midrange-/14366.html


4

这是一个伟大的问题,我的回答令人着迷。我将以Oracle DBA的身份对此进行评论,而我的答案是Oracle数据库的特定说明。这是很多人在使用Oracle时犯的一个主要错误。我不确定这是否也适用于其他应用程序。这并不意味着偏离主题,而是作为专门的答案。

当您使用Oracle调整性能时,您实际上是在寻找消除瓶颈的方法。尽管我们大多数人都没有说过,但这是基于约束理论的:https : //en.wikipedia.org/wiki/Theory_of_constraints

内存可能不是您的瓶颈。Oracle具有复杂的内存管理机制,如果瓶颈是其他地方,增加内存实际上会减慢速度。让我举一个非常普遍的例子。

查询似乎很慢。共识是,如果增加RAM,则由于内存比磁盘快,因此应该增加查询的响应时间。好吧...这就是Oracle处理数据的内存管理的方式。Oracle具有分配给特定职责的各种内存位置。因此,您可以增加这些记忆。用于数据的区域称为“缓冲区缓存”。这是一系列的链表(每个版本中链表的数量往往会增加)。在查询过程中,每次在磁盘上找到一个块时,都会在其上运行哈希算法以确定将其粘贴到哪个列表中。将其放在列表中的位置基于触摸计数算法(在Oracle支持网站上有解释,因此您必须付费才能获得它……这并不重要)。

但是,当您运行查询时,Oracle会删除您当时搜索的缓冲区链上的闩锁。此闩锁(注意:这不是锁。如果您不知道区别,Google会“闩锁”)会在读取期间阻止该链上的所有其他操作。因此,它阻止读写操作(这与Oracle声称锁不阻止读取操作完全不同)。

这是必要的,因为当您阅读链中的块时,Oracle会根据“请求”的频率来移动它。请求频率较高的块移至顶部,请求频率较低的块留在底部并老化。您不能有2个会话读取链接列表并四处移动块,否则您将碰到指向不存在位置的指针。

当您增加内存的大小时,您将增加每个链接列表的大小。这会增加读取列表所需的时间。一个糟糕的查询或复杂的查询可以读取成千上万甚至上百万个链接列表。每次读取都很快速,但是它们的数量会导致锁存器被占用,这会阻塞其他会话。Oracle将其称为“逻辑IO”(或缓冲区获取或其他内容。这种术语是Oracle特有的,可能在IT​​的其他部分有其他含义)。

因此,如果列表较长并且您的SQL确实很差,则SQL语句将保留其闩锁的时间更长。增加内存有时会降低性能。大多数情况下,这不会发生。人们会花很多钱,却看不到任何好处。话虽这么说,有时您在缓冲区高速缓存中需要更多的内存,但是您必须正确识别瓶颈才能知道这是否合适。我无法在这篇文章中讨论如何对此进行分析。请参阅DBA论坛。有人在那里讨论。这相当复杂。

有人在其他软件方面有具体的例子吗?有本很棒的商业书叫做“目标”,讨论了减轻工厂中的约束。此过程与Oracle DBA在评估性能问题时非常相似。在MBA课程中,这通常是标准阅读。对于IT专业人士来说,阅读非常有价值。

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


不能肯定这是这个问题的启示,但其他方面很有趣。
jb。

这是一个不只添加ram的原因。它是特定且狭窄的,但我认为它适用。
鲍勃

很有意思。这为整个讨论带来了另一个角度。
洛伦兹·

3

RAM可能很便宜,但不如传统存储便宜。

我有一个3TB硬盘($ 99):HDD报价

您将需要48个3TB 内存,每个($ 719):RAM Quote

这将是$ 34,512与$ 99。更不用说运行3TB RAM所需的硬件价格。


答案是不相关的问题
蓝莓- Vignesh4303

1
我认为最后他想说“ RAM并不便宜”。
jaczjill

同样,您不可能将这8个通道套件中的48个连接到我所知道的任何设备中。尽管有些系统接受16个(或更多)64 GB REG ECC调光到单个服务器中。但是这些都不便宜。
drescherjm

2

实际上是在某些情况下完成的。如果您的操作系统/应用程序堆栈足够小,则可以完全在RAM中运行它。当然,它具有公认的答案的所有缺点。但是这是可能的,而且确实会发生。

查看流行的Linux发行版Puppy Linux。他们的工作方式页面讨论了如何从RAM运行:http : //puppylinux.org/wikka/howPuppyWorks


当然,在集群环境中,您可以将应用程序堆栈保留在分布式/网络文件系统上,通过PXE或类似服务为基本操作系统提供服务,并根据需要在无磁盘的情况下运行节点。
2013年

2

我认为答案可以部分回答如下:

前提:

  • 只有那些大量生产和销售的RAM便宜
  • RAM制造商希望出售其产品。
  • 低廉的价格要求大量出售才能获利
  • 庞大的用户群使用已建立的内存技术
  • 新的内存技术需要数年才能被广泛采用
  • 在所述用户群的越来越小的设备中,内存插槽受到高度限制
  • 移动技术正在增长
  • 至少为1Bil的0.1%。PC用户可能会选择128GB或更多的RAM(任务)
  • 与新一代技术相比,需求量大的技术更新带来了更高的利润

鉴于有限的内存插槽数量,一种重要的解决方案是采用具有较小内部尺寸的较高内存芯片和/或3D堆栈形式。在过去的36个月中,这两个过程均按预期进行。

因此,问题是:“ DDR3最大内存大小 ”或语义上:“ DDR3为什么没有大于16GB的内存模块

答案是:

DDR3标准允许512兆位至8吉比特的芯片容量,有效地使最大内存模块大小达到16吉比特src

DDR4将改变这种状况,如以下技术图所示:

在此处输入图片说明

结果:

  • 半死锁的内存市场
  • Apple Macbook Pro盛宴仅停在16GB
  • 对云或远程服务的需求增加(要容纳这些虚拟机和InMemory数据库,许多开发人员和工程师将很高兴在本地运行)
  • ... ???

对Hennes的完整文章的一些警告:

  • 普通台式机(DDR3)RAM很便宜,但并不便宜:由于数据密集型背景,某些人足以买到它
  • RAM在断电时会丢失其内容:人类比易失性存储器解决的难题更加棘手。自2010年以来有关“处理易失性存储器”的专利和解决方案就是证明。
  • RAM使用更多功率:有选择地关闭移动设备中未使用的内存(存储体)。与800W GPU相比,也从1W到2W变浅
  • 您将需要大量的DIMM插槽:芯片技术仍然像往常一样发展,这意味着更高内存芯片的选择不仅仅存在,而且芯片制造商会很乐意将它们大量出售给您。
  • 您还需要RAM才能在:True中运行程序。但是pkr298假定整个操作系统和程序都已加载到RAM中,而不是应该废除硬盘驱动器/ SSD

关闭DRAM中未使用的存储库是一个问题。DRAM技术要求刷新单元。将此泄漏到漏斗中。如果将水(电)充满,则表示1;如果将其清空,则表示0。可悲的是,铲斗漏水,并处于浅水中。一个满的水桶会慢慢将自己清空,直到与水位匹配。一个空的水桶会慢慢变慢直到与水位匹配。经过一阵子后,没有告诉桶的状态是什么。
亨内斯2013年

为了解决这个问题,有人不时地走过水桶。如果桶装满了,则桶将注满。如果大部分是空的,它将被完全清空。这是一个刷新。刷新存储单元会消耗能量,从而防止DRAM在完全保留其内容的同时完全关闭。---有许多解决方法,例如SRAM不需要外部刷新就可以保留其内容,但是需要更多的硅(因此更小或更昂贵的芯片)。
Hennes 2013年

1

您实际上是正确的在不久的将来,所有存储和内存都将以nano ram的形式出现。NRAM基本上是几原子宽的“机械”开关,它不需要电流来维持状态,因此它具有能源效率,并且不需要冷却,并且因为开关很小,所以密度非常高,这样做有两个原因,一个是对内存的访问速度非常快,并且您将能够在诸如手机之类的小型设备上拥有TB级的数据。如果您想了解更多信息,请参见:http : //www.nantero.com/mission.htmlhttp://en.wikipedia.org/wiki/Nano-RAM


0

正如其他人所说,RAM是易失性的,大约是SSD成本的10倍。

然而,IS产品在那里,出来的结果很接近你描述-不幸的是我不记得名字。

它是基于RAM的驱动器(IIRC max 64gb),配有CF卡和电池。当您打开系统电源时,它将CF卡的内容复制到RAM(如果尚未加载,则相信来自CF卡的服务请求。)在关闭时,RAM的内容被复制到CF卡- -电池足够大,可以在耗尽之前完成充电。

不便宜

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.