如何理解Mesos中的CPU分配?

时间:2015-12-24 08:29:29

标签: mesos

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

  

的CPU
      此资源表示可用的CPU核心数。任务可能使用CPU的小数部分 - 这是可能的,因为Mesos从属使用CPU份额,   而不是保留特定的CPU。这意味着,如果你有1.5 cpus   保留,您的进程将被允许每秒使用总共1.5秒的CPU时间。这可能意味着,在单个执行程序中,两个进程每秒获得750毫秒的CPU时间,或者一个进程获得1秒的时间   CPU时间和另一个在给定秒内每个CPU时间为500毫秒。   使用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秒?

2 个答案:

答案 0 :(得分:10)

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

有几个标志会影响Mesos如何限制资源。对于CPU来说,最重要的是mesos-slave(我们正在谈论mesos-agent / --isolation=posix/cpu,posix/mem设置):

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

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

答案 1 :(得分:2)

通过使用多个cpu / core :-)。

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

<强>更新 CPU利用率有很高的上限:见  --[no]-cgroups_enable_cfs configuration parameter 或者Jira