日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式分享
[導讀]這里主要簡介什么是Cgroup,使用場景以及其原理和實踐。

這里主要簡介什么是Cgroup,使用場景以及其原理和實踐。

一、什么是Cgroup,使用場景?

容器本質上是進程,既然是進程就會消耗掉系統(tǒng)資源,比如:CPU、內存、磁盤、網(wǎng)絡帶寬等,如果不加以限制,容器在某些情況下就會無限制地吃掉宿主機的系統(tǒng)資源,顯然這不是我們期望發(fā)生的,另外當我們的環(huán)境中運行了很多容器,且系統(tǒng)資源一定的情況下,我們有優(yōu)先保證主要容器應用的需求,如何既能夠解決此問題同時又能夠滿足我們的需求呢?答案就是:Linux Cgroup(全程Linux Control Group),在前面的文章中,介紹了namespace為容器這類進程提供了隔離,而Cgroup可以為容器這類進程提供資源使用上限,兩者黃金搭檔,共同為容器應用保駕護航。

二、Cgroup的原理和實踐

CPU的周期控制

Cgroup可以為容器進程使用的CPU、內存、磁盤、網(wǎng)絡帶寬資源進行限制,具體是如何實現(xiàn)的呢?接下來我們一起來實操下,在 Linux 中,Cgroups 給用戶暴露出來的操作接口是文件系統(tǒng),即它以文件和目錄的方式組織在操作系統(tǒng)的 /sys/fs/cgroup 這個路徑下,我們先去此目錄查看下

[root@k8s-master /]# cd sys/fs/cgroup/ [root@k8s-master cgroup]# ls blkio cpuacct cpuset freezer memory net_cls,net_prio perf_event rdma cpu cpu,cpuacct devices hugetlb net_cls net_prio pids systemd

可以看到在cgroup的這個目錄下存在很多子目錄,這些都是cgroup可以限制地資源種類,我們在進一步進入到CPU的子目錄查看下,里面有限制資源種類的詳細的限制地指標,比如

1、cpu.cfs_period_us:指定容器對CPU的使用多長時間重新做一次分配

2、cpu.cfs_quota_us:指在cpu.cfs_period_us周期內給分配多少時間給容器

這兩個指標需要一起配合使用來實現(xiàn)CPU的周期控制,我們先手動模擬容器創(chuàng)建的時候,如何完成利用cgroup來實現(xiàn)資源限制,以CPU周期控制為例子,先在/sys/fs/cgroup/cpu目錄下創(chuàng)建1個container_

test的目錄,如下所示我已經(jīng)創(chuàng)建好(紅色字體)。

[![復制代碼](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

[root@k8s-master cgroup]# cd cpu [root@k8s-master cpu]# ls cgroup.clone_children cpuacct.usage_all cpu.cfs_period_us docker cgroup.procs cpuacct.usage_percpu cpu.cfs_quota_us kubepods cgroup.sane_behavior cpuacct.usage_percpu_sys cpu.rt_period_us notify_on_release container_test cpuacct.usage_percpu_user cpu.rt_runtime_us release_agent cpuacct.stat cpuacct.usage_sys cpu.shares system.slice cpuacct.usage cpuacct.usage_user cpu.stat tasks

[![復制代碼](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

然后進入到此目錄下,ls查看下,這里出現(xiàn)了一個神奇的形象,此目錄下自動生成了很多CPU子系統(tǒng)控制的指標,這些指標我們并未進行新增,也就是說在/sys/fs/cgroup/cpu目錄下會給新建的目默認配置CPU子系統(tǒng)資源限制的指標

[![復制代碼](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

[root@k8s-master cpu]# cd container_test/ [root@k8s-master container_test]# ls cgroup.clone_children cpuacct.usage_percpu cpu.cfs_period_us cpu.stat cgroup.procs cpuacct.usage_percpu_sys cpu.cfs_quota_us notify_on_release cpuacct.stat cpuacct.usage_percpu_user cpu.rt_period_us tasks cpuacct.usage cpuacct.usage_sys cpu.rt_runtime_us cpuacct.usage_all cpuacct.usage_user cpu.shares

[![復制代碼](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

這些指標如何作用呢?為了體現(xiàn)資源的使用情況,我們先寫一個程序來模擬來吃掉系統(tǒng)資源的情況,然后再來查看指標

[root@k8s-master sh]# cat while.sh #!/bin/bash while : ; do : ; done &

[root@k8s-master sh]# sh while.sh

通過如上程序,寫了一個while無限循環(huán)的shell腳本,默認情況下,這個程序之后的進程會占據(jù)掉系統(tǒng)所剩集群的所有資源,可通過top命令查看下

[root@k8s-master sh]# ps -ef |grep while root 14975 1 97 20:29 pts/1 00:02:48 sh while.sh

如上圖所示,while循環(huán)的進程占據(jù)掉了96.3%的CPU資源,在實際的應用中若進程這樣無限制的使用資源,將會給操作系統(tǒng)帶來很大的負擔,那么如何控制進程資源的使用呢?回到我們之前創(chuàng)建在container_test目錄下

[root@k8s-master container_test]# cat cpu.cfs_quota_us -1 [root@k8s-master container_test]# cat cpu.cfs_period_us 100000

默認創(chuàng)建的目錄下cfs_quota_us 若為-1,則表示還未啟用quota,即還未實行資源限制,cfs_period_us默認為100000us=100ms=0.1s(秒),接下來我們向cpu.cfs_quota_us 輸入30ms=30000us,cfs_period_us值維持不變還是為100ms,在前面關于這2個概念有介紹,cpu.cfs_quota_us表示的是cfs_period_us的周期內,分配30/100的時間,即30%,接下來驗證下

[root@k8s-master container_test]# echo 30000 》 /sys/fs/cgroup/cpu/container_test/cpu.cfs_quota_us

[root@k8s-master container_test]# cat cpu.cfs_quota_us

30000

設置已完成,但是此時還不會立即生效,還需要將進程ID輸入到資源限制地task里

[root@k8s-master container_test]# echo 14975 》 /sys/fs/cgroup/cpu/container_test/tasks

接下來我們在通過top查看下資源使用情況,如下圖所示,可以看到CPU的資源使用上限由原來的96.3%已經(jīng)降到29.9%了,表明此while進程的CPU的資源使用上限已經(jīng)設置成功。

以上整個過程為手動設置模擬容器創(chuàng)建的過程中CPU份額控制的過程,實際上在容器創(chuàng)建的過程中,并不需要上面這般步驟,我們只需要在run容器的時候指定指標參數(shù)即可,如下所示

[root@k8s-master container_test]# docker run -it -d --cpu-period=100000 --cpu-quota=30000 nginx /bin/bash

上面的命令是后臺守護進程的方式運行了1個nginx的容器,且指定CPU的每隔100000us=100ms做一次分配,且每次分配給容器的時間為30ms,可以看到這個分配和前面手動分配是一致的,值得注意的是這里需要加上-d來創(chuàng)建容器,若不加上的話會進入到終端交互界面,一旦提出終端交互界面后,容器這個進程也將會退出,而我們希望容器進程保持后臺運行,因此需要加上-d,容器運行成功后,將會在docker目錄下新建一個以容器ID命名的目錄,這個目錄和前面手動創(chuàng)建的目錄以上,系統(tǒng)會默認配置資源限制的參數(shù),我們可以如下看下:

[root@k8s-master container_test]# docker run -it -d --cpu-period=100000 --cpu-quota=30000 nginx /bin/bash 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a

[![復制代碼](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

[root@k8s-master docker]# ls 01a0fd62d2110e54b0c3635b2897e7c18e6b78f026fa57b4214d7662dd3b38ba cpuacct.usage_sys 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a cpuacct.usage_user cgroup.clone_children cpu.cfs_period_us cgroup.procs cpu.cfs_quota_us cpuacct.stat cpu.rt_period_us cpuacct.usage cpu.rt_runtime_us cpuacct.usage_all cpu.shares cpuacct.usage_percpu cpu.stat cpuacct.usage_percpu_sys notify_on_release cpuacct.usage_percpu_user tasks

[![復制代碼](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “復制代碼”)

如上紅色部分為docker目錄下依據(jù)容器的名稱默認創(chuàng)建的目錄,我們進入到這個目錄,然后輸出下之前我們在創(chuàng)建的時候指定的cpu.cfs_quota_us和cfs_period_us值

[root@k8s-master 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a]# cat cpu.cfs_period_us 100000

[root@k8s-master 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a]# cat cpu.cfs_quota_us 30000

可以看到我們之前設置的值已經(jīng)生效了,也就是說這個nginx的容器最多可以支持使用到30%左右的CPU帶寬。

相類似的我們可以對容器獲取CPU的資源的優(yōu)先級進行設置,通過--cpu-share這個參數(shù),其指定的值并非是給容器具體的份額,其實是個權重,在需要對容器資源進行限制時才會生效,權重大的,可以優(yōu)先得到CPU的資源;另外還可以對使用的核數(shù)進行限制,針對多核的服務器,可以控制容器運行限定使用哪些CPU內核和內存節(jié)點,即使用-cpuset-cpus和-cpuset-mens參數(shù),比如:我們可以指定創(chuàng)建的容器只能用0、1、2三核。

三、總結

本文以CPU中周期控制限制某進程的CPU資源使用為例子,介紹了其手動設置參數(shù)和容器自動設置參數(shù),每新建1個容器,在/sys/fs/cgroup/cpu/docker目錄下都會自動以容器的ID為名字創(chuàng)建1個目錄,且在此目錄下支持對CPU、內存、網(wǎng)絡帶寬、磁盤的資源使用進行限制,而其限制地處理與CPU的周期控制是類似的,這里就未做過多介紹

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉