【问题标题】:How to understand CPU allocation in Mesos?如何理解 Mesos 中的 CPU 分配?
【发布时间】:2015-12-24 08:29:28
【问题描述】:

我正在阅读Building Applications on Mesos,并遇到以下陈述:

CPU
此资源表示有多少 CPU 内核可用。任务可能使用 CPU 的一小部分——这是可能的,因为 Mesos 从站使用 CPU 份额, 而不是保留特定的 CPU。这意味着,如果你有 1.5 个 CPU 保留,您的进程将被允许每秒使用总共 1.5 秒的 CPU 时间。这可能意味着,在单个 executor 中,两个进程各自获得 750 毫秒的 CPU 时间每秒,或者一个进程获得 1 秒的 CPU 时间。 CPU 时间和另一个在给定的秒内分别获得 500 毫秒的 CPU 时间。 使用 CPU 份额的好处是,如果某个任务能够使用超过它的份额,并且没有其他任务会使用空闲的 CPU,那么第一个任务可能会使用超过它的份额。因此,预留的 cpus 为任务提供了保证的最小 CPU 时间——如果有额外的可用容量,它将被允许使用更多。

我听不懂“if you have 1.5 cpus reserved, your processes will be allowed to use a total of 1.5 seconds of CPU time each second.”。它怎么能每秒使用1.5 秒的CPU 时间?

【问题讨论】:

    标签: mesos


    【解决方案1】:

    cpu=1.5 应该代表一个半 CPU 内核。您可以在 Mesos Web UI 中查看每个 Mesos 代理(从属)提供的核心数。这几乎就是nproc 显示的内容,除非mesos-slave 被配置为提供更少的CPU。 Mesos 以小数点后 3 位精度计算资源。

    有几个标志会影响 Mesos 限制资源的方式。对于 CPU 最重要isolation(我们正在谈论mesos-slave/mesos-agent 设置):

    • --isolation=posix/cpu,posix/mem 没有应用 CPU 限制 mesos-executor 只是一个运行其他进程的进程。您可以使用nice,例如nice -20(最高优先级)或 cpulimit 命令影响内核规划,但 Mesos 的例如cpu=0.1 不会被考虑在内。
    • --isolation=cgroups/cpu,cgroups/memcgroups(自 2.6.29 起成为 Linux 内核的一部分)允许限制每个进程或进程组使用的资源。某些发行版默认不启用内存限制,需要将cgroup_enable=memory 传递给内核。但是让我们专注于 CPU。默认情况下,cgroups 采用保守的方法,其中cpu=1.0 表示将为任务保留至少一个 CPU 内核。但是如果主机上没有其他任务在运行,它可能会消耗所有的 CPU。假设我们有一个使用12 CPUs 的主机,并且有两个使用cpu=2.0 运行的任务。然后每个任务可能会达到6 CPUs 个核心! (假设没有其他 Mesos 任务在该主机上运行)。这是非常危险的,当集群处于低负载时,所有任务看起来都很好,但是一旦有很多任务,一些主机的性能就会下降。
      • --cgroups_enable_cfs CFS 代表完全公平调度器,它采用更严格的方法。默认情况下它是关闭的,也不是所有的发行版都支持这个(你可以使用例如 Docker 的check-script.sh 来验证你的系统是否支持)。 CFS 将保证每个进程最多可以使用指定的部分(例如cpu=2.5)。这是以在某些任务空闲时没有其他进程可以使用保留的核心为代价的。因此,请确保您能很好地定义您的需求。

    最后提到的问题可以通过the Mesos documentation 中描述的 CPU 超额订阅来解决。

    【讨论】:

      【解决方案2】:

      通过使用多个 CPU/核心 :-)。

      请注意,这些限制的实际行为/执行在很大程度上取决于所使用的实际容器化器/隔离器。 不幸的是,我找不到任何好的/最近的文档(但我知道有人在努力改进这个:-)),但你可以看看这篇博文: Blog Post about CPU resources

      更新 CPU 利用率也有硬性上限:请参阅 --[no]-cgroups_enable_cfsconfiguration parameter 或者这个Jira

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-05
        • 2018-08-28
        • 1970-01-01
        • 2016-05-01
        • 1970-01-01
        • 2017-05-19
        • 2018-10-04
        • 1970-01-01
        相关资源
        最近更新 更多