gpt4 book ai didi

kubernetes - CPU 资源单位 (millicore/millicpu) 是如何计算的?

转载 作者:行者123 更新时间:2023-12-05 01:51:51 31 4
gpt4 key购买 nike

我们以这个处理器为例:2 核 4 线程(每个核 2 个线程)的 CPU

据我所知,这样的 CPU 有 2 个物理内核,但可以通过超线程同时处理 4 个线程。但是,实际上,一个物理内核一次只能真正运行一个线程,但是使用超线程,CPU 会利用管道中的空闲阶段来处理另一个线程。

现在,这里是 Kubernetes使用 Prometheus 和 Grafana 及其 CPU 资源单位测量 - millicore/millicpu。因此,他们实际上将一个内核切成 1000 毫核。

考虑到超线程,我不明白他们是如何计算这些毫核的。

例如,一个进程如何使用 100millicore(内核的第 10 部分)?这在技术上如何可能?


PS:无意中,在这里找到了一个真正描述性的解释:Multi threading with Millicores in Kubernetes

最佳答案

这变得非常复杂。所以 k8s 实际上并没有管理它,它只是在底层容器运行时(docker、containerd 等)之上提供了一个层。当您将容器配置为使用 100 millicore 时,k8 会将其交给底层容器运行时,运行时会处理它。现在,一旦你开始进入这个级别,你就必须开始研究 Linux 内核以及它如何使用 cgroups 进行 cpu 调度/速率。这变得非常有趣和复杂。简而言之:linux CFS Bandwidth Control 是管理进程(容器)可以使用多少 cpu 的东西。通过将 quotaperiod 参数设置为调度,您可以通过控制进程在暂停前可以运行多长时间以及运行频率来控制使用了多少 CPU。正如您正确识别的那样,您不能只使用十分之一的核心。但是您可以使用十分之一的时间,而随着时间的推移,您只能使用十分之一的核心。

例如

如果我将 quota 设置为 250ms,将 period 设置为 250ms。这告诉内核这个 cgroup 每 250 毫秒可以使用 250 毫秒的 CPU 周期时间。这意味着它可以使用 100% 的 CPU。

如果我将 quota 设置为 500ms,并将 period 设置为 250ms。这告诉内核这个 cgroup 每 250 毫秒可以使用 500 毫秒的 CPU 周期时间。这意味着它可以使用 200% 的 CPU。 (2 核)

如果我将 quota 设置为 125ms,并将 period 设置为 250ms。这告诉内核这个 cgroup 每 250 毫秒可以使用 125 毫秒的 CPU 周期时间。这意味着它可以使用 50% 的 CPU。

这是一个非常简短的解释。这是一些进一步的阅读:

https://blog.krybot.com/a?ID=00750-cfae57ed-c7dd-45a2-9dfa-09d42b7bd2d7 https://www.kernel.org/doc/html/latest/scheduler/sched-bwc.html

关于kubernetes - CPU 资源单位 (millicore/millicpu) 是如何计算的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71944390/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com