cgroup cpu 子系統詳解

2022-07-18 06:54:09 字數 1257 閱讀 9293

解決的問題

多個容器共存時,如何分配cpu資源。也就是如何限制單個容器的使用上限,防止對同宿主機上其他容器產生干擾。

方法

有兩個方法,乙個是硬限,乙個是軟限。

硬限就是劃分乙個上限,容器一旦達到此上限,立刻throttle(壓制),不再給與cpu資源;

軟限相對硬限來說沒有這麼強勢,即便沒有cpu資源,也只會等待,不會throttle。

詳細介紹

一:cpu子系統下的檔案

cpu.cfs_period_us

執行檢測的週期,預設是100ms

cpu.cfs_quota_us

在乙個檢測週期內,容器能使用cpu的最大時間,該值就是硬限,預設是-1,即不設定硬限

cpu.shares

顧名思義,shares=分享。它的工作原理非常類似於程序的nice值。shares就代表軟限。

cpu.state

容器的狀態:一共執行了多少個週期;一共被throttle了多少次;一共被throttle了多少時間

cpu.rt_period_us

執行檢測的週期,預設是1s

cpu.rt_runtime_us

在乙個檢測週期內,能使用的cpu最大時間,只作用於rt任務

二:硬限與軟限

硬限這樣做對同宿主機的其他容器來說比較安全,因為一旦超過硬限,容器就無法執行,只能等待下乙個period;對本容器來說,比較危險。

容器的核數=cpu.cfs_quota_us / cpu.cfs_period_us;

軟限cpu.cfs_quota_us =-1 ,僅設定cpu.shares,即為軟限,通過軟限可以提公升整機的cpu利用率。因為只有當cpu繁忙時,shares才會起作用。並且shares的作用和程序nice值極為相似,都是影響紅黑樹上節點右移的速度,來間接控制任務獲取cpu時間。

三:bandwidth

通過下面這個可以很直觀的看出cfs頻寬控制與rt頻寬控制的區別rt的頻寬控制相對cfs來說,比較簡單:當乙個cpu上的rt任務需要執行時,先看下自己還有沒有剩餘rt.runtime,假如沒了,就向其他cpu去借,即balance_rt_runtime,假如其他cpu上也沒有可用時間,那就throttle。這裡需要開啟核心開關:echo  rt_runtime_share > /sys/kernel/debug/sched_feature  ;

當此開關關閉時,就無法從其他cpu上借時間了。

LINUX輸入子系統詳解

輸入子系統 為何引入 以前我們寫一些輸入裝置 鍵盤滑鼠等 的驅動都是採用字元裝置 混雜裝置處理的。為了實現對分散的 不同類別的輸入裝置進行統一驅動,出現了輸入子系統 自己寫驅動程式時需要 1 major 2 file operation 3 register chrdev 4 入口函式 5 出口函式...

Linux裝置模型之input子系統詳解 三

十 evdev裝置結點的open 操作 對主裝置號為input major的裝置節點進行操作,會將操作集轉換成handler的操作集.在evdev中,這個操作集就是evdev fops.對應的open函式如下示 static int evdev open struct inode inode,str...

OpenGL粒子系統詳解及程式設計實現

粒子系統的基本思想是 採用許多形狀簡單的微小粒子作為基本元素,用它們來表示不規則模糊物體。這些粒子都有各自的生命週期,在系統中都要經歷 產生 運動和生長 及 消亡 三個階段。粒子系統是乙個有 生命 的系統,因此不象傳統方法那樣只能生成瞬時靜態的景物畫面,而是可以產生一系列運動進化的畫面,這使得模擬動...