我正在尋找我的Linux內核的時間片(或量子)的價值。如何知道linux調度程序的時間片?
是否有/proc
文件公開這樣的信息?
(或)在我的發行版的Linux頭文件中是否定義良好? (或)是否有暴露此值的Linux API(可能是sysinfo)的C函數?
在此先感謝。
我正在尋找我的Linux內核的時間片(或量子)的價值。如何知道linux調度程序的時間片?
是否有/proc
文件公開這樣的信息?
(或)在我的發行版的Linux頭文件中是否定義良好? (或)是否有暴露此值的Linux API(可能是sysinfo)的C函數?
在此先感謝。
實時進程的默認Linux時間片在Linux內核中定義爲RR_TIMESLICE
,在include/linux/sched/rt.h中。
/*
* default timeslice is 100 msecs (used only for SCHED_RR tasks).
* Timeslices get refilled after they expire.
*/
#define RR_TIMESLICE (100 * HZ/1000)
注意實際的量子分配給特定進程may be different超過此值:
您可以調整「切片」,通過調整sched_latency_ns和 sched_min_granularity_ns,但請注意,「片「不是固定的 量子。另請注意,CFS搶佔決定是基於瞬時狀態 。一個任務可能已經收到完整(可變)的CPU時間「片段」,但只有當更多的 相應任務可用時纔會觸發搶佔,因此「切片」不是不間斷的CPU時間「可能期望它是..但它有點類似於 。
但是,您可以使用sched_rr_get_interval()
來獲取給定實時進程的SCHED_RR間隔。
CFS(這是進程的默認調度程序)沒有固定的時間片,它在運行時根據目標等待時間(sysctl_sched_latency
)和運行進程的數量計算。時間片永遠不會小於最小粒度(sysctl_sched_min_granularity
)。
Timeslice將始終在sysctl_sched_min_granularity
和sysctl_sched_latency
之間,默認分別爲0.75 ms和6 ms,並在kernel/sched/fair.c中定義。
但實際時間片不會導出到用戶空間。
這對於批處理過程是否也是如此? – user239558 2014-04-09 09:11:01
這對於在CFS調度程序下運行的每個進程都是如此(不是實時進程) – 2014-04-11 23:29:23
SCHED_OTHER
進程(即在(默認)非實時循環分時策略下運行的進程)和SCHED_RR
進程之間的接受答案存在一些混淆。
sched_latency_ns
和sched_min_granularity_ns
文件(僅用於調試目的,僅在內核配置爲CONFIG_SCHED_DEBUG
時纔可見)影響SCHED_OTHER
進程的調度。正如Alexey Shmalko的回答所指出的那樣,CFS下的時間片不是固定的(並且不會導出到用戶空間),並且將取決於內核參數和過程的良好值等因素。
sched_rr_get_interval()返回一個固定值,它是一個SCHED_RR
進程保證得到的量子,除非它被搶佔或阻塞。在傳統的Linux上,SCHED_RR
量是0.1秒。由於Linux 3.9,通過/proc/sys/kernel/sched_rr_timeslice_ms
文件限制爲adjustable,其中量程表示爲默認值爲100的毫秒值。
我在Google上搜索了關於Linux中SCHED_RR時間片的疑問。 但是我無法從這裏和內核源代碼中得到明確的答案。 經過進一步檢查,我發現的關鍵點是「RR_TIMESLICE」是jiffies的默認時間片,不是毫秒!所以,無論您配置了什麼HZ,SCHED_RR的默認時間片總是100ms。
同 「的/ proc/sys目錄/內核/ sched_rr_timeslice_ms」 的的jiffies值,其存儲其輸入值毫秒,但輸出!所以,當你的CONFIG_HZ = 100時,你會發現:
# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms
# cat /proc/sys/kernel/sched_rr_timeslice_ms
10
這有點困惑。 希望這可以幫助你理解它!
但是,似乎在Linux內核3.9中出現了'rt.h'。 – backlash 2013-05-06 20:39:12
** Linux kernel v3.9 **之前,'RR_TIMESLICE'的定義位於[include/linux/sched.h](http://lxr.free-electrons.com/source/include/linux/sched .H?v = 3.8#L1227)。在** Linux內核v3.4 **之前,該定義被命名爲'DEF_TIMESLICE'並位於[kernel/sched/sched.h]中(http://lxr.free-electrons.com/source/kernel/sched/ sched.h中?v = 3.3#L43)。 – 2013-05-06 20:45:14
請注意,此答案僅涉及與實時優先級RR – 2014-08-07 13:11:26