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

当然,当前的操作系统可能根本不支持此功能,但是有没有理由不使用RAM呢?

评论

您认为RAM很便宜。 1TB RAM需要多少钱?

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

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

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

Google将互联网加载到RAM

#1 楼

不使用RAM的原因有很多:


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

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

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



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

您可以:


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

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

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


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


评论


+1代表两个关键点:HD仍然比RAM便宜,RAM易失。RAM是您的工作台,HD是仓库。 Nuf sed。

–乍得·哈里森(Chad Harrison)
13年8月27日在16:12



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

–猎犬
13年8月27日在16:26

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

– KeithS
13年8月27日在17:49



关闭电源后,RAM会丢失其内容。确切地说,只有易失性RAM起作用,而非易失性RAM甚至在断电时也能保留所有内容,例如闪存芯片。从这个意义上讲,SSD与RAM并无不同,只是其子类型。

–扫罗
13年8月28日在9:22

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

–亨尼斯
13年8月29日在4:24

#2 楼

操作系统已经使用页面缓存来做到这一点:


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


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

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

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

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

评论


好答案。操作系统还具有Superfetch之类的功能,该功能将在引导时将磁盘中通常请求的数据加载到RAM中。

–马修·洛克(Matthew Lock)
13年8月27日在23:34

好答案。所有排名靠前的攻击(尝试使之无效)而不是实际回答

– vsync
2015年12月8日18:00



#3 楼

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

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


4 GB RAM = $ 32-$ 36 => RAM =〜$ 8每GB
64 GB SSD = $ 69-$ 76 => SSD =〜$ 1每GB
1 TB HDD = $ 80 => HDD = $ 0.08 GB

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

(此外,如其他答案所述,RAM具有固有的易失性,因此您需要某种其他形式的持久性存储。)

评论


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

–symcbean
13年8月27日在21:25

@symcbean-有点挑剔;请记住,获得大面额的RAM(如要更换磁盘或SSD所需要的)的成本大约为$ 25 / GB。

–拉塞尔·博罗戈夫(Russell Borogove)
13年8月27日在23:23

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

–mikebabcock
13年8月28日在3:09

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

–Ofer Zelig
13年8月28日在3:15

@OferZelig“看看价格如何不断下降”,您的意思是除了价格没有下降之外?

–用户
13年8月28日在9:47

#4 楼

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

使用正确的工具进行我想的工作,这就是我的答案。我使用RAM磁盘生成数据的速度比7200rpm Western Digital快30-1000倍。

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

...当32gigs拉姆(Ram)不到200美元,我不明白为什么这种情况没有变得越来越普遍。



评论


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

–马铃薯
13年8月28日在9:44

“当32Gigs的Ram低于$ 200时,” 1 TB HDD上的32 GB起始价为$ 3左右(赠与或接受);如今,消费者1 TB驱动器的价格不到100美元,甚至企业级驱动器的价格也可达到每千兆字节相似的价格(亚马逊目前希望408美元的4 TB Seagate ST4000NM0043的建议零售价为520美元,而单个单元甚至没有购物周围)。

–用户
13年8月28日在9:52

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

–布雷克
13年8月29日在17:36

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

–布雷克
13年8月29日在17:38

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

–布雷克
13年8月29日在18:44

#5 楼

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

#6 楼

简短说明:

第一次执行应用程序时,会将其从硬盘或网络传输到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)

#7 楼

这是一个很大的问题,我发现回答很有趣。我将以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://en.wikipedia.org/wiki/Eliyahu_M._Goldratt

评论


不能肯定这与问题有关,但有趣。

– jb。
13年8月28日在16:11

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

–鲍勃
13年8月28日在16:14

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

–洛伦茨·罗索尔(Lorenz Lo Sauer)
13年8月29日在21:06



#8 楼

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

我有一个3TB硬盘(99美元):HDD Quote

您需要48个3TB硬盘每位($ 719):RAM Quote

总价为$ 34,512比$ 99。更不用说运行3TB RAM所需的硬件价格了。

评论


答案与问题无关

– BlueBerry-Vignesh4303
13年8月28日在4:44

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

– jaczjill
13年8月28日在8:17

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

– drescherjm
13年8月28日在18:09

#9 楼

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

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

评论


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

–伊信
13年8月28日在20:35

#10 楼

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

前提:


只有那些大量生产和销售的RAM价格便宜
/> RAM制造商想出售他们的产品。
低价格要求销售大量产品以获利
庞大的用户群使用成熟的存储技术
新的存储技术需要花费数年时间才能被广泛采用
在上述用户群中越来越小的设备中,内存插槽受到了很大的限制。
移动技术正在增长,至少占10Bil的0.1%。 PC用户可能会选择128GB或更多的RAM(任务)。
技术更新需求很高,因此其利润要比新一代技术更高。

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

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

答案是:

DDR3标准允许512兆位至8吉比特的芯片容量,有效地使最大内存模块大小达到16吉比特
DDR4将对此技术地图进行概述:



结果:


半死锁的内存市场
苹果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年9月1日13:42在

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

–亨尼斯
2013年9月1日13:43在

#11 楼

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

#12 楼

正如其他人所说的那样,RAM易失,大约是SSD的10倍。

但是,那里有一款产品与您所描述的非常接近-不幸的是,我不记得了名称。

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

这并不便宜。