gpt4 book ai didi

python - 从 16 个内核开始,向 virtualbox 添加更多内核会使应用程序变慢

转载 作者:太空狗 更新时间:2023-10-30 00:14:16 25 4
gpt4 key购买 nike

目前我正在一台有 64 个内核的服务器上测试一个应用程序。此服务器安装了 virtualbox,最多可以使用 32 个内核但不能更多(此限制由 virtualbox 指定)。由于我正在使用 mininet 来测试我的应用程序,因此我需要 root 权限才能执行它。我在服务器上没有 root 权限,但在 VM 上没有。所以我的设置是:

  • 主机有64核,安装了ubuntu

  • 带有 ubuntu 的 virtualbox VM 有 1 - 32 个核心

  • 我的应用程序在 16 台 mininet 主机上运行,​​每台主机都运行一个使用多播和单播相互通信的程序,但目前请求不多。启动后每个主机大约有 5 个请求。延迟3秒启动,避免启动瓶颈

  • 我的应用程序使用多个线程,但主机上的每个应用程序实例都独立于其他应用程序实例

  • 我的应用使用了python的APScheduler,完全是用python写的

我认为使用 32 个内核运行它是最好的。但是当我这样做时,一切都开始挂起。我在 APScheduler 中超时,系统负载非常高。

所以我尝试了 1 到 32 之间的每个核心数。以下是一些示例:

1个核心 1 Core

4核 4 Cores

8 核 8 Cores

12 核 12 Cores

16 核 16 Cores

20个核心 20 Cores

23个核心 23 Cores

27 核 27 Cores

32 核 32 Cores

x 轴以半秒为单位,y 轴是 top -b -n 1 报告的 CPU 负载百分比。我用每个核心数运行应用程序大约 10 分钟。蓝线是我的应用程序的平均 CPU 负载。红线是我的应用程序,绿线是整个系统负载。

如您所见,负载降低到大约 16 个内核。当使用超过 16 个内核时,它会变得更慢,而从大约 23 个内核开始,它会变得非常慢。即使如此缓慢,甚至不再调用记录 CPU 负载的进程。这就是为什么最后一张图中的图表更短的原因......

有人知道可能是什么问题吗?这是 virtualbox 的已知错误吗?这是一个 mininet 问题吗?还是Linux问题?我怎么知道哪些部分导致了极端负载?

如果您需要更多信息,请发表评论,我会编辑问题。

guest 系统的负载从未超过 50%,所以我认为这不是问题所在。

VMWare 有可能更快吗?

编辑我查看了图表,发现描述我的应用程序平均 CPU 负载的蓝线(所有 mininet 主机上所有实例的平均值)在从 1 到 2 到 3 到 ... 16 个内核时甚至变得更高。但是从 1 核到 16 核,我的应用程序的 CPU 负载增加得非常非常慢。虽然这增加了整体系统负载下降(在我看来这是有道理的,因为 ubuntu 可以在不同的内核上执行其任务,只要没有共享资源,它就会更快)。

那么为什么均值在增加?为什么它从 16 核开始呈指数增长?

最佳答案

这是程序开始跨处理器插槽边界运行时的常见行为。通常,一旦您的应用程序开始在驻留在不同物理处理器上的内核上执行,您就会开始看到不可预测的时序行为。

假设您的 64 核机器有四个处理器插槽,每个插槽有 16 个内核,并且还假设您的调度程序是一个合理的调度程序,它试图将应用程序的线程分组在同一个插槽上,那么您的应用程序应该会看到良好的并行加速1 和 16 核,但一旦使用超过 16 核,它就会开始运行不佳,因为其中一些必须驻留在单独的插槽上。

对于常规机器和虚拟机都是如此,但是如果虚拟机的调度程序不知道这些套接字边界,则虚拟机可能会增加另一层不可预测性。

关于python - 从 16 个内核开始,向 virtualbox 添加更多内核会使应用程序变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29543339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com