通过网络共享RAM


48

我的同事正在使用消耗大量内存的应用程序,这使系统速度太慢。是否可以通过Internet与其他PC共享内存?

系统具有8 GB的RAM,应用程序消耗的内存超过6 GB。


5
通过远程桌面,VNC或X11在功能强大的服务器上运行它?
WGroleau '18

3
如前所述,最好使用大型存储驱动器(HDD或SSD)作为缓存。
Firebug


79
您可能有更多的运气下载更多的RAM ...
Mehrdad

4
现代版本的Windows允许您使用USB记忆棒或SD卡来提高性能。实际上并不意味着该设备用作RAM,而是在RAM和基于拼盘的硬盘驱动器之间执行的操作。
Salman A

Answers:


161

我只考虑了在“标准”计算机上运行的独立应用程序,无法将其简单地安装在其他地方或使用专业的硬件或软件。其他答案(正确)涉及该任务的软件迁移或专用硬件。

通过网络“共享RAM”的任何方式都将受到该网络介质的限制。由于甚至千兆以太网被限制为大约100MB / s(兆字节),这意味着您的“ RAM”速度也将受到限制。

100MB / s是系统中实际RAM速度的一小部分。您的程序将非常缓慢,并且感觉好像它在90年代初期就在计算机上运行

对于顺序读取和写入,现代硬盘驱动器比这快一点。SSD快几倍。

这忽略了延迟问题,这将使您的程序再次变慢一个数量级。

由于速度慢和涉及的其他技术问题,这不是任何人都认为值得尝试解决“家庭”或“办公”系统的问题。如果需要的话,购买更多的内存更便宜,更有效。

只需购买更多RAM,甚至为页面文件购买SSD。没有其他方法可以做到这一点,而无需花费大量的工作或硬件即可获得很少的收益。


46
交换/分页超过千兆以太网可以比本地的页面文件更低的延迟盘。例如,磁盘延迟为10毫秒,而本地以太网的ping时间不到1毫秒。如果保存页面文件(或您要交换到的iSCSI设备)的文件服务器在 RAM中保持热度,则可能会获胜。如果Windows支持分页到网络文件,则为IDK。(我很确定Linux会这样做,但这是Windows问题)。哦,只是看到问题说“通过Internet”,所以nvm。
彼得·科德斯

2
@MarkHu鉴于这是超级用户的要求,我认为询问者无法控制所使用软件的代码。
oldmud0

2
@PeterCordes您所描述的仍然是购买更多RAM或SSD的损失。在Windows中更是如此。;)
jpmc26

11
家用和“普通”办公室使用的@TomTom千兆仍然几乎可以从台式机上获得。仅仅因为25G和100G在骨干基础架构中很常见(或至少是可用)并不意味着您可能会在台式机上看到它。我什至找不到价格合理的本地供应商提供的台式10GigE卡,更不用说25GigE了。10GigE卡的成本约为8GB记忆棒成本的4倍。我知道我会考虑进行合理的升级。
Mokubai

9
“感觉就像是从90年代初开始在计算机上运行” –奇怪的是,90年代的计算机感觉比今天的计算机快得多。
杰里米·维瑟

73

仅出于完整性考虑:InfiniBand允许直接访问其他计算机的内存。

但是,它要求:

  • InfiniBand交换机
  • 每台机器上都有一个InfiniBand附加卡
  • 该应用程序必须经过专门编程才能使用此功能

它不能在现有网络上工作,它需要用于所有连接节点的完全独立的基础结构。它也不能通过互联网工作


53
当然,它也比仅仅再获得8 GiB左右的RAM(-)贵得多。
sleske '18

40
哦,只有一个数量级左右;)
Gerald Schneider

7
您不需要infiniband,RoCE也可以。但是,这确实需要支持RDMA的NIC,可能还需要一个支持NIC的新交换机,以及一个被编程为使用RDMA的应用程序。
alex.forencich

7
+1,因为它是一个很好且正确的方法,但是-在这种情况下-完全没有用的答案了:-)
daniel.neumann

1
您可以-除非获得25G或100G的价格更高。RDMA无法解决延迟问题。
TomTom

19
Is there any alternative solution?

这在很大程度上取决于数据的性质。

您可以在2台不同的计算机上运行2台不同的mysql服务器。

然后将数据除以1/2,然后编写程序以自动知道要转到哪个服务器。

当然,如果有可用的服务器,则可以扩展到任意数量的服务器。


我曾考虑过提到,通常,我们“共享内存”的方式是将应用程序主动移至另一台计算机,然后通过可用的任何方法远程使用它。绝对是购买更多内存的替代方法,特别是如果已经有另一台计算机可用的话。+1
Mokubai

1
像远程桌面一样?
Innov

4
您有两台运行独立操作系统的计算机,每台计算机都有一个运行的mysql副本。因此,第一台计算机可以是192.168.0.1,第二台计算机可以是192.168.0.2(或其他任何设备)。在主PC上,您现在可以同时访问这两个IP来检索数据。Mysql或它的免费替代版本mariadb提供了像libmysql这样的库来添加到您的程序中,因此它可以本地访问mysql。这不是远程桌面,它不是客户端服务器和/或客户端与多服务器的关系。
cybernard

15

是的,使用网络块设备协议很容易做到(对于需要交换的无盘系统,我已经做到了)。

nbd-server在服务器计算机上安装,并将其配置为自动创建每个主机的文件。

确保客户端计算机已将NBD编译到其内核中,然后将其配置为交换到安装NBD的设备。该nbd-client软件包可以提供帮助。

抱歉,如果上述内容含糊不清-从这里无法访问我完成此操作的机器;当我可以访问这些细节时,我可以填写它们。

NBD服务器的另一种实现称为nbdkit;我对此一无所知。


我刚刚发现该问题带有Windows标记。我对Windows一无所知-抱歉。
Toby Speight '18

8
+1,如果要交换的文件服务器将交换文件缓存在 RAM中,则通过LAN上的GigE交换应该比本地磁性硬盘驱动器具有更低的延迟。HD搜索时间约为10毫秒,而LAN ping时间约为0.25毫秒。Windows能否通过Windows File Sharing(SMB)或任何其他协议对页面文件执行类似的操作,但是iSCSI可以工作。OP提到“通过Internet”;那不是一个好主意。除非您的ping时间低于高清随机访问延迟,否则这不是胜利。
彼得·科德斯

我不认为这如何称为“附加RAM”。这与将某些数据转储到本地磁盘上的文件没有什么不同,不是吗?
ivan_pozdeev '18

对于Wndows客户端,可以在Linux上通过Samba共享一个块设备,并使用ImDisk将其安装为Windows中的磁盘(大小需要手动指定)。
ivan_pozdeev '18

我过去在Linux上也这样做过,尽管我使用了自己的nbd服务器-客户端实现,但将nbd块设备用作交换分区的效果很好。
hanshenrik '18

9

鉴于细节不重要,“ Windows 10,工作站具有8G B RAM”,实际上只有一个理智的答案:购买更多RAM并减少废品率。

购买SSD并将页面文件放在第二个最佳选择,但实际上...购买更多RAM。

当然可以通过网络提供页面文件(“共享内存”),但这是一个非常糟糕的主意。确实存在极端情况,即通过网络的访问时间比访问本地驱动器要好,但这与您的使用情况无关,因为您同时需要一致的低访问时间高带宽。请记住,您不是在预期一两个页面错误,而是在不断地交换。除非您愿意支付数千美元,否则您将无处接近购买RAM或SSD。

8 GB不足以同时运行Windows 10 需要大量内存的应用程序。它仅够同时运行Word,Excel和Outlook。这恰恰是典型的完全不可用的“胡说八道的公司设置”,数百万人每天必须使用他们的笔记本电脑生活。在另一个内存模块中投资100-200货币,并在一周之内摊销其成本(花费几分钟的时间现在要花费几秒钟,而时间就是金钱-不幸的是,这通常很难进入本地bean柜台的头)。

或者,如果您拥有计算机,则可以使用NTLite减少Windows 10废话,从而减少其内存占用。或者,您可能只是关闭了80%的不必要服务。似乎令人难以置信,但是可以使用少于2 GB的RAM运行最新版本的Windows。

但是,实际上,只需购买RAM……比花费数小时的宝贵时间减少Windows废话要容易得多。


2
Windows在ram上真的那么糟糕吗?我在ram(没有物理驱动器)中使用完整的系统运行Debian,可以有数十个打开的Web浏览器选项卡,LibreOffice文本和电子表格,gimp照片编辑,以及观看视频或听音乐,大约有3场免费程序或文件的空间,全部为8GB。我不是赢家,但从您的话来说,“整个BS企业设置”听起来很像Windows本身……
Xen2050

1
好吧,这是有争议的-OP拥有正确的权利。我上一次购买8gb machiens的时间是在2010年左右。那是2017年。使用16gb内存的应用在某些领域并不罕见(提示:不写电子邮件,不,单词也很好,大多数人不写小说)。这是一笔很小的投资-16GB的内存是吃惊的午餐之类的东西。
TomTom

7
@ Xen2050我想知道它是否真的那么糟糕,所以在我的6GB Windows 10计算机上,我打开了Outlook,Excel,Word,Edge,我有一个很小的SQL Server实例正在运行,Malwarebytes似乎在用170MB做某事,我打开了Visual Studio 2017,在这里打开了Firefox,内存使用率为65%,Windows甚至不必开始使用压缩内存。因此,IME Windows 10可以在少于8GB的RAM的情况下正常运行,无论如何,Damon对Windows的明显厌恶与答案无关紧要。
安德鲁·莫顿

1
@Damon:但是,除非您对消耗额外RAM的内容进行了某种分析,否则没有理由将其归咎于“ Windows废话”与“雇主安装的售后废话”。由于很多人(包括我自己)都进行了内存密集型计算,因此在Windows 7,Windows 8.x和Windows 10上没有这种问题,它强烈暗示(但不能证明)罪魁祸首不是Windows本身。
Ben Voigt

6

一种简单的替代方法是在远程PC上运行该应用程序(可能使用专用用户帐户),然后通过RDP,VNC或任何方便的方法对其进行控制。


如果远程PC具有足够的内存...
LateralTerminal,

1
@LateralTerminal暗示。
Clonkex

2
是的,通过网络合并两台计算机的RAM ...网络无法正常工作,不适用于普通应用程序(带有按钮和菜单的方形,灰色)。
rackandboneman '18

6

另一个选择是将应用程序临时部署在可以轻松扩展或缩小ram的环境中。

我看一下一个Amazon AWS实例,可以通过重新启动来更改大小。

IE小型实例(如C5.large)具有4GB内存和2个内核,对于Linux,每天的费用为2.04美元,对于Windows安装,每天的费用为4.26美元。EBS磁盘空间是额外的成本,并且会随着分配的GB线性增加。

您可以将系统设置为较小的大小,然后在要完全消除噪音时将其停止,更改实例大小,然后运行该软件。

  • m5.4xlarge是64 GB内存和16核,价格为$ 18.44 /天或$ 36.10 /天。
  • r4.8xlarge是244 GB和32核,价格为$ 51.07 / day或$ 86.40 / day(含Windows)。
  • x1.32xlarge是1952 GB和128核,价格为320.12美元/天或461.43美元/天(带Windows)

或最大的...

  • x1e.32xlarge是3904 GB和128核,价格为640.52美元/天或带窗口的781.82美元/天。如果您的同事需要的更多,则问题需要以更优化的方式重写。

https://www.ec2instances.info/ 将帮助您选择合适的尺寸。请注意,某些地点的费用高于其他地点。新加坡和北加利福尼亚很贵。但是,除了磁盘存储成本外,您的VM在不运行时不会花费任何成本。

缺点是,如果您长时间需要此内存,则购买虚拟机时间是一种昂贵的方式。但是,会计师似乎有时更喜欢诸如租金之类的运营成本,而不是诸如升级之类的资本成本。


1
我意识到,根据OP的要求,此答案未解决“通过网络访问ram”的问题。这更像是访问具有更多内存的远程主机。但是,了解某些地方的预算是如何工作的,这可能是以可资助的方式完成工作的有效解决方案。
Criggie '18

4

正如其他人所说,这在技术上是可行的,但不值得。

但是,如果要加快计算机的使用速度,可以将某些应用程序外部化到远程服务器上。

这主要取决于您正在处理什么以及使用什么应用程序。如果您正在运行需要大量处理时间才能处理少量数据输出的程序,则可以使它们在与计算机不同的服务器上运行,以节省时间并在处理其他内容时节省资源。

我想到的示例是一台服务器,每当我进行修改时,该服务器都会测试我的代码。这种解决方案的想法是,它仅限于特定的用例。


4

要求IT为您的PC购买更多的RAM,并在任务管理器中使用该应用程序的使用情况的屏幕快照来说明需求。


4
实用的解决方案……甚至要求IT部门暂时从其他系统换用更多的内存也应该是“免费”的答案。
Xen2050

2
@ Xen2050同时,您的同事在哭,因为他的系统不再启动。
Willtech '18

3
@Willtech IT部门维护所有零件的备件和整个工作系统的备件是正常且适当的。停机是真正的代价。
Christopher人质

3

通过一家名为Kove的公司(http://kove.net/)。它需要Infiniband基础结构在“底板”上工作(以太网正常工作),尽管有时可以根据具体情况提供其他选择,例如RoCE。它们提供了许多透明的接口以允许零代码更改集成,并提供了用于API的内核绕过的API,可通过更直接的CPU访问(即避免内核开销)。在性能方面,这取决于您的应用程序。如果您受CPU限制,那么影响可能很小(这可能令人惊讶)。如果您将内存带宽限制在本地主机上,则它们将为您提供更大的内存,但是您将受到现有瓶颈的限制。在这种情况下,具有比可以放在盒子中的内存更大的内存对工作量有利,而不用完RAM?我们已经看到(非常)虚拟化和python机器学习库的良好结果。高端HPC应用程序往往会更糟,但是我们使用了C API并设法使性能达到可接受的水平,同时减少了节点数(节点用于RAM,而不是CPU周期),这比MPI更好。 。对于您的同事来说,这是否是一个好的解决方案还很难说,但是您可以研究一下。希望能有所帮助。明确地说,我不是为Kove工作,也没有经济动力,但是我与他们合作了很多年,并认为该技术有可能对某些计算的完成方式产生重大影响。但是我们使用了C API并设法使性能达到可接受的水平,同时减少了节点数(节点用于RAM,而不是CPU周期),与MPI相比,这是一个加分。对于您的同事来说,这是否是一个好的解决方案还很难说,但是您可以研究一下。希望能有所帮助。明确地说,我不是为Kove工作,也没有经济动力,但是我与他们合作了很多年,并认为该技术有可能对某些计算的完成方式产生重大影响。但是我们使用了C API并设法使性能达到可接受的水平,同时减少了节点数(节点用于RAM,而不是CPU周期),与MPI相比,这是一个加分。对于您的同事来说,这是否是一个好的解决方案还很难说,但是您可以研究一下。希望能有所帮助。明确地说,我不是为Kove工作,也没有经济动力,但是我与他们合作了很多年,并认为该技术有可能对某些计算的完成方式产生重大影响。


您可以为无限频带设置购买多少GB的内存?
joojaa

是的,这里的主要问题是他所说的仅具有8gb内存并需要16的小问题。这不是“我如何使用远程ram”,而是“为什么要使用具有10年规格的系统” 。
TomTom

@jooja我们有6TB。根据我们所看到的,我们还没有看到极限。您可以继续添加其他远程RAM设备。它似乎线性地扩展,因此是一个工程/成本问题。我们曾经在纸上设计过一个1PB系统,但显然无法对其进行测试。
比尔

@TomTom我没有看到有关8GB的评论,但是是的,很明显,如果我们谈论的是8GB与16GB的RAM,那么为一台新机器花几美元就可以解决问题。
条例草案

哎呀,花几百美元,您可能可以将RAM升级到32GB,除非主板太旧而且有限。
蓬松的

2

另一种观点-也许问题不在于系统资源的限制,而是您的朋友正在编写的浪费应用程序。6 GB的RAM太多了。

仅仅因为许多其他应用程序过于,并不一定意味着您的朋友应用程序需要成为其中的一个。使用不同的编程方法可以减少内存需求,同时提高速度。例如,如果应用程序将整个数据集加载到内存中然后进行处理,则比例如将数据存储在(本地或远程)SQL数据库中且选择索引很少并在那里访问数据要浪费得多。如果可能,使其逐块处理数据,而不是一次全部加载。内存中的结构也可能是浪费的。完成后释放内存。不要将可用的内存映射加载到RAM中。以及其他数百个提示...

但是,如果应用程序确实需要更多内存,需要将其存储在其他计算机上,则可以将其修改为使用memcached等将其存储在其中。奖励积分,因为它将在将来更好地扩展。


5
根据应用程序的不同,6GB的内存并不是很多。即使是最终用户也可以进行照片编辑(photoshop喜欢RAM,高端相机可以拍摄64兆像素的图像),视频编辑(情况更糟),然后就可以进行数学工作。哎呀,即使是excel也很乐意使用几个GB。并非每个人都在使用Twitter和其他类似方式编写电子邮件。
TomTom

@TomTom如果您需要高百万像素的处理能力,那么您将有很高的内存要求(根据请求的性质)。但是,除非您在Excel工作表中进行DNA基因组剪接,并且仍然使用几个GB RAM,否则,这正是我所谈论的那种blo肿和草率的编程。您知道,就像几十年前在Lotus 1-2-3上,您的家庭预算以比Excel少3个数量级(且处理器的速度至少降低了数百倍)的速度愉快地(或更快)处理过今天的。
Matija Nalis

1
,真是无知的分析者。我只能假设您对人们使用excel的经验很少。微软制造了64位版本的Office时,他们说它几乎没有用-除了Access和Excel以外,因为有些人(大多数是经理)通过Excel运行残酷的大型分析,占用了数GB的内存。Excel的灵活性和非程序员的易用性使其成为了工具(统计学家倾向于接受R的培训)。我亲自看过一些财务人员的200张excel文件。
TomTom

如果您的房屋预算需要很长时间才能在Excel中计算,那么您比我要富有得多。Excel vs 1-2-3上有趣的问题-核心calc循环在1-2-3中可能会更快,因为它做的并不多。但是在多核计算机上,Excel将轻松击败1-2-3。显然,由于工作表的大小,巨大的基因组剪接工作表可能不会在1-2-3中打开。为了透明起见,我应该承认我以前曾在Excel的核心计算团队工作过,所以我可能会有偏见……
克里斯·雷

1

因此,用户要求HOW通过网络共享内存。如果这是个好主意,那就不是。因此,这实际上是您可以执行的操作。

我并不是说这是个好主意,也不会表现出色,但是应该可以。

  • 计算机1 =“主机”-执行代码
  • 计算机2 =“子代”-内存捐赠者

我假设这不是Windows Server,您可以在其中创建iSCSI安装点。

计算机1的步骤:

  1. 下载Dataram的免费ramdisk:http : //memory.dataram.com/products-and-services/software/ramdisk
  2. 创建虚拟磁盘并使用NTFS对其进行格式化-有关说明,请参见其站点
  3. 在“磁盘管理器”中,在用NTFS格式化的ramdisk上创建VHD文件
  4. 通过SMB在网络上共享Ramdisk根目录-右键单击驱动器,共享并共享此文件夹

电脑2个步骤:

  1. 将共享驱动器从文件映射到驱动器
  2. 在磁盘管理器中挂载您在上面的步骤3中创建的VHD
  3. 通过“ 移动Windows页面文件”将本地页面文件位置移动到已挂载的VHD
  4. 删除任何其他页面文件条目。

做完了!

注意事项-如果Windows允许您将页面文件移动到网络共享,则可以跳过VHD废话。网上没有很多例子(很明显的原因)。

可能会发生完全的系统不稳定,或完全发生其他情况。没有人真正知道会发生什么。


0

正如您提到的用于通过网络共享的“ RAM”而不仅仅是任何形式的“内存”一样,最终的答案在理论上是肯定的,实际上不是。

而出于各种目的和原因,定期在网络上共享其他类型的内存(例如存储和其他临时数据)。同样,如果需要,RAM在技术上可以通过网络共享。但是性能和成本太高,无法在现实世界中实现。

RAM或随机存取存储器被操作系统用作工作空间,因此在其上执行许多读/写操作。在一般系统上,与其他部件相比,带有RAM的数据速度容量最高。如果将RAM放在网络上,则需要具有非常高的数据传输容量,即使在技术上可能实现,成本也会很高。只需花费一小部分网络速度升级,您就可以在本地获得计算机的RAM。


0

应用程序通常在虚拟内存中运行,因此它们的虚拟内存需求可以超过系统的可用物理内存,而性能不会有任何其他影响。操作系统将简单地将虚拟内存分页到磁盘上,以在任何给定时间内根据需要释放物理内存以进行主动使用。这通常对于具有合理局部性的应用程序是很好的(在任何给定时间,活动在某种程度上都集中于应用程序虚拟内存空间中的有限区域)。如果应用程序的本地性很差(在整个虚拟空间中始终引用内存),除非其所有虚拟内存都可以容纳在物理内存中(所有虚拟内存都驻留在其中),否则它的性能将很差。

因此,这里有几种可能性:

  • 如果应用程序只占很大空间但是位置很好,那么您应该能够在可用的计算机上运行它;在具有更多内存的计算机上,性能可能是可以接受的,可以显着提高,也可以不显着提高。
  • 如果它的本地性很差,您可能会发现它无论如何都将在可用计算机上运行,​​非常糟糕。(这似乎是您的情况)
  • 将(假定的)磁盘驱动器升级为固态驱动器(它们的速度明显更快)
  • 向可用的计算机添加内存(如果可能)
  • 您可能需要找到一台具有更多内存的计算机,然后在该计算机上运行它。
  • 改进应用程序,使其具有较小的虚拟足迹或更好的局部性(如果您与应用程序的作者联系在一起或与之关联)。

在远程计算机上使用内存的想法基本上是创建一个联网的页面文件。从理论上讲,它可以工作,但实际上,由于网络带宽和延迟的原因,如果分页文件位于计算机(其自己的硬盘)本地,则性能会好得多。远程系统是在其内存中还是在磁盘上托管页面文件都没有关系,瓶颈(性能的最大限制)将是网络。在Internet上尤其如此,但是即使远程计算机在同一LAN上相邻也是如此。


Windows不允许网络驱动器上的页面文件,因此即使它足够快,也无法完成。
Jamie Hanrahan

@JamieHanrahan 显然,如果您直接在注册表中更改设置,则可以。我想知道它们是否排除了一些细节,因为Windows中每个用户都是网络驱动器。我也怀疑这将在重启后中断。
ivan_pozdeev '18

1
尽管如此,这是一个可怕的想法,这就是UI排除它的原因。网络连接不够可靠,无法信任寻呼。请记住,可以分页很多内核数据(分页池)。如果无法访问,即使很短的时间,操作系统也会崩溃。
Jamie Hanrahan

0

这实际上取决于它是什么类型的应用程序以及使用了哪种ram。

例如,许多Web应用程序可以通过连接到memcached服务器来通过网络使用RAM 。这将允许将缓存数据(以及其他应快速访问的数据)存储在另一台具有大量RAM的计算机上。

当然,这是特定于应用程序的,并且需要可以使用memcached的应用程序。这将无助于您打开第二个Slack实例,因为浏览器不支持使用此类缓存后端。


-1

无需共享RAM,只需对该应用程序进行编码以创建子.exe文件,该文件将在网络PC上运行,并在该PC上执行相同的操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.