![将交换空间放在 SSD 上会对性能产生什么影响?](https://linux22.com/image/550063/%E5%B0%86%E4%BA%A4%E6%8D%A2%E7%A9%BA%E9%97%B4%E6%94%BE%E5%9C%A8%20SSD%20%E4%B8%8A%E4%BC%9A%E5%AF%B9%E6%80%A7%E8%83%BD%E4%BA%A7%E7%94%9F%E4%BB%80%E4%B9%88%E5%BD%B1%E5%93%8D%EF%BC%9F.png)
这更像是我感兴趣的一个一般性问题,而不是我计划在生产中使用的东西。如果我有一个 40GB 的 SSD 驱动器,并将整个驱动器分配为交换空间,只在系统中留下少量的“真实”内存(为了举例说明,我将假设 512MB 物理内存),那么与拥有 40GB 真实内存相比,性能如何?
可能无法进行一般性比较,因此,例如运行一个运行 RedHat、MySQL、MongoDB 和 Memcached 的数据库服务器(根据我的经验,数据库服务器需要大量内存,尤其是使用 Memcached),为了省去麻烦,我们可以假设所有服务都经过了最佳配置和调整,而不仅仅是库存安装。
TL;DR
SSD 驱动器可以用来替代内存吗?
答案1
交换空间不是 RAM 的简单扩展,因此 CPU 无法直接访问它,因此除了速度较低(比较 DDR3 和 SATA 总线的最大吞吐量)之外,http://en.wikipedia.org/wiki/List_of_device_bandwidths例如)和更高的延迟(即使访问是直接的,任何传输都将经过 I/O 控制器和驱动器的控制器,因此存在两种延迟,这两种延迟都可能高于 CPU 和 RAM 之间的延迟),还有额外的处理和延迟需要考虑,因为 SSD 上的内存块需要分页到 RAM 中才能使用,如果它们被修改,则需要再次写回。
这对于随机访问尤其重要(大多数内存算法都是在假设随机访问是有效的前提下编写的)。虽然 CPU 可以随时随地访问 RAM 中的任何字,但如果它想要的数据被分页,则需要先读回整个页面,然后才能读取单个字节,并且如果修改了一个字节,则需要先写入整个页面,然后才能从 RAM 中清除该页面以再次为另一个页面腾出空间。
当然,我在这里忽略了缓存 RAM 的复杂性,这意味着随机访问有时比其他时候更有效(取决于数据是仅存在于主内存中还是当时复制到 L3/L2/L1 缓存中)。理论上,您的 RAM 只是永久存储的缓存,并且有些架构实际上是以这种方式工作的,没有较慢的永久存储和较快的缓存之间的区别(至少就操作系统而言 - 它只看到主存储,但如果数据也在较快的缓存中,则速度会更快),但您的硬件和操作系统的架构不是这样设计的。
答案2
SSD 驱动器可以用来替代 RAM 吗?
您可以通过比较 RAM 访问时间(数量级为 10 纳秒)和吞吐量(数量级为 10 GB/s)与 SSD 访问时间(数量级为 1 毫秒)和吞吐量(数量级为 100 MB/s)来自己回答这个问题。
如果您的应用程序的“RAM”比平常慢 100 到 100,000 倍是可以接受的,那么是的,SSD 可以用来替代 RAM。
答案3
Can SSD drives be used as a replacement for ram?
是的,特别是如果你喜欢频繁更换硬件,因为你会经常这样做 - 如果你每天向大多数 SSD 写入超过 35GB,它们就会很快开始损坏。