我是 docker 的新手,最近写了一个 dockerfile 来容器化一个名为 SuiteOPT 的数学优化求解器。但是,在针对一些测试问题测试优化求解器时,我在 docker 中遇到的性能比在 docker 外部要慢。例如,线性程序 (demoLP.py) 的一个演示问题在我的机器上需要大约 12 秒才能解决,但在 docker 中需要大约 35 秒。我花了大约一个星期的时间浏览博客和 stackoverflow 帖子以寻找解决方案,但无论我做了什么更改,docker 中的时间总是大约 35 秒。有谁知道可能会发生什么,或者有人能指出我正确的方向吗?
以下是优化求解器的 docker hub 和 PYPI 页面的链接:
编辑 1:根据 @user3666197 的评论添加额外的想法。虽然我没想到 SuiteOPT 在 docker 容器中表现如此好,但我主要对这个演示问题的 ~3 倍减速感到惊讶。也许问题可以重述如下:如何确定这种减速是否纯粹是由于我在 docker 容器内执行 CPU-RAM-I/O 密集型代码而不是由于某些原因造成的我的 Dockerfile 配置有其他问题吗?
注意:这种容器化的目的是为用户提供一种简单的方法来开始使用 Python 中的优化软件。虽然优化软件在 PYPI 上可用,但有许多非 Python 依赖项可能会给希望使用该软件而不遇到安装问题的人们带来问题。
最佳答案
Q : How can determine whether or not this slowdown is caused purely to the fact that I am executing a CPU-RAM-I/O intensive code inside of a docker container instead of due to some other issue with the configuration of my Dockerfile?
战场:
第 0 步:收集有关主机端运行处理的数据:
mpstat -P ALL 1 ### 1 [s] sampled CPU counters in one terminal-session (may log to file)
python demoLP.py # <TheWorkloadUnderTest> expected ~ 12 [s] on bare metal system
第 1 步:收集有关相同处理但在 Docker 容器内的数据
加上审查策略在--cpus
和--cpu-shares
中设置(可能 --memory
+--kernel-memory
如果使用 )
加上查看 throttled_time
中显示的效果(引用页 13)
cat /sys/fs/cgroup/cpu,cpuacct/cpu.stat
nr_periods 0
nr_throttled 0
throttled_time 0 <-------------------------------------------------[*] increasing?
另外通过以下方式查看 Docker 容器的工作负载 View :
cat /proc/<_PID_>/status | grep nonvolu ### in one terminal session
nonvoluntary_ctxt_switches: 6 <------------------------------------[*] increasing?
systemd-cgtop ### view <Tasks> <%CPU> <Memory> <In/s> <Out/s>
第 2 步:
使用上面的流程图根据设置的绝对 CPU 上限策略和 CPU 份额策略检查观察到的指示
关于python - 为什么我的优化求解器在 docker 中运行速度较慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60310124/