解決的問題
多個容器共存時,如何分配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粒子系統詳解及程式設計實現
粒子系統的基本思想是 採用許多形狀簡單的微小粒子作為基本元素,用它們來表示不規則模糊物體。這些粒子都有各自的生命週期,在系統中都要經歷 產生 運動和生長 及 消亡 三個階段。粒子系統是乙個有 生命 的系統,因此不象傳統方法那樣只能生成瞬時靜態的景物畫面,而是可以產生一系列運動進化的畫面,這使得模擬動...