<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    10512

    瀏覽量

    207271
  • LINUX內核
    +關注

    關注

    1

    文章

    312

    瀏覽量

    21419
  • Docker
    +關注

    關注

    0

    文章

    441

    瀏覽量

    11655

原文標題: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

    請問一下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

    Docker常見的問題和坑

    虛擬機通過添加Hypervisor層(虛擬化中間層),虛擬出網卡、內存、CPU等虛擬硬件,再在其上建立虛擬機,每個虛擬機都有自己的系統內核。而Docker容器則是通過隔離(namesapce)的方式
    的頭像 發表于 11-03 09:59 ?636次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>