我正在阅读在Mesos上构建应用程序,并遇到以下语句:
cpus
此资源表示可用的CPU核心数.任务可以使用CPU的小数部分 - 这是可能的,因为Mesos从属服务器使用CPU共享,而不是保留特定的CPU.这意味着,如果保留1.5 cpus,则允许您的进程每秒使用总共1.5秒的CPU时间.这可能意味着,在单个执行器中,两个进程每秒获得750毫秒的CPU时间,或者一个进程获得1秒的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
?
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
命令来影响内核规划,但cpu=0.1
不会考虑Mesos的内容.
--isolation=cgroups/cpu,cgroups/mem
cgroups(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
).这是以某个任务空闲时其他进程无法利用保留核心为代价的.因此,请确保您能够很好地定义您的要求.
最后提到的问题可以通过Mesos文档中描述的CPU超额预订来解决.