0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

请问一下docker是怎么实现cpu隔离的?

马哥Linux运维 来源:稀土掘金 2024-01-15 10:06 次阅读

docker是怎么实现cpu隔离的?

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

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

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

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

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。具体来说:

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

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

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

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

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

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

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

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

总结

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

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

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

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

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

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







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206564
  • LINUX内核
    +关注

    关注

    1

    文章

    311

    浏览量

    21389
  • Docker
    +关注

    关注

    0

    文章

    437

    浏览量

    11603

原文标题:docker是怎么实现cpu隔离的?

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问一下 pspice中切换开关怎么实现

    请问一下我想要负载从100欧姆切换到50欧姆再过段时间由50欧姆回到100欧姆用pspice怎么实现
    发表于 05-29 19:13

    请问一下这是什么电路?实现什么功能?

    本帖最后由 gk320830 于 2015-3-5 02:28 编辑 请问一下这是什么电路?实现什么功能?左边输入,右边是输出。
    发表于 08-08 17:13

    请问ADC/DAC的参考电压需要通过放大器隔离一下在送入吗?

    麻烦各位啦,想问一下ADC/DAC/仪表放大等的输入参考电压需不需通过放大器隔离一下在送入。隔离的目的是不是解决阻抗问题?
    发表于 08-31 10:41

    最近开机第次运行老是没有进到docker,要docker attach build 一下才会进去,是什么原因呢?

    我用李隆大佬的docker,最近开机第次运行老是没有进到docker,要docker attach build 一下才会进去,是什么原因呢
    发表于 11-25 11:33

    请问一下单线能实现同步传输吗?

    请问一下单线能实现同步传输吗?
    发表于 05-18 06:19

    请问一下CAN/RS-485总线为什么要隔离

    请问一下CAN/RS-485总线为什么要隔离
    发表于 05-20 06:58

    请问一下基于DSP的3G LTE应用怎么实现

    请问一下基于DSP的3G LTE应用怎么实现
    发表于 05-31 06:40

    请问一下怎么实现嵌入式电网分析仪中双CPU间的通信?

    请问一下怎么实现嵌入式电网分析仪中双CPU间的通信?
    发表于 06-03 06:10

    请问一下基于SIMULINK的步进电机仿真怎么实现

    请问一下基于SIMULINK的步进电机仿真怎么实现
    发表于 10-27 07:55

    请问一下如何去实现种平衡自行车的设计呢

    请问一下如何去实现种平衡自行车的设计呢?其代码该如何去实现呢?
    发表于 11-04 07:36

    请问一下stm32的systick实现精准延时的方法是什么?

    请问一下stm32的systick实现精准延时的方法是什么?
    发表于 11-24 06:21

    请问板子上linux系统是自带docker环境吗?

    小白请教一下。#docker versionClient: Version:v1.12.2 API version:1.24 Go version:go1.7.2 Git commit
    发表于 01-05 06:24

    介绍一下linux环境docker的使用流程

    仓库,就是基于 Docker 构建的自动化测试。使用流程这里介绍一下在 linux 环境 docker 的使用流程。安装 Docker
    发表于 04-27 15:03

    请问一下andoid是否支持isolcpus将arm的某个核隔离

    请问andoid 是否支持isolcpus将arm的某个核隔离?我想实现在arm的某个指定核上跑个单独的线程,该核为该线程独占。另外,在实现
    发表于 09-15 14:59

    请问一下可控硅调压器输出可以接入隔离变压器吗?

    请问一下可控硅调压器输出可以接入隔离变压器吗?
    发表于 03-23 09:38