![操作系统从一块主板克隆到另一块主板](https://linux22.com/image/1419802/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%BB%8E%E4%B8%80%E5%9D%97%E4%B8%BB%E6%9D%BF%E5%85%8B%E9%9A%86%E5%88%B0%E5%8F%A6%E4%B8%80%E5%9D%97%E4%B8%BB%E6%9D%BF.png)
最近,我们一家人有一个想法,想从零开始建造一台超级计算机。因此,当我们计划建造我们的设备时,我突然想到了一个想法,这似乎是可行的,但我也想听听你们的意见。
假设我们有 2 个 ATX 主板和 1 个 MicroATX。
主板设置:
- 1 个华硕 Rampage Extreme 黑色版
- 1 个英特尔酷睿 i7 4960x
- 4 块 GTX Titan
- 8x 8GB 1866 内存
主板设置:
- 1 个 SuperMicro X9DRG-QF
- 2 个英特尔至强 E7-8890V2
- 1 个 nVIDIA QUADRO K6000
- 4 个 nVIDIA Tesla K40
- 128 GB 1866 内存
想象一下,一个固态硬盘和一个连接到两个主板的开关
将 SSD 切换到第二块主板后,我可以编辑和复制第一块主板的 RAM 的所有数据到另一块主板,以便能够继续操作我当前的操作系统,反之亦然?
假设我的“切换应用程序”修改了内核需要相信什么都没有发生的一切,并从第一个主板停止的同一点继续运行。(设备列表、CPU 核心、驱动程序等的更改)
答案1
“超级计算机”这个术语意味着计算机不是由现成的部件制成的。这不是你所说的超级计算机。至于 SSD 的想法。你忽略了几个无法克服的因素。首先,SSD 速度很快,但远不及 DDR3 RAM(当你将 8GB 文件复制到硬盘时,它仍然有时间弹出一个对话框来显示进度;你的系统基本上会在每个 RAM 总线时钟周期等待 10-20 秒;也就是说,每秒 1833 万次 [这就是 1833 mhz 的意思],它需要等待 10-20 秒;看到问题所在)。即使是这样,也存在一种称为延迟的东西,它会让这个系统崩溃;这就是为什么没有外部 RAM 模块的原因。RAM 需要快速响应;这个系统引入的延迟是不可接受的(并且对时间问题也有问题)。我想你会惊讶地发现,你机器上的代码有多少严重依赖于短距离传输为 RAM 提供的精确时间。即使你设法让它工作(但你不会),SSD 的写入周期数是有限的,所以这种类型的工作负载会尽可能快地磨损你的 SSD;它会更快地自我毁灭,但幸运的是,你的驱动器只能自我毁灭这么快(参见我的第一点)。
事实上,这些原因正是超级计算机实际上是一种过时的升级方式。如果不重新设计范式,这些延迟问题实际上无法解决。如今,我们处理这些延迟问题的方式是通过集群。集群就是一堆可以缓慢地相互通信的计算机。如果这两台电脑都在同一个网络上,那么您可能已经拥有了这种设置。现在让这两台电脑协同工作是一项编程挑战,而不是硬件工程挑战。
更新
We can try to do this but it will take time, a lot of time. Everything is possible when you are aware of a System's Architecture. You can manipulate it in whatever way you want.
不,很抱歉,但是如果您知道底层架构,那么您首先就不会问这个问题,因为我只是触及了为什么这永远不会起作用的表面。您打算编写一个程序来同步寄存器吗?l2\l3 缓存?一个可以确保主板上的每个芯片都配置相同的程序怎么样?您是否有任何计划来确保 IRQ 通道的使用相同?或者也许您有一个计划,将实时添加两个系统之间不同的物理组件?它会自动重写驱动程序软件,以便内存中的相同驱动程序可以在两台机器上运行吗?很抱歉,但您无法坐在那里说服我您是专家,因为您还没有证明您对这些问题有任何认识(更不用说克服这些问题的方法)。
我敢肯定你们中至少有一个人曾经使用过热插拔驱动器?如果你曾经使用过,那么你就会知道,除了我已经提到的之外,断开驱动器并将其重新连接到其他地方的整个过程甚至不是即时的。我的电脑启动时间不到 15 秒。这大约相当于将 8GB RAM 传输到另一个驱动器所需的时间;然后你需要再增加 7-8 秒进行实际驱动器交换,最后你需要将所有数据读回另一台电脑的 RAM 中。我真的我认为一群 IT 专业人士应该马上理解这些内容。
另一方面,如果您从解决问题的角度来看待这个问题,而不是发明一个新系统,您会发现,通过使用网络并改变需求以更多地关注实际问题,您将能够摆脱几乎所有的硬件问题(因为其他人已经解决了),并同时消除大部分数据传输延迟(通过不传输比绝对需要更多的数据)。
我建议你不要像你想的那样尝试将机器连接在一起,因为这永远行不通。这并不是因为我没有想象力去想象它;而是因为这根本不可能。相反,你应该使用你的网络,因为它的设计就是为了满足你的需要。你只需要一种方法将程序输入从一台机器传输到另一台机器,然后在完成时将输出传输回来。只要问题可以分解为离散任务,这就会很好地工作(这与 CUDA 最初的限制相同,所以这里没有任何变化)。我认为你不喜欢这个计划,因为它太简单了,你和我一样,喜欢挑战。问题是你想要做的事情超出了挑战性,它是使用您现有的设备是不可能做到这一点的。
如果你真的只是想制作一个像这样工作的系统,那么这是可以做到的。只是不能用你正在使用的硬件。出去买一些商品处理器(比如 Atmel 销售的处理器,甚至是 ARM CPU [Raspberry Pi 可以很好地完成这个任务]),然后从头开始设计一个像这样工作的架构。此外,当你这样做时,你会想要使用 RAM 芯片(而不是 SSD 中使用的 eeprom),因为它们是很多更快(不过,如果您希望它持久,则必须发明自己的休眠系统,该系统很可能使用 eeprom)。然后,您可以将所有 CPU 物理连接到相同的内存模块(这意味着您将摆脱额外的复制操作)。那么这将是可能的(如果您可以设计出一种良好的机制,让每个 CPU 在内存上拥有自己的时间片),但那是因为您不会尝试将其构建在另一个根本不以这种方式工作的系统之上。
-PEACE 与 GL
答案2
您无法使用物理机器做到这一点 - 如果您以虚拟机的形式运行操作系统,您可以利用实时迁移做某事非常与您描述的类似。
我知道你可以通过具有正确硬件的视频卡 - (puget systems 在两种不同的配置上有很好的描述 -使用 nvidia 显卡的 ubuntu 上的 KVM和ESXi) 但我不知道这会对热迁移做出怎样的反应 - 我怀疑不同硬件之间会发生可怕的事情。然后,您可以将操作系统存储在 NAS 上,也许使用 10Gb 以太网连接系统(gig-e 可能是这里的瓶颈),这样您就可以在系统之间“切换”。
答案3
哇,不,这根本不现实。首先,认真考虑一下你是否需要一台如此强大的电脑。顶级部件,例如 4 titans 不是“物有所值”的部件,它们速度非常快,但你需要为它们支付额外费用。购买可能稍旧的高端硬件更划算。
其次,计算机的目标是什么?游戏?视频渲染?加密货币挖掘?你拥有多种类型的硬件,但它们放在一起实际上毫无意义。4 Titans 非常适合游戏,但 Quatro 和 Tesla 则适合科学计算,它们针对此类计算进行了优化,因此请根据具体情况选择显卡。
其次,由于您使用的硬件截然不同,您无法简单地将 RAM 从一个系统复制到另一个系统,机器状态中存在大量您无法预测或处理的潜在问题,例如处理器缓存中的数据或 CPU 寄存器的设置。接下来,任何操作系统的启动过程都不会让您立即开始读取 RAM,即使您可以,它又如何知道首先要读取哪个 RAM,因为数据存储在处理器中,您无法将其取出并发送到新计算机。
你要求做的事情不仅不可行,而且考虑到目前计算机的复杂程度,根本就不可能。无论你是电气工程师、计算机科学家、处理器设计师,还是三者兼有,这都是不可能实现的。