vCPU是否可以使用来自两个不同硬件计算机的不同CPU

时间:2017-02-27 20:38:15

标签: cluster-computing cpu virtualization hpc

我搜索了这个,但我似乎没有得到公平的答案。 假设我不想创建一个具有vCPU的虚拟机,而vCPU必须有10个核心,但我只有2台计算机,每个计算机有5个物理CPU核心。

是否可以通过在这两个物理CPU上中继来创建一个vCPU来执行常规的一个物理CPU?

更新1:假设我正在使用virtualBox,术语vCPU指的是虚拟cpu,这是一个众所周知的术语。

更新2:我问这个是因为我正在对HPC集群中的动态配置进行一些研究,我不知道“动态”这个词是否真的意味着从不同的硬件动态分配虚拟cpu,比如裸机服务器。我不知道我是否在错误的地方搜索,但在文档中没有人真正回答这个问题。

2 个答案:

答案 0 :(得分:1)

我将术语vCPU用作虚拟核心,将pCPU用作物理核心,因为它由virtualbox文档定义:https://www.virtualbox.org/manual/ch03.html#settings-processor

  

在"处理器"选项卡,您可以设置客户机操作系统应该看到的虚拟CPU核心的数量。从3.0版开始,VirtualBox支持对称多处理(SMP),并且每个虚拟机最多可以提供32个虚拟CPU核心。但是,您不应该将虚拟机配置为使用比物理上可用的更多CPU核心(真实核心,没有超线程)。

我会尽力回答你的问题:

  

假设我不想创建一个具有vCPU的虚拟机,而vCPU必须有10个内核,但我只有2台计算机,每台计算机有5个内核CPU。

如果要创建虚拟机(使用单个操作系统映像,SMP计算机),则所有虚拟核心都应具有共享内存。 两个物理机每个5个核心总共有10个核心,但没有共享内存。因此,使用经典虚拟化软件(qemu,kvm,xen,vmware,virtualbox,virtualpc),您无法将两台物理机转换为单个虚拟机。

  

是否可以通过在这两个物理CPU上中继来创建该vCPU来执行常规的物理CPU?

没有

常规物理机有一个或多个CPU芯片(插槽),每个芯片有一个或多个内核。第一台PC有1个芯片,一个核心;有两个插槽的服务器,每个插槽有一个核心。后来制造了多核芯片,大型服务器可能有2个,4个,6个甚至8个插槽,每个插槽有一些核心。此外,物理机有RAM - 动态计算机内存,用于存储数据。早期的多插槽系统具有单个内存控制器,当前的多插槽系统具有多个内存控制器(MC,每个插槽1-2个,每个控制器具有1,2或3或4个通道的内存)。多核和多串口系统都允许任何CPU内核访问任何内存,即使它是由其他套接字的MC控制的。并且对系统内存的所有访问都是连贯的MemorycoherenceCachecoherence) - 任何内核都可以写入内存,任何其他内核都会以某种定义的顺序看到第一个内核的写入(根据系统的Consistency model)。这是shared memory

"两个身体"两台不同机器(您的PC和笔记本电脑)的芯片没有连接它们的RAM,也没有在硬件中实现任何内存共享和一致性模型。两台不同的计算机使用网络(以太网,Wifi,......只发送数据包)或文件(在USB驱动器上存储文件,断开与PC的连接,连接到笔记本电脑,获取文件)进行交互。网络和文件共享都不一致,也不是共享内存

  

我正在使用virtualBox

使用VirtualBox(以及其他一些虚拟化解决方案),即使您的物理机有4个核心,您也可以为虚拟机分配8个虚拟核心。但VMM只会模拟有8个内核,在可用的物理内核上逐个安排它们;所以在任何时候只有来自4个虚拟核心的程序将在物理核心上运行(https://forums.virtualbox.org/viewtopic.php?f=1&t=30404"核心i7,这是4核心。我可以在虚拟机上使用多达16个VCPU ..是的,它表示您的主机核心将被过度提交。所有来宾VCPU的总负载将在真实CPU之间分配。")。在这种情况下,您将能够在5核心物理上启动10核心虚拟机,而想要使用10核心的应用程序将获得它们。但是应用程序的性能不会像5个真正的CPU那样好,而且会更少,因为会有"虚拟CPU切换"频繁的同步会增加额外的开销。

  

更新2:我之所以这样问是因为我正在做一些关于动态配置的研究

如果您想研究"动态配置",请询问一下,而不是“同时在两台PC上运行未知的东西”。

  

在HPC群集中,

没有单一类型的" HPC"或" HPC集群"。 HPC的不同变体将需要不同的解决方案和实现。某些HPC任务需要大量内存(0.25,0.5,1,2 TB),并且只能在共享内存4或8插槽机器上运行,这些机器充满了最大内存DIMM模块。其他HPC任务可能会使用GPGPU。第三种将结合线程并行(OpenMP)和进程并行(MPI),因此应用程序将使用共享内存,而它的线程在单个机器上运行,并且它们将通过网络发送和接收数据包以在一个任务上集中工作,同时在几个上运行(数千)物理机器。第四种HPC可能希望拥有100或1000 TB的共享内存;但是没有具有这种数量的SMP / NUMA机器,因此应用程序可以用Distributed shared memory范例/模型(分布式全局地址空间DGAS,分区全局地址空间PGAS)编写,以在特殊机器或大型集群上运行。使用特殊解决方案,在PGAS中,100s TB的全局共享内存从与网络连接的许多计算机模拟。程序是用特殊语言编写的,或者只是使用特殊的库函数来访问内存(来自Wikipedia: PGAS" Unified Parallel C,Coarray Fortran,Split-C,Fortress,Chapel,X10,UPC ++,Global的特殊变体列表数组,DASH和SHMEM")。如果地址或请求在本地内存中,请使用它;如果它在其他机器的内存中,则将数据包发送到该机器以从内存请求数据。即使最快(100 Gbit / s)特殊网络RDMA capability(网络适配器可能访问PC的内存without any传入网络数据包的附加软件处理)本地内存和远程计算机内存之间的差异是速度:您有更高的访问延迟,并且当内存远程时您的带宽较低(远程内存比本地内存慢)。

如果你说" vCPU必须有10个核心"我们可以将其视为"有应用程序需要10核心的共享内存系统"。理论上,它可以模拟应用程序的共享内存(并且可以创建虚拟化解决方案,该解决方案将使用来自多台PC的资源来创建具有更多资源的单个虚拟PC),但实际上这是非常复杂的任务,结果可能会有太低的性能。存在商业ScaleMP(成本非常高;维基百科:ScaleMP" ScaleMP管理程序结合x86服务器来创建虚拟对称多处理系统。该过程是一种称为虚拟化的硬件虚拟化,用于聚合。 ")并且有来自英特尔(https://software.intel.com/sites/default/files/1b/1f/6330https://www.hpcwire.com/2006/05/19/openmp_on_clusters-1/)的商业集群OpenMP,在借助库和基于操作系统的帮助下将OpenMP程序(使用线程和共享内存)转换为类似MPI的软件访问远程内存的处理程序。两种解决方案的范围都可以从"使目标应用程序更慢"到目标应用程序的速度非常慢#34; (互联网搜索scalemp + slow和cluster + openmp + slow),因为计算机网络总是比计算机内存慢(网络距离比内存更远--100m vs 0.2m,网络有2,4或8高速的窄总线)对于每个存储器通道,存储器具有64-72个高速对;当存储器在内部接口上时,网络适配器将使用CPU的外部总线,来自网络的大多数数据必须被复制到存储器以供CPU使用。

  

我不想知道"动态"真正意思   在文档中没有人真正回答这个问题。

如果您需要其他人的帮助,请向我们展示您对该任务的上下文或文档。您可以更好地了解计算和集群计算中的一些基本概念(您是否有任何CS / HPC课程?)。

互联网搜索请求有一些结果,例如"动态+配置+ + HPC +群集",但我们不能说它是相同的HPC版本你想要与否。

答案 1 :(得分:0)

不幸的是,我必须首先说我完全不同意OSGX的答案(我必须从那开始,因为我的答案的其余部分取决于它)。有记录的案例表明,将多个物理系统的CPU功率聚合到一个系统映像中工作得很好。甚至关于ScaleMP ...解决方案的评论也可以从“使目标应用程序变慢”到“使目标应用程序变得非常慢”...... - 所有人都需要做的是使该声明无效是检查SPEC CPU基准测试列表中的顶级机器,看看使用ScaleMP的机器是否是为此基准测试而构建的前5个SMP。 此外,从计算机体系结构的角度来看,所有大型机器本质上都是具有特殊结构(Xbar,Numalink等)和一些逻辑/芯片组的小型机器的集合,以管理高速缓存一致性。今天的标准结构(PCIe Switching,InfiniBand)与那些专有的SMP互连一样快,甚至更快。 OSGX会声称那些SMP也“非常非常慢”吗?

与任何技术一样,真正的问题是你想要实现的目标。大多数技术非常适合一项任务,但不适合另一项任务。如果您正在尝试构建一台大型计算机(例如,将16个服务器,每个服务器具有24个核心,组合到384核心SMP中),您将在其上运行小型VM,每个VM使用一位数的vCPU,然后这种SSI解决方案可能非常适用于您只运行高吞吐量计算(HTC)作业的底层基础架构 - 就像SPEC CPU一样。但是,如果您运行的线程并行软件过度使用需要在所有内核之间进行密集通信的序列化元素(障碍,锁等),那么您可能看不到任何好处。

关于线程上的原始问题,或者更确切地说,作者的“更新2”: ...我问这个是因为我正在研究HPC集群中的动态配置...... 实际上,没有很多技术能够从集群中的CPU创建单个系统。之前提到的技术来自ScaleMP,它仅在物理服务器粒度上执行此操作(因此,如果您拥有100个服务器的群集,并且每个群集节点具有24个核心,那么您可以“动态”创建48个核心的虚拟机(2群集节点),72个核心(3个群集节点),依此类推,但您无法创建具有36个核心(1.5个群集节点)的计算机,也无法组合来自不同节点的一些空闲CPU - 您可以使用来自不同节点的所有核心要组合成虚拟SMP的节点,或者根本没有。