问一个虚拟机的问题

31 views
Skip to first unread message

Rizza SSZ

unread,
May 19, 2014, 9:44:37 PM5/19/14
to ustc...@googlegroups.com
想在多台电脑上装一个虚拟机,使之看起来是一个整体,貌似xen, openvz之类的只能在一台电脑上装多个虚拟机?但目前在网上只找到像负载均衡,hadoop之类的,都不是很合适。
请问有什么解决方法吗?

Zhang Cheng

unread,
May 19, 2014, 10:02:22 PM5/19/14
to USTC LUG
能说一下为什么有这样的需求么?

我似乎没听说过能够跨机器装虚拟机的,即使可以,跨机器的虚拟机性能也会很差,机器之间的通信延迟太高、带宽太小,跟板内通信差好多个量级。比如cpu,如果在两台机器上各取一个CPU给虚拟机用,这个虚拟机的两个CPU之间的通信就是跨机器通信了。

现在主流的虚拟机都支持热迁移,就是在不停机的情况下,从一台主机迁移到另外一台主机上(其实还是会中断非常短的时间),但任何时刻,虚拟机只会在一台机器上运行。

所有的负载均衡技术,无论是hadoop这类对计算进行负载均衡的,还是其他各种层面,如对流量、对带宽、对会话等各个level的负载均衡,都有共同的特点,就是一个大的任务可以分割成几个互不相关的小任务,然后每个任务就可以分发到不同的资源上去完成。如果任务之间需要通信,那么情况就会很复杂,有时候甚至无解了。


2014-05-20 9:44 GMT+08:00 Rizza SSZ <rizza2...@gmail.com>:
想在多台电脑上装一个虚拟机,使之看起来是一个整体,貌似xen, openvz之类的只能在一台电脑上装多个虚拟机?但目前在网上只找到像负载均衡,hadoop之类的,都不是很合适。
请问有什么解决方法吗?

--
-- 来自USTC LUG
请使用gmail订阅,不要灌水。
更多信息more info:http://groups.google.com/group/ustc_lug?hl=en?hl=en

---
You received this message because you are subscribed to the Google Groups "USTC_LUG" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ustc_lug+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Cheng,
Best Regards

Rizza SSZ

unread,
May 19, 2014, 10:26:25 PM5/19/14
to ustc...@googlegroups.com
On Tuesday, May 20, 2014 10:02:22 AM UTC+8, Zhang Cheng wrote:
能说一下为什么有这样的需求么?

其实主要就是单机性能不够和现有的分布式方案都比较复杂。
比如想把多线程程序分布到多台机子上去运行,但大多数方法比如hadoop, mpi之类的都得对程序进行改动
还有单机内存不够(单线程程序),想利用多台机器的内存
我似乎没听说过能够跨机器装虚拟机的,即使可以,跨机器的虚拟机性能也会很差,机器之间的通信延迟太高、带宽太小,跟板内通信差好多个量级。比如cpu,如果在两台机器上各取一个CPU给虚拟机用,这个虚拟机的两个CPU之间的通信就是跨机器通信了。

 机器间通信性能的确比较低,不知道现在有没有什么比如智能的虚拟机系统,可以把相关性比较高的任务尽量分配到单个物理结点上。
现在主流的虚拟机都支持热迁移,就是在不停机的情况下,从一台主机迁移到另外一台主机上(其实还是会中断非常短的时间),但任何时刻,虚拟机只会在一台机器上运行。
迁移问题目前还未考虑 

所有的负载均衡技术,无论是hadoop这类对计算进行负载均衡的,还是其他各种层面,如对流量、对带宽、对会话等各个level的负载均衡,都有共同的特点,就是一个大的任务可以分割成几个互不相关的小任务,然后每个任务就可以分发到不同的资源上去完成。如果任务之间需要通信,那么情况就会很复杂,有时候甚至无解了。

如果不考虑性能的话,有什么方案可以在功能上实现在多台机器上建立一个虚拟化系统吗? 我看了分布式系统相关,不过大多数都是一个概念上的,没找到比较好的解决方案。

Zhang Cheng

unread,
May 19, 2014, 10:39:56 PM5/19/14
to USTC LUG

2014-05-20 10:26 GMT+08:00 Rizza SSZ <rizza2...@gmail.com>:

 机器间通信性能的确比较低,不知道现在有没有什么比如智能的虚拟机系统,可以把相关性比较高的任务尽量分配到单个物理结点上。
​​
​如果有这样的东西的话,那一帮搞分布式并行算法的人可以下课了。还需要mpi、hadoop干啥?

在业界,通常能用钱解决的事都用钱解决。比如单机内存不够,那就加内存,比花几年工夫设计一个分布式算法要划来来。如果说要加10倍内存,物理上不允许,那这就不是钱能解决的事,这时候才考虑设计分布式算法。
如果是CPU不够,那么首先考虑能否通过在板内增加CPU解决(现在的服务器主板可以支持一块板子上插4个或更多的CPU)。如果无法在板内增加CPU,那么就只能使用分布式计算了。
分布式的使用CPU比分布式使用内存要难很多。内存里存的是内容,通常来说内存之间没有通信、同步的需求,所以存在哪里都无所谓,分布式内存的问题就是延迟不一样,Linux在很早就开始使用numa管理内存,可以让内核知道各内存到各CPU的延迟不一样,从而尽可能优化的去使用。但CPU不一样,CPU之间需要有大量的同步、通信,如果计算任务分配不合理,那几乎可以认为是工作不起来的。目前为止还没有通用的(能够适用任何任务的)自动分解的算法,如果有的话,那么mpi、hadoop之类的工具都可以直接下课了。当然,或许有一天会有这样的东西出现,不过我觉得cpu革命(例如量子计算机)可能会比这个东西更早出现。

​​



--
Cheng,
Best Regards

Rizza SSZ

unread,
May 19, 2014, 11:00:32 PM5/19/14
to ustc...@googlegroups.com
多谢,看样子目前还没有什么好的解决方案,还是得用hadoop之类的

张伟

unread,
May 20, 2014, 1:11:29 AM5/20/14
to ustc...@googlegroups.com
LZ 只是想把map reduce这些操作交给一个已有系统去处理吧,所以想出在多台电脑上装一个虚拟机的想法


--

Rizza SSZ

unread,
May 20, 2014, 2:50:41 AM5/20/14
to ustc...@googlegroups.com
是的,使用hadoop之类的一般还得对算法或者程序进行一定的改造,而且也不一定适合所有的情况。如果有虚拟机的话就方便多了。

Zhang Cheng

unread,
May 20, 2014, 2:53:39 AM5/20/14
to USTC LUG

2014-05-20 14:50 GMT+08:00 Rizza SSZ <rizza2...@gmail.com>:
是的,使用hadoop之类的一般还得对算法或者程序进行一定的改造,而且也不一定适合所有的情况。如果有虚拟机的话就方便多了。

​请问,你现在的程序用一台机器跑,会使用多线程(进程)么?如果现有的程序已经使用了多线程,那么我觉得要将他进一步拆分到多台机器上运行也不是难事,除非你多个线程之间的互相同步很多(这样的话,多线程也很难充分使用CPU)。​



--
Cheng,
Best Regards

Zhuoyun Wei

unread,
May 20, 2014, 6:12:46 AM5/20/14
to ustc...@googlegroups.com
2014-05-20 10:39 GMT+08:00 Zhang Cheng <steph...@gmail.com>:
> 在业界,通常能用钱解决的事都用钱解决。比如单机内存不够,那就加内存,比花几年工夫设计一个分布式算法要划来来。如果说要加10倍内存,物理上不允许,那这就不是钱能解决的事,这时候才考虑设计分布式算法。
> 如果是CPU不够,那么首先考虑能否通过在板内增加CPU解决(现在的服务器主板可以支持一块板子上插4个或更多的CPU)。如果无法在板内增加CPU,那么就只能使用分布式计算了。


原来目前没有那种多台物理机拼成一台超强虚拟机的技术啊。我曾经以为 AWS 的某些怪兽配置是多台物理机拼出来的,看来只是那机器配置本身比较怪兽而已……

--
wzyboy
Link: https://wzyboy.im/
Twitter: @wzyboy

Zhang Cheng

unread,
May 20, 2014, 6:20:32 AM5/20/14
to USTC LUG

2014-05-20 18:12 GMT+08:00 Zhuoyun Wei <wzyb...@gmail.com>:
原来目前没有那种多台物理机拼成一台超强虚拟机的技术啊。我曾经以为 AWS 的某些怪兽配置是多台物理机拼出来的,看来只是那机器配置本身比较怪兽而已……

​你见过什么样的“怪兽”配置?

我看到aws上最大的instance似乎也就32核、244G内存,这个配置在服务器里面并不算非常大。
32核的CPU,并不是一片,而是有很多片,可能有4片或者更多,服务器主板一般都能支持多片CPU的。



--
Cheng,
Best Regards

Rizza SSZ

unread,
May 20, 2014, 11:28:38 AM5/20/14
to ustc...@googlegroups.com
你的意思是比如把pthread的改成MPI实现吗?感觉不是所有程序都好改
如果是一些别人的大型项目或者没有源码的就不太好解决
而且还有一个问题就是负载均衡的问题,请问现在有没有什么比较好的进(线)程迁移方案没?

Rizza SSZ

unread,
May 20, 2014, 11:43:09 AM5/20/14
to ustc...@googlegroups.com
我一开始就是想能不能把刀片式服务器拼成一个整体,装一个系统,资源不够了直接插一个新的上去,坏了的话直接拔下来就行

Bojie Li

unread,
May 20, 2014, 1:55:09 PM5/20/14
to USTC_LUG
我听说有个叫 ScaleMP 的公司是专门做这个的,不过我没用过他们的产品。他们自己创造了个名词 “Virtualization for Aggregation”。

先说结论:在有 InfiniBand 的情况下,把多台机器虚拟成一台机器(众核、大内存、大硬盘),是完全可行的。

多核刚出现的时候,内存总线是所有 CPU 竞争使用的,一个 CPU 从内存取数据时,其他的 CPU 就必须等待。一个朴素的想法是,如果这些计算分布在不同的计算机上,而且任务划分适当,每个计算机上的 CPU 就可以访问自己的内存,互不干扰。基于 “CPU 与内存配对” 的理念,NUMA (Non-Uniform Memory Access) 就是若干个(CPU,内存)组成的系统,CPU 访问自己的内存很快,但访问别人的内存就比较慢。操作系统和应用程序都可以针对 NUMA 做优化,使指令和数据的局部性得以保持。

NUMA 中各 CPU 之间如果通过一条总线连接,则很快这条总线就会堵死,因此 CPU 之间连接的拓扑结构是很有讲究的,事实上跟网络拓扑结构本质上是一回事。网络接口(CPU)A 和 B 通信的同时,C 和 D 也可以通信,事实上 “全线速交换”(full bisection)是交换机的一项重要技术指标,也就是所有网络接口(CPU)可以同时全速收发数据。

然而,定制超级计算机是非常贵的,把若干台 off-the-shelf 的机器虚拟成一台众核、大内存、大硬盘的机器,是很自然的想法。好处是:对时间复杂度较低但空间复杂度很高的任务,可以利用更多的内存;对大任务,简化在机器之间发消息的编程(直接访问就行了);对大量不相关的小任务,降低系统管理员的管理负担。

那么,为什么分布式系统的设计者不这么做呢?简而言之:网络协议栈坑了。

如果使用 socket 和 TCP/IP 协议栈,延迟大约是在 300 微秒左右。300 微秒相比硬盘的 8 毫秒,很快了吧?但内存的延迟是 0.1 微秒,网络和内存之间有 500 倍的差距。如果把本地内存看成是远程内存的缓存,只要缓存命中率从 99% 降到 98%,平均延迟就会增加 83%。这就意味着程序员要精心调整任务在各节点上的分配,提高缓存命中率。

然而,网络的 300 微秒延迟是可以改变的。RDMA(Remote DMA)over InfiniBand 的延迟在 1 微秒以下,RDMA over Ethernet 的延迟可以达到 3 微秒。远程访问的延迟仅比访问本地内存高 10 或者 30 倍,这样程序员精心提高缓存命中率就显得不是那么重要了。比如,从 L1 cache 的 1 纳秒到 L2 cache 的 3 纳秒到 L3 cache 的 15 纳秒到内存的 100 纳秒,每一级都没有很大的跳跃,因此缓存策略就不需要浪费程序员的时间了。

由于 RDMA 绕过了 CPU,分布式系统的另一大敌——单位时间所能处理的事务数——也就很大程度上缓解了。基于 socket 的 bind9 每秒只能处理几万个 DNS 请求,CPU 都耗在协议栈里了;而 RDMA 能够把 10 Gbps 的网络占满,也就是每秒处理数百万个远程内存访问。

此外,SSD 的随机访问延迟大约是 50 微秒,比 TCP/IP 快一个数量级,更重要的是 TCP/IP 网络延迟不稳定,因此宁可从 SSD 里读取数据也不要远程从其他机器上取数据。用过 NFS 之类远程文件系统的都见识过网络不稳定的麻烦,校园网内 1ms 的网络延迟相比机械磁盘的 8ms,按说可以忽略,但实际用起来,本地磁盘比远程磁盘好很多。InfiniBand 和 RoCE 通过流控(flow control)实现了无丢包的网络,延迟稳定。RDMA 的延迟比 SSD 还要快一个数量级,这会改变很多网络系统的设计。

网络的平均延迟、吞吐量、延迟稳定性解决了,阻碍远程内存访问、远程磁盘访问的就只是程序员的惰性了。

最后澄清一点,把多台机器虚拟成一台机器,不等于不需要并行算法了。一些传统算法本来就并行程度不高,连一台机器上的多核都用不好,给更多的核和更大的内存有什么用?要设计专门的算法来提高并行度,这事不能指望计算机自动完成。

下面的论文是“1分钟内排序最多数据”世界记录的保持者,集群的数据存储与负责计算的节点是分开的,交换机之间使用 CLOS 拓扑结构连接以保证全线速交换。

下面的论文实现的 RoCE(RDMA over Converged Ethernet, 在以太网上实现 Remote DMA)比 TCP/IP 协议栈在延迟和吞吐量两个指标上都提高了一个数量级,最坏情况延迟降低了两个数量级。远程读取大约是 3 微秒,远程发消息大约是 10 微秒。
FaRM: Fast Remote Memory


2014-05-20 9:44 GMT+08:00 Rizza SSZ <rizza2...@gmail.com>:
想在多台电脑上装一个虚拟机,使之看起来是一个整体,貌似xen, openvz之类的只能在一台电脑上装多个虚拟机?但目前在网上只找到像负载均衡,hadoop之类的,都不是很合适。
请问有什么解决方法吗?

--

Yan Wang

unread,
May 20, 2014, 2:37:54 PM5/20/14
to ustc...@googlegroups.com
学习了!感谢分享!

Rizza SSZ

unread,
May 20, 2014, 11:13:30 PM5/20/14
to ustc...@googlegroups.com
ScaleMP看上去很不错,学习了

Ruoshan Huang

unread,
Jun 7, 2014, 2:57:38 PM6/7/14
to ustc...@googlegroups.com
我倒是见过IBM的机器用某种特殊的线把两个主板的总线连起来的... 然后就变成4路128核还是多少的东西了...


--
-- 来自USTC LUG
请使用gmail订阅,不要灌水。
更多信息more info:http://groups.google.com/group/ustc_lug?hl=en?hl=en

---
You received this message because you are subscribed to the Google Groups "USTC_LUG" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ustc_lug+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Wish U a nice day

Ruoshan Huang
Reply all
Reply to author
Forward
0 new messages