Bendi新闻
>
docker是怎么实现cpu隔离的?

docker是怎么实现cpu隔离的?

5月前

docker是怎么实现cpu隔离的?

Docker 使用 cgroups(控制组)来实现 CPU 隔离。cgroups 是 Linux 内核的一个功能,用于限制、统计和隔离一个进程组的系统资源。对于 CPU 隔离,cgroups 提供了 CPU 子系统,Docker 利用这个子系统来限制容器的 CPU 使用。

具体来说,Docker 使用以下步骤来实现 CPU 隔离:

  1. Cgroups 资源分配: 在启动容器时,Docker 使用 cgroups 来为容器分配 CPU 资源。这涉及将容器的进程组添加到 cgroups 中,以便内核可以对其进行资源管理。

  2. 设置 CPU 限制: Docker 允许用户通过参数(如 --cpus)指定容器可以使用的 CPU 核心数量。这通过 cgroups 的 CPU 子系统来实现,限制容器进程组对 CPU 的访问。

  3. CPU 调度: Docker 利用 cgroups 中的 CPU 调度机制,确保容器只能在其分配的 CPU 范围内运行。这有助于防止容器占用主机上的所有 CPU 资源。

通过这些步骤,Docker 利用 Linux 内核的 cgroups 功能,实现了对容器的 CPU 隔离,使得容器能够在受限的资源环境中运行。

被分配给docker的cpu,其他进程还能使用这些cpu吗?

Docker 使用 cgroups 来进行 CPU 隔离,而 cgroups 允许将系统中的 CPU 资源划分为不同的组。当你为 Docker 容器分配 CPU 时,Docker 将创建一个 cgroup,并将容器的进程组添加到该 cgroup 中。这意味着该 cgroup 内的进程,即 Docker 容器内的进程,受到 CPU 限制。

其他未被 Docker 分配的进程,仍然在默认的 cgroup 中,可以使用系统中的所有 CPU 资源。因此,Docker 分配给容器的 CPU 并不会影响系统上运行的其他进程,它们仍然可以使用未被 Docker 占用的 CPU 资源。

总的来说,Docker 的 CPU 分配是一种限制容器内进程对 CPU 资源的访问,而不会影响系统上其他进程对未被分配的 CPU 资源的使用。

不同的docker,只能专用自己的cpu,是吗?

是的,每个 Docker 容器都可以被配置为专用自己的 CPU 资源,这是通过 Docker 的 CPU 隔离功能实现的。当你为 Docker 容器分配 CPU 时,你可以使用 --cpus 参数来指定容器可以使用的 CPU 核心数量。这样,容器内的进程将受到这一限制,只能在指定数量的 CPU 核心上运行。

例如,你可以运行以下命令来启动一个名为 "my_container" 的 Docker 容器,并限制它只能使用 2 个 CPU 核心:

docker run --cpus=2 --name my_container my_image

这就意味着 "my_container" 中的进程只能在两个 CPU 核心上运行,而不会占用系统上的所有可用 CPU 资源。其他未被分配的 CPU 资源仍然可供系统上的其他进程使用。

被分配的2个cpu,是固定被该docker容器使用,还是说上限是只能使用2个cpu,但是这2个cpu不是固定绑死的?

当你使用 --cpus 参数为 Docker 容器分配 CPU 核心时,这是设置容器的 CPU 上限,而不是具体固定的 CPU。具体来说:

  1. 上限限制: 使用 --cpus 参数,你指定了容器可以使用的最大 CPU 核心数量。在你的例子中,--cpus=2 表示容器的上限是 2 个 CPU 核心。

  2. 动态调度: 这两个 CPU 核心并不是固定绑定给容器的,而是可以在这个范围内进行动态调度。容器的进程可以在这两个核心之间进行切换,但总体而言,它们不会超过指定的上限。

这种动态调度的方式使得容器可以根据系统负载和资源可用性动态分配和释放 CPU 资源,以更好地适应变化的工作负载。总之,--cpus 参数提供了一个上限限制,容器内的进程可以在这个范围内灵活调度。


问题:我的意思是,假设现在有8个cpu,分别是cpu1到cpu8,然后分配2个cpu给某个docker进程,这2个cpu是固定的某2个cpu,还是说数量上限是2个cpu,但是具体是哪2个cpu,这个是动态变化的,是这样吗?

我明白了你的意思。当你使用 --cpus 参数为 Docker 容器分配 CPU 核心时,这是设置容器的 CPU 上限,而不是指定具体的 CPU 核心。具体来说:

  1. 上限限制: 使用 --cpus 参数,你指定了容器可以使用的最大 CPU 核心数量。在你的例子中,--cpus=2 表示容器的上限是 2 个 CPU 核心。

  2. 动态分配: 具体使用哪两个 CPU 核心是动态变化的。Docker 和 Linux 的 cgroups 机制会在可用的 CPU 核心中动态调度容器内的进程。这意味着容器内的进程可以在指定的上限内,根据系统负载和资源可用性在可用的 CPU 核心之间动态分配。

所以,虽然你设置了容器的 CPU 上限为 2 个核心,但具体是哪两个核心是由 Docker 和 Linux 内核根据系统条件动态确定的。这种动态分配的方式可以更好地适应系统的变化和负载情况。

总结

cpu隔离指的是,数量有限制。

一个docker进程,只能使用指定上限的cpu数量。

但是一个cpu,不是和某一个docker进程绑定死的。

也就是说,具体使用了哪几个cpu,这个不是固定的。但是能使用的cpu数量上限,是固定的。

为什么要有上限?就是不能让某个docker进程,把所有cpu资源都给全部霸占了。

这也是cpu隔离的意义所在。

链接:https://juejin.cn/post/7323044972667830326

(版权归原作者所有,侵删)

微信扫码关注该文公众号作者

来源:马哥Linux运维

相关新闻

今天刷屏的 OpenAI Sora 模型,是怎么实现 1分钟一镜到底的?揭秘最强视频生成模型 Sora,OpenAI 是怎么实现 1 分钟一镜到底的?掼蛋是怎么火的?坐拥财富上万亿,比尔·盖茨是怎么花钱的?恒大5600亿元造假创全球历史,是怎么做到的?大家都在讨论穿越周期,到底周期是怎么来的?e人是怎么求职的?欧洲商学院学姐:我能把面试官聊趴下…俄罗斯一季度的GDP增长5.4%,是怎么做到的?国际市场上的“双标”,是怎么形成的?股价三年涨一倍,携程是怎么做到的?|智氪悬赏公告的赏金是怎么定的?为啥有的人上万块有的只有几块钱?年化收益70%,量化宗师西蒙斯是怎么做到的?外媒揭秘:坐拥财富上万亿,比尔·盖茨是怎么花钱的?男女最舒服的感觉是怎么样的?秒懂!牛是怎么死的?读懂你就是生活的强者大女儿哈佛、小女儿麻省理工,我的两个女儿是怎么成长的?未来10年不愁订单,这家飞机制造商是怎么做到的?钟薛高濒死,13亿是怎么消失的?去年计划挣 2000 万,结果挣了 1.4 亿,于东来是怎么想的?去年计划挣2000万,结果挣了1.4亿,于东来是怎么想的?病情未愈竟遭“强制出院”,回家后陷半昏迷状态!“只能住院15天”是怎么来的?全世界众多盐湖出现神秘六边形!它们是怎么形成的?经营分析赋能业绩增长,这家大厂是怎么做到的?2013年,黄金是怎么崩的?
logo
联系我们隐私协议©2024 bendi.news
Bendi新闻
Bendi.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Bendi.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。