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

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

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

Linux namespace和cgroups簡介

馬哥Linux運(yùn)維 ? 來源:高效運(yùn)維 ? 作者:高效運(yùn)維 ? 2022-03-16 09:03 ? 次閱讀

先放結(jié)論,namespace 是用來做資源隔離, cgroup 是用來做資源限制。

Namespace

先說Namespace,虛擬技術(shù)基本要求就是資源隔離,簡單的說就是我獨(dú)占當(dāng)前所有的資源。比如我在 8080 端口起 web 服務(wù)器,不用擔(dān)心其他進(jìn)程端口占用。Linux 自帶 namespace 就能達(dá)到這個目的。namespace 從2002 開始開發(fā)到現(xiàn)在已經(jīng)快20年的歷史了,到現(xiàn)在一共有6種 namespace:

  • mnt, 文件系統(tǒng)

  • pid, 進(jìn)程

  • net, 網(wǎng)絡(luò)

  • ipc, 系統(tǒng)進(jìn)程通信

  • uts, hostname

  • user, 用戶

可以通過三個系統(tǒng)調(diào)用的方式

  • clone,創(chuàng)建新的進(jìn)程和新的namespace,新創(chuàng)建的進(jìn)程 attach 到新創(chuàng)建的 namespace

  • unshare,不創(chuàng)建新的進(jìn)程,創(chuàng)建新的 namespace 并把當(dāng)前進(jìn)程 attach 上

  • setns, attach 進(jìn)程到已有的 namespace 上

shell 也提供了一個和系統(tǒng)調(diào)用同名的 unshare 命令可以非常簡單的創(chuàng)建 namespace。


	
sudo unshare --fork --pid --mount-proc bash

這樣創(chuàng)建了一個新的 PID namespace 并在里面運(yùn)行了 bash。我們看看當(dāng)前 namespace 的進(jìn)程

aaaa3ca2-9331-11ec-952b-dac502259ad0.png

在這個 namespace 里,就只有兩個進(jìn)程了。

Cgroups

cgroups 是 control groups 控制組的意思, 可以通過文件系統(tǒng)來訪問這些信息。一般cgroups 掛載在/sys/fs/cgroup

pYYBAGIxPQ2AUwnIAAgfQnTuA2o831.png

內(nèi)核會讀取這些信息來調(diào)度資源分配給每個進(jìn)程。比如我要限制進(jìn)程占用CPU的時間。我用 Go 寫了一個模擬高 CPU 的代碼。

func IsPrime(value int) bool {    for i := 2; i <= int(math.Floor(float64(value)/2)); i++ {        if value%2 == 0 {            return false        }    }    return true}
func main() {    for i := 0; i < 999999999; i++ {        fmt.Printf("%v is prime: %v
", i, IsPrime(i))    }}

我創(chuàng)建兩個 CPU 的 cgroups

sudo cgcreate -g cpu:/cpulimitedsudo cgcreate -g cpu:/lesscpulimited

cpu.shares 是給內(nèi)核為每個進(jìn)程決定 CPU 計算資源,默認(rèn)值是1024。給 cpulimited 設(shè)置為 512,lesscpulimited 保留默認(rèn)值,那么在這兩個組的進(jìn)程會以1 :2的比例占用CPU。


	
sudo cgset -r cpu.shares=512 cpulimited

aad8bef6-9331-11ec-952b-dac502259ad0.png

我們來驗(yàn)證一下。

在 cpulimited 起一個進(jìn)程


	
sudo cgexec -g cpu:cpulimited ./main > /dev/null &

可以看到獨(dú)占了 100% 的 CPU,在 cpulimited 再起一個進(jìn)程

poYBAGIxPT6ARBspAAcpNjujwFQ011.png

兩個進(jìn)程都在 cpulimited,各占50%的 CPU。在 lesscpulimited 起一個進(jìn)程

poYBAGIxPYWARk-KAAdDiLAiFOk165.png


	
sudo cgexec -g cpu:lesscpulimited ./main > /dev/null &

pYYBAGIxPbKAGawfAAZkU0oF2lg946.png

兩個 cpulimited 進(jìn)程的 CPU 之和 與 一個 lesscpulimited 進(jìn)程的 CPU 差不多就是 1:2的關(guān)系。

原文標(biāo)題:容器技術(shù)基石:Linux namespace 和 cgroups,運(yùn)維了解一下

文章出處:【微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
審核編輯:湯梓紅


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

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207921
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84566
  • 資源
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

    17732

原文標(biāo)題:容器技術(shù)基石:Linux namespace 和 cgroups,運(yùn)維了解一下

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

收藏 人收藏

    評論

    相關(guān)推薦

    一文帶你搞懂Docker容器的核心基石Cgroups

    CgroupsLinux 系統(tǒng)內(nèi)核提供的一種機(jī)制,這種機(jī)制可以根據(jù)需求將一些列系統(tǒng)任務(wù)機(jī)器子任務(wù)整合或分離到按資源劃分登記的不同組內(nèi),從而為系統(tǒng)資源管理提供一個的框架。簡單地說,cgroups
    發(fā)表于 11-24 09:54 ?541次閱讀

    嵌入式Linux的啟動流程簡介

    目錄嵌入式 Linux 啟動流程簡介啟動流程Bootloader 簡介市面上可見的 bootloader入式 Linux 啟動流程簡介對于一
    發(fā)表于 11-04 09:04

    嵌入式Linux開發(fā)簡介

    目錄1、嵌入式Linux開發(fā)簡介1.1嵌入式系統(tǒng)1.2嵌入式操作系統(tǒng)簡介1.2.1嵌入式操作系統(tǒng)的發(fā)展1.2.2幾種代表性嵌入式操作系統(tǒng)1.3嵌入式Linux
    發(fā)表于 12-14 08:24

    Linux簡介

    Linux簡介Linux是一款優(yōu)秀的計算機(jī)操作系統(tǒng)LINUX是在UNIX基礎(chǔ)上開發(fā),具有UNIX全部功能。1991年,芬蘭赫爾辛基大學(xué)的學(xué)生Linus Torvalds開發(fā)了
    發(fā)表于 12-16 06:00

    Linux源代碼簡介

     Linux源代碼簡介歡迎進(jìn)入Linux的世界!隨著人們對開放源代碼軟件熱情的不斷高漲,Linux也受到了越來越多的關(guān)注。Linux
    發(fā)表于 02-10 13:54 ?78次下載

    Linux 2.6 中斷處理原理簡介

    Linux 2.6 中斷處理原理簡介 中斷描述符表(Interrupt Descriptor Table,IDT)是一個系統(tǒng)表,它與每一個中斷或異常向量相聯(lián)系,每一個向量在表中存放的是相應(yīng)的中斷或
    發(fā)表于 02-05 10:52 ?785次閱讀

    第1章 Linux簡介和安裝

    有關(guān)于linux簡介
    發(fā)表于 12-20 22:16 ?0次下載

    一文讀懂如何選取 Linux 容器鏡像

    空間組件的獨(dú)立管理,這是是通過使用 cgroups 和 命名空間 (Namespace)等資源及進(jìn)程隔離機(jī)制實(shí)現(xiàn)的。雖然 Solaris 和 BSD 也提供了與 Linux 容器技術(shù)類似的 抽象機(jī)制 ,但此份對比報告只聚焦于
    發(fā)表于 12-05 11:34 ?0次下載

    簡要介紹了操作系統(tǒng)虛擬化的概念,以及實(shí)現(xiàn)操作系統(tǒng)虛擬化的技術(shù)

    本文簡要介紹了操作系統(tǒng)級虛擬化的概念,并簡要闡述了實(shí)現(xiàn)操作系統(tǒng)虛擬化所用到的技術(shù)Namespacecgroups的原理及使用方法。
    的頭像 發(fā)表于 01-10 15:00 ?1.3w次閱讀
    簡要介紹了操作系統(tǒng)虛擬化的概念,以及實(shí)現(xiàn)操作系統(tǒng)虛擬化的技術(shù)

    什么是cgroups?有什么作用?

    cgroups (Control Groups) 是 Linux 內(nèi)核提供的一種機(jī)制,這種機(jī)制可以根據(jù)需求把一系列系統(tǒng)任務(wù)及其子任務(wù)整合(或分隔)到按資源劃分等級的不同組內(nèi),從而為系統(tǒng)資源管理提供一個統(tǒng)一的框架。
    的頭像 發(fā)表于 08-27 11:35 ?1.1w次閱讀

    ADM1266 Linux API和Python庫簡介

    ADM1266 Linux API和Python庫簡介
    發(fā)表于 05-17 10:50 ?6次下載
    ADM1266 <b class='flag-5'>Linux</b> API和Python庫<b class='flag-5'>簡介</b>

    簡述Docker的底層技術(shù)原理之Namespace

    在同一個網(wǎng)絡(luò)命令空間下,那么他們看到的網(wǎng)絡(luò)信息(網(wǎng)卡、IP、路由等)是一樣的,可以通過localhost的方式互相訪問。常用的有6種namespace,在Linux 內(nèi)核4.6之后又添加了Cgroup
    的頭像 發(fā)表于 07-21 09:55 ?1305次閱讀

    容器核心技術(shù)CgroupsNamespace

    而對于Docker等Linux容器項(xiàng)目來說,它們只需要在每個子系統(tǒng)下面,為每個容器創(chuàng)建一個控制組(即創(chuàng)建一個新目錄),然后在啟動容器進(jìn)程之后,把這個進(jìn)程的PID填寫到對應(yīng)控制組的tasks文件中就可以了。
    的頭像 發(fā)表于 03-28 09:47 ?867次閱讀

    Arch Linux RISC-V 端口及相關(guān)作品簡介

    Arch Linux RISC-V 端口及相關(guān)作品簡介 演講ppt分享
    發(fā)表于 07-17 16:34 ?5次下載

    ArmSoM-W3應(yīng)用開發(fā)之安裝docker

    使用docker2.Rockchip平臺系統(tǒng)運(yùn)行dockerDocker運(yùn)行對內(nèi)核配置有要求,需要kernel開啟cgroups、namespace、netfilter、overlayfs
    的頭像 發(fā)表于 11-20 10:05 ?339次閱讀
    ArmSoM-W3應(yīng)用開發(fā)之安裝docker