特定のプロセスに割り当てられるクォンタムは異なる場合があります:
これは、デフォルトの Linux スケジューラである Completely Fair Scheduler が、固定のタイムスライスではなく、ある割合のプロセッサをプロセスに割り当てるためです。つまり、各プロセスのタイムスライスは現在の負荷に比例し、プロセスの優先度値によって重み付けされます。
SCHED_RR を使用する特殊な目的のリアルタイム プロセスの場合、デフォルトのタイムスライスは 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)
sched_rr_get_interval()
を使用できます 特定の SCHED_RR プロセスの SCHED_RR 間隔を取得します。
CFS (プロセスのデフォルトのスケジューラ) には固定のタイムスライスがなく、ターゲットのレイテンシ (sysctl_sched_latency
) に応じて実行時に計算されます。 ) および実行中のプロセスの数。タイムスライスが最小粒度 (sysctl_sched_min_granularity
) より小さくなることはありません ).
タイムスライスは常に sysctl_sched_min_granularity
の間になります および sysctl_sched_latency
、デフォルトはそれぞれ 0.75 ミリ秒と 6 ミリ秒で、kernel/sched/fair.c で定義されています。
ただし、実際のタイムスライスはユーザー空間にエクスポートされません。
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
で調整できます このファイルでは、クォンタムがミリ秒値として表され、デフォルトは 100 です。