我经常读到有人说不要将交换分区放在 SSD 驱动器上,因为这可能会损坏设备。这是真的吗?你能向我解释一下原因吗?
因为我原本会认为将交换放在 SSD 上是最好的选择,因为它比 HDD 快得多,因此将 RAM 内容交换到 SSD 并不像使用 HDD 那样慢……
答案1
SSD 中的闪存 RAM 单元的使用寿命有限。每次写入(而非读取)周期(或更准确地说是每次擦除)都会磨损内存单元,到某个时候它会停止工作。
一个单元可以承受的擦除次数变化很大,现代 SSD 的闪存比几年前制造的 SSD 的闪存承受的擦除次数要多得多。此外,SSD 智能固件将确保所有单元之间的擦除次数均匀分布。在大多数驱动器中,未使用的区域也可用于备份受损单元并延缓老化。
为了得到一个可以用来比较 SSD 耐用性的值,我们可以使用寿命指标,例如JEDEC 发布标准. 耐力的一个广泛使用的数值是结核病(电视时代乙伊特斯西或者写入的总字节数) 是驱动器发生故障前可写入的字节数。现代 SSD 的消费级产品得分可低至 20 TB,但企业级 SSD 的得分可超过 20,000 TB。
话虽如此,SSD 的使用寿命和交换使用情况都取决于几个因素......
具有大量 RAM 的系统
在具有大量 RAM 且内存占用较少的应用程序的系统上,我们几乎从不进行交换。这只是一种安全措施,以防止应用程序耗尽所有 RAM 时数据丢失。在这种情况下,SSD 因交换而磨损不会成为问题。但是,将这个几乎未使用的交换分区放在传统硬盘上不会导致任何性能下降,因此我们可以安全地将交换分区(或文件)放在便宜得多的硬盘上,并将 SSD 上的空间用于更有用的东西。
RAM 较少的系统
在 RAM 稀少且无法升级的系统上,情况就不同了。在这种情况下,交换确实可能会更频繁地发生,尤其是在我们运行内存密集型应用程序时。在这些系统中,SSD 上的交换分区或文件可能会带来显著的性能提升,但代价是 SSD 的使用寿命会略短。然而,这种寿命的缩短可能还不足以引起人们的担忧。很有可能,SSD 可能在它报废之前就被更换了,因为存储量可能是现在的几倍,而价格却只是现在的一小部分。
休眠我们的系统
从 SSD 唤醒休眠状态确实非常快。如果我们很幸运并且我们的系统在休眠状态下没有出现问题,我们可以考虑使用 SSD。这会比从 SSD 启动更耗电,但我们可能觉得这是值得的。
但是从 SSD 启动可能比从 SSD 休眠唤醒花费的时间不会长很多,而且对 SSD 的磨损要小得多。就我个人而言,我根本不会休眠我的系统 - 我会挂起到 RAM 或快速从 SSD 启动。
SSD 是我们唯一的驱动器
在这种情况下,我们真的别无选择。我们不想在没有交换的情况下运行,所以我们必须将其放在 SSD 上。但是,如果我们不打算在任何时候让系统休眠,我们可能希望有一个较小的交换文件或分区。
注意速度
SSD 最擅长快速访问和读取大量小文件,在传输顺序读取的小型或中型文件的数据方面优于传统硬盘。在写入(以及在较小程度上读取)大型音频或视频流或其他较长的无碎片文件时,快速传统硬盘的性能可能仍优于 SSD。较旧的 SSD 可能会随着时间的推移或相当满后性能下降。
答案2
早期的 SSD 因写入次数少于 HDD 而出名。如果经常使用交换,SSD 可能会更快失效。这也许就是您听说使用 SSD 进行交换可能不好的原因。
现代 SSD 不存在此问题,并且它们的故障速度不会比同类 HDD 更快。由于 SSD 速度更快,将交换放在 SSD 上将比放在 HDD 上获得更好的性能。
此外,如果您的系统有足够的 RAM(很可能,如果系统足够高端,可以拥有 SSD),那么交换可能很少使用。
答案3
即使您有足够的 RAM,您可能仍希望阻止任何文件复制或搜索以将应用程序从 RAM 中换出。在可能涉及大型文件操作的文件服务器(NAS、SAMBA、FTP)上可能就是这种情况。
为了做到这一点,最好设置/etc/sysctl.conf
:
vm.swappiness=1
vm.vfs_cache_pressure=50
第一个设置可防止磁盘缓存(例如执行cp
)将现有应用程序从 RAM 中交换出去。该设置的正常默认设置为 60。请注意,使用 0 虽然更为激进,但有时会报告产生内存不足错误。
第二个设置可防止文件搜索(例如执行find
)从 RAM 中交换现有应用程序。该设置的正常默认设置为 100。
虽然参考文献中提到的作者没有明确提到 SSD,但这种方法也因减少交换而减少了 SSD 的磨损,并且他还提供了如何测试它的示例。
答案4
生活与表现的平衡。
您购买 SSD 是为了其性能优势,而不仅仅是为了延长电池寿命,对吗?因此,使用 SSD 就是为了这个目的,让您的系统运行更快。
如果您有能力添加更多 RAM 来减少*交换 I/O,那么这显然会增加 SSD 的使用寿命,因为另一个性能消耗显然是用于交换文件系统上的空间的 I/O 周期。
同样,就像系统配置的许多方面一样,它通常不是采用一条适合所有情况的单一规则。用户需求各不相同,因此系统要求和配置也必须有所不同,以满足这些需求,简而言之,它归结为您如何配置系统。
我如果您除了非 SSD 驱动器外还有空间容纳 SSD,那么请将很少更改的文件写入非 SSD 驱动器,并将经常访问的文件保留在 SSD 驱动器上。
这将确保……
[1] - *trim 功能将拥有执行必要步骤的资源,以均匀使用所有驱动器。[利益=生命]
[2] - 使用高速 SSD 设备访问经常访问的文件系统,可以减少 I/O 延迟。【效益=绩效】
C配置临时文件系统,以便在特定系统需要时利用空间,如果您有足够的 RAM,那么可以考虑将交换级别设置为不太激进,这将确保……
[1] - SSD I/O 减少,但您的系统仍能满足用户的需求。[利益=生命]
德您是否真的需要所有这些日志?考虑一下您的系统正在记录什么以及记录在哪里。
[1] – 由于日志文件访问减少,SSD I/O 也减少了。[效益=寿命+性能]
系统配置中还有许多其他方面可以使非 SSD 系统运行得更快,默认系统构建有一个严格的指标需要满足,纯粹的性能或保持数据安全或平衡所有这些。如果您对写入的内容和设备应用相同的心态,您可以大幅提高性能,同时延长 SSD 的使用寿命。
*交换- 请记住,这不仅仅在资源不足时使用,许多 Linux 发行版默认的可配置交换功能会将低优先级的长时间运行进程停放在性能阶梯的更下方的交换空间中)
*修剪– 值得验证的是,您是否已启用它,有关 trim 是什么以及它如何工作的好文章:http://searchstorage.techtarget.com/definition/TRIM