我有一个4核CPU,我创建了一个CPU资源限制为100m的Kubernetes Pod,这意味着它将占用1/10的核心功率。
我想知道在这种情况下100m甚至不是一个完整的内核,如果我的应用程序是多线程应用程序,我的应用程序的线程会并行运行吗?还是所有线程仅在内核(100毫安内核)的一部分中运行?
谁能进一步解释其背后的机制?
GMs*_*soF 17
最接近的答案,我发现到目前为止,这是一个:
对于单线程程序,0.1 的 CPU 使用率意味着如果您可以在随机时刻冻结机器,并查看每个内核在做什么,那么您的单线程运行的几率为十分之一那一瞬间。机器上的核心数不影响0.1的含义。对于具有多个线程的容器,容器的使用量是其线程使用量的总和(根据之前的定义)。无法保证您在哪个核心上运行,并且您可能在容器生命周期的不同时间点在不同的核心上运行. cpu 限制为 0.1 意味着您的使用量在很长一段时间内不得超过 0.1。cpu 请求为 0.1 意味着如果您的线程不经常阻塞,系统将尝试确保您能够拥有至少 0.1 的 cpu 使用率。
我认为以上听起来很合乎逻辑。根据我的问题,100m 核心 CPU 的功率将分布在所有 CPU 核心上,这意味着多线程应该在 Kubernetes 中工作。
更新:
此外,这个答案很好地解释了,尽管它可能在单核中运行一个线程(或根据问题少于一个核功率),但由于操作系统的调度能力,它仍然会尝试并行运行指令单元,但不超过规定的时钟功率(根据问题为 100m)。
查看与Kubernetes 中的资源相关的文档:
您可以按照文章中所述使用资源:
要指定容器的 CPU 请求,请
resources:requests在容器资源清单中包含该字段。要指定 CPU 限制,请包含resources:limits。在本练习中,您将创建一个具有一个 Container 的 Pod。容器的请求为 0.5 个 CPU,限制为 1 个 CPU。这是 Pod 的配置文件:
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr
image: vish/stress
resources:
limits:
cpu: "1"
requests:
cpu: "0.5"
args:
- -cpus
- "2"
Run Code Online (Sandbox Code Playgroud)
除了您的问题:是的,它不会并行运行(多核线程)。但是您可以在 pod 中显示应用程序的几个核心,然后使用多线程来执行它。
args配置文件的该 部分在容器启动时提供容器的参数。该-cpus "2"参数告诉容器尝试使用 2 个 CPU。
我仔细查看了相关的GitHub 问题主题。线程中有一些来回,但我认为我理解了它,并且想分享一些迄今为止答案中似乎缺少的内容:
| 归档时间: |
|
| 查看次数: |
2953 次 |
| 最近记录: |