Docker 未获得 CPU 的 100%

Docker doesn't get 100% of the CPU

我们刚刚编写了一个 CPU 密集型应用程序来对 Docker 图像进行基准测试。这是一个 Java 近似圆周率小数的应用程序。

Docker 映像正在 运行 加载 .jar,就像我们在主机上 运行 加载它时所做的那样。为什么 Docker 图像不如 运行 本地 .jar 快?我们预计在本地 运行 与在 Docker 上 运行 之间会有一些差异,但该过程需要两倍的时间。

有什么方法可以要求 Docker 使用所有 CPU 吗?

顺便说一句,项目发布于 GitHub:Fewlaps/SuperPI

有很多 Docker 命令行标志与 CPU 集和 CPU 共享相关。确保那些没有被设置,或者默认指定。一旦你的容器是 运行ning 你可以用 docker ps 找到它并用 docker inspect gloomy_archimedes 查看设置并在 HostConfig 部分下查看 CpuShares 之类的东西, CpusetCpus, 等等

您的 Docker 守护程序本身也可能受到其初始化脚本或 systemd 单元定义的限制。您可以通过查找 Docker 守护程序的 PID 和 cat /proc/1199/status 来检查。寻找 Cpus_allowed: 应该设置为 ff.

或者,如果您在 Windows 或 Apple OS X 上 运行ning Docker,则 Docker 将需要使用虚拟机。据我所知,所有 Docker 图像都需要 Linux 操作系统环境(尽管我认为可能有人正在构建 Windows 需要虚拟机才能 运行 在 Linux 上)。该虚拟机将配置 CPU 个内核。你需要找到一种方法来调整它并确保它是你想要的。

MacOS 的 Docker 和 Windows 的 Docker 是您的问题所在。 Docker 不会 运行 在这两个平台上(还),因此它们的安装程序会启动一个 VM 运行ning boot2docker。这些 VM 由 VirtualBox 控制,并且对分配给 VM 的 CPU 数量有限制。这些限制可以调整,所以我将从这里开始(检查 Docker 实例的 VirtualBox 配置,更改它可能需要重新启动 VM)。

为了正确比较容器的开销,您需要 运行 您的 "outside the container" 在 运行 运行您的 Docker 主机的 VM 中进行测试.那,或者在 运行 宁 Linux 在物理机器上的机器上安装 Docker,而不是在 VM 内部。

朋友们,我满脸惭愧:自家的MacOS Docker桌面客户端有设置可以启用更多或更少的内核。不知道是不是上个版本加的东西,没注意。默认情况下,它有两个内核而不是四个内核,这看起来很精明。

屏幕显示如下:

对了,仅供参考,在同一台机器上:

  • 运行 .jar 需要 64,973 毫秒
  • 运行 运行 .jar 的 Docker 图像需要 83,449 毫秒