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

docker是怎么实现cpu隔离的?

公众号新闻

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

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

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

戳这里提交新闻线索和高质量文章给我们。
相关阅读
8 个最佳 Docker 容器监控工具,收藏了AWS Cloudshell 现在可以访问 Docker Engine万劫不复面试官:ThreadLocal 为什么会内存泄漏吗?是怎么产生的?面试必问!AMD推出锐龙8040系列APU,采用Zen4 CPU+RDNA3 GPUSystem76 升级 Serval WS Linux 移动工作站,最高 i9-14900HX CPU+RTX 4070 GPUDocker 的诅咒:曾以为它是终极解法,最后却是“罪大恶极”?乱套!多伦多华人聚居公寓大量Locker被撬:狂抢这东西,损失高达5位数!你遇到过的最好的manager是什么样的?深度好文|为什么Blackstone叫黑石,而Blackrock叫贝莱德?Mysql集群之PXC-Docker安装2024年怎么实现财富自由?澳专家分享5个秘诀!让你在生活危机中“钻漏洞”[评测]ASRock AMD Radeon RX 7700 XT Challenger 12GB OC 评测国产CPU里程碑!龙芯最强处理器、自研GPGPU来了,披露Tock“三剑客”在美国因车祸事故受伤无处说理,求赔偿却遭质疑,明州大姐亲历狗血官司像Docker一样编排大模型应用程序:这支十余人的年轻创业团队如何在2个月做出一个LLMOps平台?GPU、CPU和DRAM接口互联技术只凭CPU/GPU性能换机的时代,过去了揭秘最强视频生成模型 Sora,OpenAI 是怎么实现 1 分钟一镜到底的?深入了解浮点运算——CPU和GPU算力是如何计算的Docker实战【镜像部署】完成公司云迁移故乡里斯本一篇CVPR是如何炼成的?为什么Blackstone叫黑石,而Blackrock叫贝莱德?气炸!多伦多大学中国留学生聚居公寓大量Locker被撬!损失超5位数!宝宝成长记:练功、初访斯坦福、生日陪伴使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录如何在 Ubuntu 上安装 Docker | Linux 中国Diary of an Affectionate Cat (1)今天刷屏的 OpenAI Sora 模型,是怎么实现 1分钟一镜到底的?Python + Docker 还是 Rust + WebAssembly?这并不难选【CSSA招新】Locker Room和HR部欢迎你的加入!System76 升级 Serval WS Linux 移动工作站:最高 i9-14900HX CPU+RTX 4070 GPU【Locker Room】2023 UIUC VAL赛事结束White Hat, Black Hat: Bringing Hackers Out of the Shadows
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。