![从 SWAP 运行计算而不导致性能完全下降 - 讨论 NVMe 速度以及它们是否能够替代 RAM](https://linux22.com/image/203344/%E4%BB%8E%20SWAP%20%E8%BF%90%E8%A1%8C%E8%AE%A1%E7%AE%97%E8%80%8C%E4%B8%8D%E5%AF%BC%E8%87%B4%E6%80%A7%E8%83%BD%E5%AE%8C%E5%85%A8%E4%B8%8B%E9%99%8D%20-%20%E8%AE%A8%E8%AE%BA%20NVMe%20%E9%80%9F%E5%BA%A6%E4%BB%A5%E5%8F%8A%E5%AE%83%E4%BB%AC%E6%98%AF%E5%90%A6%E8%83%BD%E5%A4%9F%E6%9B%BF%E4%BB%A3%20RAM.png)
最近,我一直在以多种方式设置我的 Linux 机器(目前是 pop-os),以升级我的系统,以满足在 R 中完成的特定数据分析的需求。简而言之:我正在处理的数据集是生物单细胞数据,并且我'我通常致力于大型表的几种转换,因为 R 没有针对有用的 RAM 使用和适当的垃圾收集进行优化,所以我总是面临着计算几个我必须使用的完善插件所需的巨大 RAM 开销。因此,由于没有选择转向资源较少的计算,并且我想使用本地 PC 来满足 RAM 等集群需求,所以我进行了以下设置:
我在 Ryzen 5 3600xt 上安装了 2 块 8gig 3600mhz cl19 RAM,运行在 MSI tomahawk b450 max、Windows 和 Linux 上,在单个 240GB 的 SSD 上。我现在进一步升级了 2x 16gb 3600mhz cl19 RAM 棒,在 Linux 中获得了(有趣的是)50.05 GB 的 RAM,在 Windows 中获得了 48 GB 的 RAM。到目前为止,我运行此设置没有任何问题,并且仍然需要更多 RAM 来处理一些超过 50GB 的小开销(有时只需几分钟,我就需要 ~100GB RAM,直到 R 在计算单个函数期间运行下一个垃圾收集循环)。
我将另一个 NVMe(Gen 4 1TB)安装到 M.2 Gen3 端口,并将两个系统重新安装到该驱动器,因为在上述书面设置上使用 SWAP 时,它只会滞后并且不再真正正确计算(最多 5%) CPU 使用率高,但系统因 MEM 已满而卡住,可能是 SWAP 无法缓存的溢出)。
因此,我的旧 240gb SSD 完全设置为一个大交换,我重新尝试在本地 PC 上运行一些大功能,即使在 RAM 已满的情况下,也能在一段时间内获得合理的功能系统,但性能仍然会在第二个块中突破从 SWAP 中计算。
我知道这对我的 SSD 驱动器来说绝对是可怕的,但是我更进一步,在我的 NVME 上添加了第二个交换分区,这就是我们终于可以看到最先进的技术派上用场的地方:我终于得到了大约 50%性能,第二张图片只是一个例子。
想象一下,未来拥有高效的 NVMe 并且它们的性能进一步提高(例如,RAID 0 似乎并没有提高它们的读取速度,如我读到的几个测试所示),那么运行多个 NVMe 交换驱动器可能非常适合捕获大 RAM未优化的编译或并非始终需要所有数据的类似场景中的开销。
现在我的问题是:您认为,如果我遇到进一步的 RAM 限制,通过仍然空闲的 PCIe 插槽扩展进一步的 NVMe 会有用吗?或者交换文件的扩展是否没有我在这里想象的那么强大,并且对于大多数用户来说已经成为过去?因为我刚刚使用 Linux 大约两年了,所以我对内核/更深入的软件没有任何真正的经验,在硬件背景上更没有你可能已经注意到的经验。
我期待听到您的意见和一些推理,以便我可以进一步了解这些问题,到目前为止,我觉得这是一个没有多少用户遇到过但考虑过的利基市场;但实际上我看到这里有很多潜力可以满足长时间要求的计算,甚至在服务器中考虑到 NVME 的磨损也会进一步减少,并且与始终在 RAM 棒等上相比,它们的效率可能会较低......我希望这一点还没有完全关闭,留在这里的问题太少,期待与您联系!
附言:我也在考虑运行本地 SLURM 单节点“集群”,这样我就可以在充分利用在同一台计算机上运行的硬件限制计算节点的同时在我的计算机上工作,但这将是另一个问题的主题。