我有一个多核 Kubernetes 集群,在其中我有多个配置为 CPU 限制为 500 毫核的 Pod:
resources:
limits:
cpu: "500m"
在一个 pod 中是否可以有多个线程并行运行(同时,在同一时刻)?
据我了解,当限制小于 1000 毫核时,pod 永远不会有多个线程并行运行。这是对的吗?
我有一个多核 Kubernetes 集群,在其中我有多个配置为 CPU 限制为 500 毫核的 Pod:
resources:
limits:
cpu: "500m"
在一个 pod 中是否可以有多个线程并行运行(同时,在同一时刻)?
据我了解,当限制小于 1000 毫核时,pod 永远不会有多个线程并行运行。这是对的吗?
您当然可以一次在一个容器中运行 2 个线程,每个线程使用 25% 的 cputime。但是,至于这些是否会完全一起运行,我不能 100% 确定。
运行以下测试似乎表明它可以:
是的,Kubernetes 中的 CPU 限制是使用 Linux CPU 配额子系统实现的(至少在 Linux 上,在 Windows 上不确定)。该系统的工作原理是为 cgroup 提供允许运行的时间片总数,并每隔几毫秒重新填充一次。如果一个任务(线程、进程)被标记为可运行并且它所在的组具有可用的配额令牌,那么它将像往常一样运行(并且存储桶减少)。如果没有令牌,则它不会运行并发出 timeslice_exceeded 事件。
将限制设置为 500m 意味着令牌重新填充速率将平均为每 1 秒挂钟时间允许的 0.5 秒运行时间。但是,如果您有一百万个内核,那么如果您的任务都是可运行的,那么您可以立即使用所有这些令牌。