【问题标题】:How can I make Docker trigger higher CPU frequencies如何让 Docker 触发更高的 CPU 频率
【发布时间】:2018-05-20 12:03:11
【问题描述】:

好的,所以我的标题实际上可能没有链接到可能的解决方案,但这是我的问题。 我在 Windows 10 kaby-lake(2 个物理内核,4 个虚拟内核)笔记本电脑的 docker 容器中运行 Python 3 Jupyter 笔记本。 我注意到在从那里进行大量计算时,我在任务监视器中看到的 CPU 使用率非常低(~15%)。 在详细了解每个进程时,VBoxHeadless.exe 实际上使用了 24% 的处理器,这与产生 97-100% CPU 使用率的docker stats 命令相匹配,因此从单核操作的角度来看是有意义的。 我的实际问题是,即使在线程上填充了 CPU 时间,windows(我猜)并没有决定它实际上可能对加速 CPU 有用,因此它运行在 1.7GHz(其他应用程序在高性能模式,我通常会达到计算机能够达到的最大 3.5GHz)。 因此,我怎样才能从 docker 本身或 Windows 10 内部获得更高的时钟速度(标称 2.7GHz 或最大 3.5GHZ)(考虑到它们可能会使我的单线程速度翻倍)?

【问题讨论】:

    标签: docker windows-10 cpu-usage


    【解决方案1】:

    需要配置运行docker的docker机器。如果您还没有创建自定义的,名为“default”的默认 docker 机器将只能访问一个 cpu。

    您可以通过运行检查此 docker-machine 的所有配置:

    docker-machine inspect default
    

    您需要清除此默认机器并重新创建它:

    docker-machine rm default
    docker-machine create -d virtualbox --virtualbox-disk-size "400000" --virtualbox-cpu-count "2" --virtualbox-memory "2048" default
    

    您可以通过运行检查机器的所有可用配置选项:

    docker-machine create --help
    

    【讨论】:

    • 我做了这一切,现在我的默认 docker 机器可能有两倍的内存和两倍的内核可供使用,但实际上这不是我所指的(速度没有改变)。我实际上是在谈论具有更高 CPU 频率的单核性能
    【解决方案2】:

    定义 CPU 份额可以帮助您,但并不完全正确。

    CPU 限制基于份额,因为这些份额是一个进程与另一个进程相比应该获得多少处理时间之间的权重。如果 CPU 空闲,则该进程将使用所有可用资源。如果第二个进程需要 CPU,则可用的 CPU 时间将根据权重进行共享。 例如--cpu-shares 参数定义 0-768 之间的份额。如果一个容器定义了 768 的份额,而另一个定义了 256 的份额,则第一个容器将拥有 50% 的份额,而另一个容器将拥有 25% 的可用份额。

    第一个容器以下将被允许拥有 75% 的份额。第二个容器将被限制为 25%。

    docker run -d --name p1 --cpuset-cpus 0 --cpu-shares 768 image_name
    docker run -d --name p2 --cpuset-cpus 0 --cpu-shares 256 image_name
    sleep 5
    docker stats --no-stream
    docker rm -f p1 p2
    

    重要的是要注意,一个进程可以拥有 100% 的份额,无论定义的权重如何,如果没有其他进程在运行。

    【讨论】:

    • 也试过了,但不影响在 windows 级别上对更多 cpu 的整体请求,我认为这个问题与 windows 10 相关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2020-02-05
    • 2022-08-14
    • 2023-02-07
    相关资源
    最近更新 更多