# 文獻閱讀 > [CPU bandwidth control for CFS](https://landley.net/kdocs/ols/2010/ols2010-pages-245-254.pdf) Linux CPU 排程器主要包含兩個最主要的排程類別: 1. SCHED_RT 2. SCHER_NORMAL(又稱 SCHER_OTHER) 當皆處於可執行狀態,SCHED_RT 的排程實體永遠優先執行。  > 大學伺服器可能的階層群組架構,可以為教授、學生、不同科系的 CPU bandwidth 進行分配 CPU bandwidth 的分配機制稱作 `share`,當 CPU 滿載時,所有可運行的排程實體將依對應的比例獲得 bandwidth,但值得注意的是,往往並非所有的排程實體皆可運行。 在這種情況下,CPU 資源更加充裕,所以實際上可消耗的 bandwidth 可能超過對應權重所允許的配額。 > **可將 shares 機制視為提供下限保障的配置方式。** 另外此種分配方式屬於比例式分配(proportional shares),基於權重所獲得的 bandwidth 是相對值,舉例來說此時在同一階層新增一個群組,且 `share` 為 2048,此時 cpu 比例將發生變化: * 教授:CPU 50% -> 25% * 學生:CPU 25% -> 12.5% * 系統任務:CPU 25% -> 12.5% * 新群組:CPU 50% 從單一 CPU 的角度出發,SCHED_RT 的頻寬規範使用 `cpu.rt_period_us` 與 `cpu.rt_runtime_us` 作為控制參數。前者為執行週期,後者為週期內允許的消耗量。如果有 N 個 cpu,則該群組在一個 `cpu.rt_period_us` 將可消耗 N 倍 `cpu.rt_runtime_us`。 > 這個機制的特色是允許在同個 root domain 中從其他 CPU 借用 `cpu.rt_runtime_us` SCHED_NORMAL 最一開始也使用上述的方式,但現已改採全域的方式去定義 `cpu.cfs_period_us` 與 `cpu.cfs_quota_us`,差別在於無論有多少 CPU,以單一群組來說在 `cpu.cfs_period_us` 僅能使用 `cpu.cfs_quota_us`。 :::info 結合這邊我的理解如下: 無論有幾個 CPU,以單一群組來說在 `cpu.cfs_period_us` 就永遠只能用 `cpu.cfs_quota_us` 的時間,而一個群組包含多個任務,單一任務可被執行時,消耗的是 global quota 切出來的 local quota。 結合上面的資訊,所以 global qouta 就是 `cpu.cfs_quota_us`? :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up