首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在N核机器上运行1 cpu配额的1个线程可以使用整个内核吗?

在N核机器上运行1 cpu配额的1个线程可以使用整个内核吗?
EN

Server Fault用户
提问于 2022-07-16 17:30:44
回答 1查看 303关注 0票数 0

给予:

  • 一台8芯的机器
  • 具有1-CPU配额的cgroup
  • cgroup只有一个进程。
  • 进程是单线程的。

如何将CPU提供给流程?

  • 这个过程能够一直运行在单个核心上的全节流阀吗?
  • cgroup被同时给予所有8个cpu 1/8,结果7个cpu被cgroup未使用,1个cpu被耗尽( 1/8容量)。
  • 类似于循环的东西,在这种情况下,进程将从核心移动到核心,这样总体上它拥有机器总cpu的1/8,轮流使用每个cpu时间的1/64 (相当肯定不会是这样,缓存等)。
EN

回答 1

Server Fault用户

回答已采纳

发布于 2022-07-31 21:47:36

在您的情况下,cgroup没有任何挑战。这个单线程应用程序将使用1核心在100%。Cgroup是一个解决“我们有1000个不同权重的进程和10个内核,我们可以使用它们来运行所有进程,让它们都排队来领导他们的重量”的问题的系统。

要理解cgroups配额,只需想象它的“点”。Linux内核不在乎应用程序如何使用它:

  1. 你可以把它们都花在一个核心上
  2. 您可以将它们全部用于N核(例如,每个N核的1/N)。

因此,在像https://www.golinuxcloud.com/cgroup-limit-cpu-usage-linux/这样的例子中,你的应用程序在同一组中获得256个/(1024+256+512+256)的"CPU时间“,你只能在一个CPU上使用它:

  1. 一个总核心,你将得到一个CPU的1/8 (节流)。
  2. 4总核心,你将得到1/2 (节流)的1 CPU。
  3. 8总核心,你将得到1/1的CPU
  4. 16总核心,您将得到1 CPU,因为您的应用程序是单线程的。

更喜欢使用内部调度程序设置,以防止多线程繁重任务中的节流。例如,uber的automaxprocs设置golang的GOMAXPROCS等于提供的cgroup分数以防止节流。

见:

https://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txt

https://github.com/uber-go/automaxprocs

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1105778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档