并行中的物理内核与虚拟内核

时间:2010-06-11 17:19:15

标签: multithreading concurrency f# parallel-processing hardware-infrastructure

在虚拟化方面,我一直在考虑物理内核和虚拟内核之间的关系,特别是它如何影响采用并行性的应用程序。例如,在VM场景中,如果物理内核少于虚拟内核,如果可能,那么应用程序的并行处理会产生什么影响?我问,因为在我的环境中,没有透露物理架构是什么。如果应用程序位于单核心物理机器上托管的双核VM上,那么并行化还有很多优势吗?

2 个答案:

答案 0 :(得分:6)

  

如果应用程序位于单核心物理机器上托管的双核VM上,并行化还有很多优势吗?

始终

操作系统级并行处理(即Linux管道)将大大提高性能,无论您有多少核心 - 无论是真实的还是虚拟的。

实际上,你必须创建相当人为的问题或者真正愚蠢的解决方案,以便看到性能改进,从简单地将一个大问题分解为管道中的许多小问题。

一旦您获得了流水线解决方案,并且它占据了100%的虚拟资源,您就可以衡量

开始尝试逻辑和物理资源的不同变体。

但只有 后才有一个操作系统级别的管道占用了所有可用资源。在此之前,您已经完成了创建管道解决方案的基础工作。

答案 1 :(得分:1)

由于您包含了F#标记,并且您对并行性能感兴趣,我将假设您使用F#异步IO,因此线程永远不会阻塞,它们只是在CPU绑定任务之间交换。

在这种情况下,理想的是拥有与虚拟核心数相同的线程数(至少基于我在Windows 7托管的Virtualbox下的Ubuntu中使用F#进行的实验)。拥有更多的线程会略微降低性能,但性能会降低很多。

此外,拥有比物理内核更多的虚拟内核会降低性能。但是,如果这是您无法控制的,只需确保每个虚拟核心都有一个活动的工作线程。