CFS (což je výchozí plánovač pro procesy) nemá žádný pevný časový úsek, počítá se za běhu v závislosti na cílené latenci (sysctl_sched_latency
) a počet běžících procesů. Časový řez nemůže být nikdy menší než minimální zrnitost (sysctl_sched_min_granularity
).
Časový interval bude vždy mezi sysctl_sched_min_granularity
a sysctl_sched_latency
, které jsou výchozí na 0,75 ms a 6 ms a jsou definovány v kernel/sched/fair.c.
Skutečný časový úsek však není exportován do uživatelského prostoru.
Množství přidělené pro konkrétní proces se může lišit:
"Slice" můžete vyladit úpravou sched_latency_ns asched_min_granularity_ns , ale všimněte si, že "výřez" není fixní kvantum. Všimněte si také, že rozhodnutí o preempci CFS jsou založena na okamžitém stavu. Úloha mohla obdržet celý (proměnný) „výsek“ času CPU, ale preempce bude spuštěna pouze v případě, že je k dispozici úkol, který si zaslouží více, takže „výřez“ není „maximálně nepřerušený čas CPU“, který byste mohli očekávat. .. ale je to trochu podobné.
Je to proto, že úplně spravedlivý plánovač, výchozí plánovač Linuxu, přiřazuje procesu spíše část procesoru než pevný časový úsek. To znamená, že časový úsek pro každý proces je úměrný aktuálnímu zatížení a vážený hodnotou priority procesu.
Pro speciální procesy v reálném čase, které používají SCHED_RR, je výchozí časový úsek v jádře Linuxu definován jako RR_TIMESLICE
v 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)
Můžete použít sched_rr_get_interval()
abyste získali interval SCHED_RR pro konkrétní proces SCHED_RR.