linux排程器(九) 排程器的配置引數

2021-06-18 10:35:53 字數 2656 閱讀 5261

排程器的配置引數

/proc/sys/kernel/sched_min_granularity_ns(4000000ns):

sysctl_sched_min_granularity

,表示程序最少執行時間,防止頻繁的切換,對於互動系統(如桌面),該值可以設定得較小,這樣可以保證互動得到更快的響應(見週期排程器的check_preempt_tick過程)

/proc/sys/kernel/

sched_latency_ns

(20000000ns):sysctl_sched_latency,表示乙個執行佇列所有程序執行一次的週期,當前這個與執行佇列的程序數有關,如果程序數超過

sched_nr_latency

(這個變數不能通過/proc設定,它是由(sysctl_sched_latency+ sysctl_sched_min_granularity-1)/sysctl_sched_min_granularity確定的),那麼排程週期就是sched_min_granularity_ns*執行佇列裡的程序數,與sysctl_sched_latency無關;否則佇列程序數小於

sched_nr_latency

,執行週期就是sysctl_sched_latency。顯然這個數越小,乙個執行佇列支援的sched_nr_latency越少,而且當sysctl_sched_min_granularity越小時能支援的sched_nr_latency越多,那麼每個程序在這個週期內能執行的時間也就越少,這也與上面sysctl_sched_min_granularity變數的討論一致。其實sched_nr_latency也可以當做我們cpu load的基準值,如果cpu的load大於這個值,那麼說明cpu不夠使用了

/proc/sys/kernel/sched_features(3183d=110001101111b):sysctl_sched_features,該變數表示排程器支援的特性,如gentle_fair_sleepers(平滑的補償睡眠程序),start_debit(新程序盡量的早排程),wakeup_preempt(是否wakeup的程序可以去搶占當前執行的程序)等,所有的features見核心sech_features.h檔案的定義

/proc/sys/kernel/sched_wakeup_granularity_ns(4000000ns):sysctl_sched_wakeup_granularity,該變數表示程序被喚醒後至少應該執行的時間的基數,它只是用來判斷某個程序是否應該搶占當前程序,並不代表它能夠執行的最小時間(sysctl_sched_min_granularity),如果這個數值越小,那麼發生搶占的概率也就越高(見wakeup_gran、wakeup_preempt_entity函式)

/proc/sys/kernel/sched_child_runs_first

(0):sysctl_sched_child_runs_first,該變數表示在建立子程序的時候是否讓子程序搶占父程序,即使父程序的vruntime小於子程序,這個會減少公平性,但是可以降低write_on_copy,具體要根據系統的應用情況來考量使用哪種方式(見task_fork_fair過程)

/proc/sys/kernel/sched_cfs_bandwidth_slice_us(5000us):sysctl_sched_cfs_bandwidth_slice

/proc/sys/kernel/

sched_rt_period_us

(1000000us):sysctl_sched_rt_period,該引數與下面的

sysctl_sched_rt_runtime

一起決定了實時程序在以sysctl_sched_rt_period為週期的時間內,實時程序最多能夠執行的總的時間不能超過sysctl_sched_rt_runtime(**見sched_rt_global_constraints)

/proc/sys/kernel/sched_rt_runtime_us

(950000us):sysctl_sched_rt_runtime,見上sysctl_sched_rt_period變數的解釋

/proc/sys/kernel/sched_compat_yield

(0):sysctl_sched_compat_yield,該引數可以讓sched_yield()系統呼叫更加有效,讓它使用更少的cpu,對於那些依賴sched_yield來獲得更好效能的應用可以考慮設定它為1

/proc/sys/kernel/sched_migration_cost(500000ns):sysctl_sched_migration_cost該變數用來判斷乙個程序是否還是hot,如果程序的執行時間(now - p->se.exec_start)小於它,那麼核心認為它的code還在cache裡,所以該程序還是hot,那麼在遷移的時候就不會考慮它

/proc/sys/kernel/sched_nr_migrate(32):sysctl_sched_nr_migrate,在多cpu情況下進行負載均衡時,一次最多移動多少個程序到另乙個cpu上

/proc/sys/kernel/sched_tunable_scaling(1):sysctl_sched_tunable_scaling,當核心試圖調整sched_min_granularity,sched_latency和sched_wakeup_granularity這三個值的時候所使用的更新方法,0為不調整,1為按照cpu個數以2為底的對數值進行調整,2為按照cpu的個數進行線性比例的調整

linux排程器(四) 主排程器與CFS

當核心從系統呼叫返回,或者從中斷處理程式返回,核心都會檢查當前程序是否設定了tif need resched標誌 或者程序主動放棄cpu時 sched yield,sleep或者收到sigstop,sigttop訊號 都會進入主排程器。同樣的我們先看一下主排程的框架部分,該部分就是sched.c s...

MIPS處理器下Linux排程器的排程時機

1.linux的排程器,n多書有介紹,但是這些介紹基本都是給個大致概念,具體還要看 這部分的實現,不同的核心版本有一定的差異,我看的核心版本是2.6.21.7。2.關於排程器,我的理解,無外乎3點 什麼時候去檢查是否需要排程 排程時機 如何選擇應該執行的任務 排程策略 怎樣做任務的切換。任務的切換,...

Yarn 配置容量排程器

目錄 佇列比例 修改capacity scheduler.xml配置檔案 將新的配置同步到集群所有節點,重啟yarn 提交任務 檢視任務 yarn site.xml root prod 生產環境 40 dev 開發環境 60 mapreduce mr開發 50 spark spark開發 50 ya...