0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

請問一下docker是怎么實(shí)現(xiàn)cpu隔離的?

馬哥Linux運(yùn)維 ? 來源:稀土掘金 ? 2024-01-15 10:06 ? 次閱讀

docker是怎么實(shí)現(xiàn)cpu隔離的?

Docker 使用 cgroups(控制組)來實(shí)現(xiàn) CPU 隔離。cgroups 是 Linux 內(nèi)核的一個(gè)功能,用于限制、統(tǒng)計(jì)和隔離一個(gè)進(jìn)程組的系統(tǒng)資源。對于 CPU 隔離,cgroups 提供了 CPU 子系統(tǒng),Docker 利用這個(gè)子系統(tǒng)來限制容器的 CPU 使用。

具體來說,Docker 使用以下步驟來實(shí)現(xiàn) CPU 隔離:

Cgroups 資源分配:在啟動(dòng)容器時(shí),Docker 使用 cgroups 來為容器分配 CPU 資源。這涉及將容器的進(jìn)程組添加到 cgroups 中,以便內(nèi)核可以對其進(jìn)行資源管理。

設(shè)置 CPU 限制:Docker 允許用戶通過參數(shù)(如--cpus)指定容器可以使用的 CPU 核心數(shù)量。這通過 cgroups 的 CPU 子系統(tǒng)來實(shí)現(xiàn),限制容器進(jìn)程組對 CPU 的訪問。

CPU 調(diào)度:Docker 利用 cgroups 中的 CPU 調(diào)度機(jī)制,確保容器只能在其分配的 CPU 范圍內(nèi)運(yùn)行。這有助于防止容器占用主機(jī)上的所有 CPU 資源。

通過這些步驟,Docker 利用 Linux 內(nèi)核的 cgroups 功能,實(shí)現(xiàn)了對容器的 CPU 隔離,使得容器能夠在受限的資源環(huán)境中運(yùn)行。

被分配給docker的cpu,其他進(jìn)程還能使用這些cpu嗎?

Docker 使用 cgroups 來進(jìn)行 CPU 隔離,而 cgroups 允許將系統(tǒng)中的 CPU 資源劃分為不同的組。當(dāng)你為 Docker 容器分配 CPU 時(shí),Docker 將創(chuàng)建一個(gè) cgroup,并將容器的進(jìn)程組添加到該 cgroup 中。這意味著該 cgroup 內(nèi)的進(jìn)程,即 Docker 容器內(nèi)的進(jìn)程,受到 CPU 限制。

其他未被 Docker 分配的進(jìn)程,仍然在默認(rèn)的 cgroup 中,可以使用系統(tǒng)中的所有 CPU 資源。因此,Docker 分配給容器的 CPU 并不會(huì)影響系統(tǒng)上運(yùn)行的其他進(jìn)程,它們?nèi)匀豢梢允褂梦幢?Docker 占用的 CPU 資源。

總的來說,Docker 的 CPU 分配是一種限制容器內(nèi)進(jìn)程對 CPU 資源的訪問,而不會(huì)影響系統(tǒng)上其他進(jìn)程對未被分配的 CPU 資源的使用。

不同的docker,只能專用自己的cpu,是嗎?

是的,每個(gè) Docker 容器都可以被配置為專用自己的 CPU 資源,這是通過 Docker 的 CPU 隔離功能實(shí)現(xiàn)的。當(dāng)你為 Docker 容器分配 CPU 時(shí),你可以使用--cpus參數(shù)來指定容器可以使用的 CPU 核心數(shù)量。這樣,容器內(nèi)的進(jìn)程將受到這一限制,只能在指定數(shù)量的 CPU 核心上運(yùn)行。

例如,你可以運(yùn)行以下命令來啟動(dòng)一個(gè)名為 "my_container" 的 Docker 容器,并限制它只能使用 2 個(gè) CPU 核心:

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

這就意味著 "my_container" 中的進(jìn)程只能在兩個(gè) CPU 核心上運(yùn)行,而不會(huì)占用系統(tǒng)上的所有可用 CPU 資源。其他未被分配的 CPU 資源仍然可供系統(tǒng)上的其他進(jìn)程使用。

被分配的2個(gè)cpu,是固定被該docker容器使用,還是說上限是只能使用2個(gè)cpu,但是這2個(gè)cpu不是固定綁死的?

當(dāng)你使用--cpus參數(shù)為 Docker 容器分配 CPU 核心時(shí),這是設(shè)置容器的 CPU 上限,而不是具體固定的 CPU。具體來說:

上限限制:使用--cpus參數(shù),你指定了容器可以使用的最大 CPU 核心數(shù)量。在你的例子中,--cpus=2表示容器的上限是 2 個(gè) CPU 核心。

動(dòng)態(tài)調(diào)度:這兩個(gè) CPU 核心并不是固定綁定給容器的,而是可以在這個(gè)范圍內(nèi)進(jìn)行動(dòng)態(tài)調(diào)度。容器的進(jìn)程可以在這兩個(gè)核心之間進(jìn)行切換,但總體而言,它們不會(huì)超過指定的上限。

這種動(dòng)態(tài)調(diào)度的方式使得容器可以根據(jù)系統(tǒng)負(fù)載和資源可用性動(dòng)態(tài)分配和釋放 CPU 資源,以更好地適應(yīng)變化的工作負(fù)載??傊?-cpus參數(shù)提供了一個(gè)上限限制,容器內(nèi)的進(jìn)程可以在這個(gè)范圍內(nèi)靈活調(diào)度。

問題:我的意思是,假設(shè)現(xiàn)在有8個(gè)cpu,分別是cpu1到cpu8,然后分配2個(gè)cpu給某個(gè)docker進(jìn)程,這2個(gè)cpu是固定的某2個(gè)cpu,還是說數(shù)量上限是2個(gè)cpu,但是具體是哪2個(gè)cpu,這個(gè)是動(dòng)態(tài)變化的,是這樣嗎?

我明白了你的意思。當(dāng)你使用--cpus參數(shù)為 Docker 容器分配 CPU 核心時(shí),這是設(shè)置容器的 CPU 上限,而不是指定具體的 CPU 核心。具體來說:

上限限制:使用--cpus參數(shù),你指定了容器可以使用的最大 CPU 核心數(shù)量。在你的例子中,--cpus=2表示容器的上限是 2 個(gè) CPU 核心。

動(dòng)態(tài)分配:具體使用哪兩個(gè) CPU 核心是動(dòng)態(tài)變化的。Docker 和 Linux 的 cgroups 機(jī)制會(huì)在可用的 CPU 核心中動(dòng)態(tài)調(diào)度容器內(nèi)的進(jìn)程。這意味著容器內(nèi)的進(jìn)程可以在指定的上限內(nèi),根據(jù)系統(tǒng)負(fù)載和資源可用性在可用的 CPU 核心之間動(dòng)態(tài)分配。

所以,雖然你設(shè)置了容器的 CPU 上限為 2 個(gè)核心,但具體是哪兩個(gè)核心是由 Docker 和 Linux 內(nèi)核根據(jù)系統(tǒng)條件動(dòng)態(tài)確定的。這種動(dòng)態(tài)分配的方式可以更好地適應(yīng)系統(tǒng)的變化和負(fù)載情況。

總結(jié)

cpu隔離指的是,數(shù)量有限制。

一個(gè)docker進(jìn)程,只能使用指定上限的cpu數(shù)量。

但是一個(gè)cpu,不是和某一個(gè)docker進(jìn)程綁定死的。

也就是說,具體使用了哪幾個(gè)cpu,這個(gè)不是固定的。但是能使用的cpu數(shù)量上限,是固定的。

為什么要有上限?就是不能讓某個(gè)docker進(jìn)程,把所有cpu資源都給全部霸占了。

這也是cpu隔離的意義所在。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10807

    瀏覽量

    210854
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21608
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    453

    瀏覽量

    11792

原文標(biāo)題:docker是怎么實(shí)現(xiàn)cpu隔離的?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何使用 Docker容器化技術(shù)

    對于開發(fā)人員來說,Docker肯定都不陌生,今天小編帶大家重新學(xué)習(xí)一下Docker。 什么是 Docker 官話: Docker
    的頭像 發(fā)表于 09-30 11:24 ?1.6w次閱讀

    請問一下 pspice中切換開關(guān)怎么實(shí)現(xiàn)

    請問一下我想要負(fù)載從100歐姆切換到50歐姆再過段時(shí)間由50歐姆回到100歐姆用pspice怎么實(shí)現(xiàn)
    發(fā)表于 05-29 19:13

    請問一下這是什么電路?實(shí)現(xiàn)什么功能?

    本帖最后由 gk320830 于 2015-3-5 02:28 編輯 請問一下這是什么電路?實(shí)現(xiàn)什么功能?左邊輸入,右邊是輸出。
    發(fā)表于 08-08 17:13

    最近開機(jī)第次運(yùn)行老是沒有進(jìn)到docker,要docker attach build 一下才會(huì)進(jìn)去,是什么原因呢?

    我用李隆大佬的docker,最近開機(jī)第次運(yùn)行老是沒有進(jìn)到docker,要docker attach build 一下才會(huì)進(jìn)去,是什么原因呢
    發(fā)表于 11-25 11:33

    請問一下單線能實(shí)現(xiàn)同步傳輸嗎?

    請問一下單線能實(shí)現(xiàn)同步傳輸嗎?
    發(fā)表于 05-18 06:19

    請問一下CAN/RS-485總線為什么要隔離?

    請問一下CAN/RS-485總線為什么要隔離?
    發(fā)表于 05-20 06:58

    請問一下基于DSP的3G LTE應(yīng)用怎么實(shí)現(xiàn)?

    請問一下基于DSP的3G LTE應(yīng)用怎么實(shí)現(xiàn)
    發(fā)表于 05-31 06:40

    請問一下怎么實(shí)現(xiàn)嵌入式電網(wǎng)分析儀中雙CPU間的通信?

    請問一下怎么實(shí)現(xiàn)嵌入式電網(wǎng)分析儀中雙CPU間的通信?
    發(fā)表于 06-03 06:10

    請問一下基于SIMULINK的步進(jìn)電機(jī)仿真怎么實(shí)現(xiàn)?

    請問一下基于SIMULINK的步進(jìn)電機(jī)仿真怎么實(shí)現(xiàn)?
    發(fā)表于 10-27 07:55

    請問一下stm32的systick實(shí)現(xiàn)精準(zhǔn)延時(shí)的方法是什么?

    請問一下stm32的systick實(shí)現(xiàn)精準(zhǔn)延時(shí)的方法是什么?
    發(fā)表于 11-24 06:21

    介紹一下linux環(huán)境docker的使用流程

    倉庫,就是基于 Docker 構(gòu)建的自動(dòng)化測試。使用流程這里介紹一下在 linux 環(huán)境 docker 的使用流程。安裝 Docker
    發(fā)表于 04-27 15:03

    請問一下可控硅調(diào)壓器輸出可以接入隔離變壓器嗎?

    請問一下可控硅調(diào)壓器輸出可以接入隔離變壓器嗎?
    發(fā)表于 03-23 09:38

    docker存儲(chǔ)驅(qū)動(dòng)的工作原理

    Docker的存儲(chǔ)驅(qū)動(dòng)官方有介紹其工作原理,這里只是簡單概括一下。Docker使用了層的概念,docker在構(gòu)建鏡像的時(shí)候,會(huì)逐行執(zhí)行我們的Dockerfile中的每
    的頭像 發(fā)表于 06-26 11:49 ?4543次閱讀

    剖析一下CPU對代碼的識別和讀取

    先說一下半導(dǎo)體,啥叫半導(dǎo)體?就是介于導(dǎo)體和絕緣體中間的種東西,比如二極管。
    的頭像 發(fā)表于 02-13 16:32 ?1250次閱讀

    Jtti:Docker會(huì)替代調(diào)虛機(jī)嗎

    Docker是計(jì)算虛擬化的種方式,和使用虛擬機(jī)進(jìn)行虛擬化是類似的。由于近幾年Docker技術(shù)的流行和發(fā)展。所以單獨(dú)介紹一下Docker。首
    的頭像 發(fā)表于 07-12 14:38 ?239次閱讀
    Jtti:<b class='flag-5'>Docker</b>會(huì)替代調(diào)虛機(jī)嗎