场景

场景

我知道之前有一个类似的问题:如何共享 CPU 或 RAM?

但是,请让我进一步详细说明一下……

当 Microsoft Windows 需要的 RAM 容量超过可用容量时,它会使用交换文件将数据临时存储在那里,这实际上类似于基于硬盘的 RAM。这项技术已经使用了很多年。

从理论上讲,实现类似的技术应该不太难,即利用网络中不同计算机的 RAM 来临时存储数据。这只需要一个在网络中的计算机上运行的软件,该软件可以接受和返回来自主计算机的数据并将这些数据保存在 RAM 中;此外,主计算机的操作系统必须能够使用网络中的计算机反而交换文件。

我想知道,这个想法有没有实现?这将允许用户使用他们所有的家庭或办公室计算机构建 RAM 集群,从而提高单台计算机在某些开发/游戏/视频任务等方面的性能。

答案1

实际上,即使可能,它也只会在极少数情况下起作用(肯定不是游戏!)。

第一步是导出原始设备协议,因为 Windows 采用直接访问来实现更快的交换操作。目前无法做到这一点,因为 Windows 没有原始设备协议(Linux 和某些 Unices 上有,也许 iSCSI 可以)。

然后,您需要将客户端计算机上的设备作为物理设备导入。这也可以做到,但出于安全原因,大多数实现将网络设备视为可拆卸的设备。不过,人们也许可以通过调整 ReadyBoost 技术来实现这一点。

但现在的问题是,网络设备比物理磁盘设备慢几个数量级(而物理磁盘设备又比内存慢几个数量级),因此,如果不让系统陷入停滞状态,你就无法在其上进行太多的交换。

只有当您对快速 RAM 的要求较低,而对大容量存储的要求很高,并且能够容忍非常慢的速度时,您才可以使用它。而且只有在多台计算机上都使用这个方法时,它才有价值。这意味着您已经构建了一个计算集群……这意味着您有一个分布式计算问题(它有自己的一套工具,通常通过卸载来解决整个进程及其所有内存到其他节点)。

在通常使用中,如果一个较大的磁盘swapfile 不会帮助你,因为它太慢了,而且抖动会降低你的性能,怎么可能甚至更慢网络驱动器能解决什么问题?

场景

这将允许用户使用所有家用或办公室计算机构建 RAM 集群,从而提高单台计算机执行某些开发/游戏/视频任务等的性能。

为了视频处理可以将任务并行卸载到客户端计算机,每个客户端计算机都对一组视频帧或不同的通道进行操作。积极研究诀窍在于,所有客户端都可以快速访问大容量存储(也可以是分布式的:还有网络分布式文件系统,其中文件可能驻留在多个物理服务器上),每个客户端都执行 CPU 绑定的任务。

为了发展,有以下工具:制作允许将项目构建(以及静态分析、测试和文档……)划分到不同的主机。这也可以通过连续生成系统自动完成,并且自动构建,其结果可能比从单个命令主机按需执行所有操作要好得多。

答案2

这些技术虽然存在,但它们非常复杂且昂贵,因此人们通常不会将它们用于开发、视频游戏或视频编辑,因为购买一台功能强大的机器更简单、更便宜。它们还会使内存访问延迟增加至少一个数量级,即使使用专门的高吞吐量低延迟网络(如无限带宽

另一方面,分布式共享内存系统在超级计算中相当常见。这些系统通常带有内存管理器和程序,这些程序会尝试保持其内存部分的一致性和本地性,以免过于频繁地访问远程内存区域。

答案3

我曾经考虑过这个问题,但方式略有不同。两台计算机之间共享 RAMDisk 怎么样?RJ45 仍然比通过 SATA III 连接的 SSD 更快。当然,速度不如原生 RAM,但使用交叉电缆,人们可以将虚拟内存移动到 RAMDisk。这种方法仍然会占用内部 HDD、SSHD 和 SSD。当一台 PC 的 RAM 要少得多时,这个想法可能是两台 PC 之间一个很好的游戏技巧。这个想法是共享 RAMDisk,然后设置客户 PC 以将虚拟内存保存到主机的额外 RAM 中。

相关内容