CFS (プロセスのデフォルト スケジューラ) には固定のタイムスライスがなく、対象のレイテンシ (sysctl_sched_latency
) に応じて実行時に計算されます。 ) および実行中のプロセスの数。タイムスライスが最小粒度 (sysctl_sched_min_granularity
) より小さくなることはありません ).
タイムスライスは常に sysctl_sched_min_granularity
の間になります そして sysctl_sched_latency
、デフォルトはそれぞれ 0.75 ミリ秒と 6 ミリ秒で、kernel/sched/fair.c で定義されています。
ただし、実際のタイムスライスはユーザー空間にエクスポートされません。
特定のプロセスに割り当てられるクォンタムは異なる場合があります:
<ブロック引用>sched_latency_ns を調整することで「スライス」を調整できます およびsched_min_granularity_ns ただし、「スライス」は固定量ではないことに注意してください。また、CFS プリエンプションの決定は、瞬間的な状態に基づいていることに注意してください。タスクは CPU 時間の完全な (可変の) 「スライス」を受け取った可能性がありますが、より価値のあるタスクが利用可能な場合にのみプリエンプションがトリガーされます。 ..しかし、多少似ています。
これは、デフォルトの 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 間隔を取得します。