Sim*_*n H 6 python cpu performance virtualbox overhead
目前我正在测试具有64个内核的服务器上的应用程序.此服务器安装了虚拟机,最多可以使用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核心

4核心

8个核心

12核心

16核

20个核心

23核心

27核心

32核心

x轴是半秒,y acis是由top -b -n 1以百分比形式报告的CPU负载.我用每个核心计数运行应用程序大约10分钟.蓝线是我的应用程序的平均CPU负载.红线是我的应用程序,绿线是整个系统的负载.
如您所见,负载降低到大约16个核心.当使用超过16个内核时,它会变得更慢,从大约23个内核开始,它变得非常慢.即使那个记录CPU负载的进程甚至不再调用的速度很慢.这就是为什么上图中的图表更短......
有没有人知道可能是什么问题?这是虚拟机的已知错误吗?这是一个mininet问题吗?还是一个linux问题?我如何知道哪些部件会导致极端负载?
如果您需要更多信息,请写评论,我将编辑问题.
来宾系统的负载从未高于50%,所以我认为这不是问题.
VMWare可能会更快吗?
编辑 我查看了这些图,发现描述我的应用程序的平均CPU负载的蓝线(所有mininet主机上的所有实例的平均值)在从1变为2到3到16核时甚至变得更高.但是从1到16个核心,我的应用程序的CPU负载增加非常非常慢.虽然这增加了整体系统负载下降(这在我看来是有道理的,因为ubuntu可以在不同的核上执行其任务,只要没有共享的资源就更快).
那么为什么平均值会增加?为什么它从16核心开始呈指数级增长?
一旦程序开始跨处理器套接字边界运行,这是常见的行为。一般来说,一旦您的应用程序开始在驻留在不同物理处理器上的内核上执行,您将开始看到不可预测的计时行为。
假设您的 64 核机器有四个处理器插槽,每个处理器插槽有 16 个内核,并且还假设您的调度程序是一个健全的调度程序,尝试将应用程序的线程分组在同一插槽上,那么您的应用程序应该会看到 1 到 16 之间良好的并行加速核心,但一旦使用超过 16 个核心,它就会开始运行得很差,因为其中一些核心必须驻留在单独的插槽上。
对于常规计算机和虚拟机来说都是如此,但是如果虚拟机的调度程序不知道这些套接字边界,则虚拟机可能会增加另一层不可预测性。
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |