我正在阅读 openstack 云管理员指南。在 Flavors 自定义主题的第 47 页中定义了以下术语。
这可选的 cpu_shares元素指定域的比例加权份额。如果省略此元素,服务默认为操作系统提供的默认值。该值没有单位,它是基于其他虚拟机设置的相对度量。例如,配置值为 2048 的虚拟机获得的 CPU 时间是配置值为 1024 的虚拟机的两倍。
这可选的 cpu_period元素指定 QEMU 和 LXC 虚拟机管理程序的执行间隔(单位:微秒)。在周期内,域的每个 VCPU 不得消耗超过配额的运行时间。该值应在 [1000, 1000000] 范围内。值为 0 的周期表示没有值。
可选CPU配额元素指定允许的最大带宽(单位:微秒)。配额为任何负值的域表示该域具有无限带宽,这意味着它不受带宽控制。该值应在 [1000, 18446744073709551] 范围内或小于 0。值为 0 的配额表示没有值。您可以使用此功能确保所有 vcpus 以相同的速度运行。示例:
nova flavor-key m1.low_cpu set cpu_quota=10000
nova flavor-key m1.low_cpu set cpu_period=20000
在该示例中,m1.low_cpu 实例最多只能消耗物理 CPU 计算能力的 50% 的 CPU。
我的问题
cpu_period 是什么。在上面的例子中,值 20000 表示什么。
什么是 cpu_quota。在上面的例子中,值 10000 表示什么。
有人可以举例说明吗?
答案1
在给定的例子中cpu_period
是 20,000 微秒,cpu_quota
10,000 微秒。
每 20,000μs 的时间段m1.low_cpu
允许使用 10,000μs 的处理器时间。
来源:我把引用的文字读了三遍。
答案2
(根据 Zain 的后续问题添加澄清答案)
你的结论是正确的。参考新的--cpus
设置基本上是 cpu_period 和 cpu_quota 的一个因素,文档告诉我们:
如果主机有两个 CPU,并且你设置了
--cpus="1.5"
,则容器最多保证一个半 CPU。这相当于设置 --cpu-period="100000” 和 --cpu-quota="150000”。适用于 Docker 1.13 及更高版本。
因此,对于他们的例子,这意味着在 100% 的总 CPU 周期内,CPU 使用率可以使用 150% 的 CPU 功率。对于一个 CPU 来说,这是没有意义的,因为这是不可能的,所以在这个例子中有 2 个 CPU,因此从逻辑上讲,该示例中的 50% 超出部分归属于第二个 CPU。一个更简单的理解该示例的方式基本上是 2 核系统的总 CPU 功率总计为 75%。换句话说:
(1.5 / 2) * 100 = 75% .. 其中 1.5 是 CPU--cpus
核心数,2 是 CPU 核心数。
在保持设置不变的情况下增加 CPU 数量--cpus
实际上不会允许容器随机器一起扩大。如果需要扩大,那么这个数字必须是所需功率和可用 CPU 数量的一个因数。
举个例子,如果你总是想把容器盖住20可用 CPU 资源总量的百分比可设置--cpus
为:(CPU 数量)x(20/100).. 或者只是 .. CPU 数量 x 0.2
我想指出的是,这个新--cpus
设置在初始问题发布后可用,现在建议使用该设置,而不是--cpu-period
和的组合--cpu-quota
。显然,它使事情更容易理解。