Debian 机器上的 VirtualBox 中的 Kubuntu 多线程性能非常糟糕

Debian 机器上的 VirtualBox 中的 Kubuntu 多线程性能非常糟糕

在虚拟机中运行多线程渲染软件时,我们遇到了令人不快的性能问题。

我们在 VirtualBox 4.0.10_Debianr72436 中运行 Kubuntu 12.04,该程序在 Debian(6.0.6、2.6.32-5-amd64)计算服务器中无头运行。它具有 2*6 核 Intel Xeon X5660 处理器,具有超线程和大约 64GB 的运行内存。我们通过 TigerVNC Viewer for X 版本 1.1.0 连接到虚拟机。虚拟机当前设置为使用所有 24 个核心,但当配置为较低数量(例如 12 个)时,可以观察到下面描述的问题。

问题:

当我们只使用一个渲染线程运行渲染器时,其运行速度与我们在其他机器(Intel Core 2 Duo MacBooks)的 metal 上直接运行的速度相当。但是,随着我们增加工作线程的数量,它只会稍微加快速度(与 1/n 相差甚远),并且在大约 5 个线程时,它实际上开始变慢。从 8 个线程开始,它甚至比单线程应用程序还慢。当渲染器直接在我们的 MacBooks 的 metal 上运行时,无论您指定运行多少个线程,都不会出现问题。例如,双核 CPU 上的 16 个线程的运行速度与双线程实例一样快。

然后,我们尝试并行运行渲染器的多个单线程实例,结果令人惊讶。当我们运行 4 个实例时,一切正常 - 它们的运行速度与一个实例相似,但当我们运行 6 个实例时,它们的速度全部减慢了约 50%!

我们还尝试运行另一个渲染器 (pbrt v.2),以测试其他渲染器的表现以及它们的结果是否更好。它可以很好地扩展到 13 个线程,但随后速度也会变慢(但不如我们的软件慢)。

我们的渲染器是用 Objective C 结合 C 和汇编语言编写的。我们在代码中使用 XADD 和 CAS 操作来访问共享数据。我们强烈怀疑这两个操作可能是问题的根源。对此有什么想法吗?

顺便说一句:由于服务器策略,我们无法安装 Obj-C 运行时和其他所需库并直接在金属上运行我们的软件。

VM 配置摘录:

  • 内存大小:4000MB
  • 页面融合:关闭
  • VRAM 大小:12MB
  • HPET:关闭
  • 芯片组:piix3
  • 固件: BIOS
  • CPU 数量:24
  • 合成 CPU:关闭
  • CPUID 覆盖:无
  • ACPI:开启
  • IOAPIC:开启
  • PAE:关闭
  • 时间偏移:0 毫秒
  • RTC:UTC
  • 硬件 virt.ext: 开启
  • 硬件 virt.ext 独占:关闭
  • 嵌套分页:开启
  • 大页面:开启
  • VT-x VPID:开启
  • 3D 加速:关闭
  • 2D 视频加速:关闭
  • 添加运行级别:2
  • 配置的内存气球大小:0 MB

答案1

我在这里随便说说...在 GUI 上,右键单击 Kubuntu 实例并在它未运行时选择设置。检查您的 CPU 是否在那里受到限制。您可能希望查看系统如何响应选择 20 或 22 个 CPU 而不是 24 个,以减轻虚拟机和主机之间的资源竞争。然后尝试运行一个具有 20 个线程的单个实例。我希望看到机器上的 CPU 在 20 个核心上达到峰值,其余 4 个核心在尝试跟上时也会增加到 100%。除了您的虚拟机之外,您还在这台机器上运行其他应用程序吗?

相关内容