在 SSD 上放置交换空间如何影响性能?

Smu*_*dge 0 memory ssd swap

这更像是我感兴趣的一个通用问题,而不是我计划在生产中使用的问题。如果我得到了一个 40GB 的 SSD 驱动器并将整个驱动器分配为交换空间,只在系统中留下少量的“真实”内存(例如,我会说 512MB 物理内存),性能与拥有相比如何40GB 的真实内存?
可能无法进行一般比较,因此例如在运行 RedHat、MySQL、MongoDB 和 Memcached 的情况下运行数据库服务器(根据我的经验,数据库服务器喜欢大量内存,尤其是使用 Memcached)并节省大惊小怪假设所有服务都经过优化配置和调整,而不仅仅是库存安装。

TL;DR
SSD 驱动器可以用作 RAM 的替代品吗?

Dav*_*ett 5

交换空间不是 RAM 的简单扩展,以便 CPU 可以直接访问它,因此速度较低(比较http://en.wikipedia.org/wiki/List_of_device_bandwidths上的 DDR3 和 SATA 总线的最大吞吐量例如)和更高的延迟(即使访问是直接的,任何传输都将通过 I/O 控制器和驱动器的控制器,因此有很多延迟,这两种延迟都可能高于 CPU 和RAM),还需要考虑额外的处理和延迟,因为 SSD 上的内存块需要在使用前分页到 RAM 中,如果被修改,则再次写回。

这与随机访问特别相关(并且大多数内存算法都是在假设随机访问有效的情况下编写的)。虽然 CPU 可以根据需要或多或少地访问 RAM 中的任何字,但是如果它想要的数据被分页,它需要在它可以读取单个字节之前重新读取整个页面,并且如果在页面从 RAM 中清除之前修改了单个字节以再次为另一个字节腾出空间,则需要写入整个页面。

当然我这里忽略了缓存RAM的复杂性,这意味着随机访问有时比其他时间更有效(取决于数据是只存在于主存还是复制到L3/L2/L1缓存中)。从理论上讲,您的 RAM 只是用于永久存储的缓存,并且有些架构确实以这种方式工作,而较慢的永久存储和较快的缓存之间没有区别(至少就操作系统而言 - 它只看到主存储,但速度更快如果数据也在更快的缓存中),但是您的硬件和操作系统的架构不是这样设计的。