3 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
分配給特定過(guò)程的數(shù)量可能有所不同:
您可以通過(guò)調(diào)整sched_latency_ns和 sched_min_granularity_ns來(lái)調(diào)整“切片” ,但請(qǐng)注意,“切片”不是固定的量。還要注意,CFS搶占決策是基于瞬時(shí)狀態(tài)的。一個(gè)任務(wù)可能已經(jīng)收到了完整的(可變)CPU時(shí)間“分片”,但是僅當(dāng)有更多應(yīng)得的任務(wù)可用時(shí),搶占才會(huì)被觸發(fā),因此“分片”不是您期望的“最大不間斷CPU時(shí)間”會(huì)..但是有點(diǎn)相似。
對(duì)于使用SCHED_RR專用實(shí)時(shí)進(jìn)程,默認(rèn)的時(shí)間片是在Linux內(nèi)核定義為RR_TIMESLICE在在include / linux /排程/ 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)
您可以sched_rr_get_interval()用來(lái)獲取特定SCHED_RR進(jìn)程的SCHED_RR間隔。

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
CFS(進(jìn)程的默認(rèn)調(diào)度程序)沒(méi)有固定的時(shí)間片,它是在運(yùn)行時(shí)根據(jù)目標(biāo)等待時(shí)間(sysctl_sched_latency)和正在運(yùn)行的進(jìn)程數(shù)進(jìn)行計(jì)算的。時(shí)間片永遠(yuǎn)不能小于最小粒度(sysctl_sched_min_granularity)。
Timeslice將始終在sysctl_sched_min_granularity和之間sysctl_sched_latency,默認(rèn)值分別為0.75 ms和6 ms,并在kernel / sched / fair.c中定義。
但是實(shí)際的時(shí)間片不會(huì)導(dǎo)出到用戶空間。

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
SCHED_OTHER進(jìn)程(即在(默認(rèn))非實(shí)時(shí)循環(huán)分時(shí)策略下運(yùn)行的SCHED_RR進(jìn)程)與進(jìn)程之間的可接受答案存在一些混淆。
的sched_latency_ns和sched_min_granularity_ns文件(其旨在用于調(diào)試目的,可見僅在內(nèi)核配置有CONFIG_SCHED_DEBUG)影響的調(diào)度SCHED_OTHER過(guò)程。正如Alexey Shmalko的回答所指出的那樣,CFS下的時(shí)間片是不固定的(并且不會(huì)導(dǎo)出到用戶空間),并且將取決于內(nèi)核參數(shù)和諸如進(jìn)程的良好值之類的因素。
sched_rr_get_interval()返回一個(gè)固定值,該值SCHED_RR是保證進(jìn)程獲得的數(shù)量,除非搶占或阻塞。在傳統(tǒng)的Linux上,時(shí)間SCHED_RR間隔為0.1秒。從Linux 3.9開始,該限制可通過(guò)/proc/sys/kernel/sched_rr_timeslice_ms文件進(jìn)行調(diào)整,該文件的量子表示為毫秒值,默認(rèn)值為100。
添加回答
舉報(bào)