![如果 RAM 很便宜,为什么我们不把所有东西都加载到 RAM 中并从那里运行呢?](https://linux22.com/image/1375664/%E5%A6%82%E6%9E%9C%20RAM%20%E5%BE%88%E4%BE%BF%E5%AE%9C%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BB%AC%E4%B8%8D%E6%8A%8A%E6%89%80%E6%9C%89%E4%B8%9C%E8%A5%BF%E9%83%BD%E5%8A%A0%E8%BD%BD%E5%88%B0%20RAM%20%E4%B8%AD%E5%B9%B6%E4%BB%8E%E9%82%A3%E9%87%8C%E8%BF%90%E8%A1%8C%E5%91%A2%EF%BC%9F.png)
RAM 很便宜,而且比 SSD 快得多。只是易变。那么为什么计算机不配备大量 RAM,并且在启动时将所有内容从硬盘/SSD 加载到 RAM 并从那里运行所有内容,假设没有真正需要在内存之外保留任何东西?计算机不是更快吗?
当然,当前的操作系统可能根本不支持这一点,但是有什么理由不以这种方式使用 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 而不是 DRAMS(更简单,更昂贵)。
- 您可以使用闪存或其他永久存储来保存所有数据(警告:闪存通常具有有限的写入次数)。如果您仅使用闪存作为存储,那么您就转向了 SSD。如果您将所有内容存储在动态 RAM 中并在断电时保存到闪存备份,那么您就回到了设备。
我确信还有更多内容需要描述,从 Amiga RAD 开始:将幸存的 RAM 磁盘重置为 IOPS、磨损均衡和上帝知道什么。不过,我会简短地说,只列出一项:
DDR3(当前 DRAM)价格与 SSD 价格对比:
- DDR3:每 GiB 10 欧元,或每 TiB 10,000 欧元
- SSD:明显更少。(大约 1/4 到 1/10。)
答案2
操作系统已经实现了这一点,页面缓存:
在计算领域,页面缓存(通常称为磁盘缓存)是操作系统为了更快访问而保存在主内存 (RAM) 中的磁盘支持页面的“透明”缓存。页面缓存通常在内核中通过分页内存管理实现,对应用程序完全透明。
当您从磁盘读取页面时,操作系统会将这些数据加载到内存中,并将其保留在那里,直到有更好的内存用途。如果您有足够的内存,您的操作系统将只读取每个页面一次,然后从内存中使用它。操作系统进行实际磁盘 IO 的唯一原因是它需要读取尚未在内存中的页面,或者如果页面被写入(在这种情况下,您可能希望将其保存到磁盘)。
这样做的一个优点是您不必将整个硬盘加载到内存中,如果内存不够用,这一点很有用,同时也意味着您不必浪费时间读取应用程序不需要的文件。另一个优点是,只要操作系统需要更多内存,就可以丢弃缓存(最好让您的下一次磁盘读取速度稍慢一些,而不是因为内存不足而导致程序崩溃)。此外,用户不需要手动决定哪些内容应该放在 ramdisk 中,这很有用:您最常使用的内容将自动保存在主内存中。
如果您有大量内存,但应用程序的运行速度不如预期,则很有可能是因为应用程序运行安全,所以速度较慢。例如,如果您告诉 SQLite 不要等待写入完成,则速度会快几个数量级,但如果您没有彻底关闭,数据库将完全崩溃。
此外,/tmp
在 Linux 发行版中,它通常是一个 ramdisk,因为即使数据丢失也没关系。不过,对于这是否是个好主意仍然存在争议,因为如果写入太多数据/tmp
,可能会耗尽内存。
答案3
正如 Alan Shutko 在对该问题的评论中指出的那样,RAM 实际上并不便宜。
以下是一些数据点。当我在 Google 上搜索 4 GB RAM、64 GB SSD 和 1 TB HDD(机械硬盘)时,我看到的成本如下(这是 2013 年 8 月 25 日的数据):
4 GB RAM = 32 - 36 美元=>RAM = 每 GB 约 8 美元
64 GB SSD = 69 - 76 美元=>SSD = 约 1 美元/GB
1 TB HDD = 80 美元=>HDD = 每 GB 0.08 美元
哇哦!HDD 比 RAM 便宜 100 倍!SSD 比 RAM 便宜 8 倍。
(此外,正如其他答案所指出的那样,RAM 本质上是易失性的,因此您需要其他形式的持久存储。)
答案4
是的,这是市场上许多内存数据库的前提。SAP HANA 就是一个例子。其理念是 RAM 很便宜,从性能角度来看,RAM 上的读/写操作比磁盘操作快 1000 倍。因此,大多数数据都保存在 RAM 中,然后您定义数据老化策略,使用该方法将旧数据回收回冷存储(即磁盘)。