Linux 3.10 CFSには「タイムスライス」はありますか?
私は混乱しています。計画設計 - CFS.txt具体的に定義:
CFS はナノ秒の粒度計算を使用し、 jiffies やその他の HZ の詳細に依存しません。したがって、CFSスケジューラには、以前のスケジューラと同じ「タイムスライス」という概念がなく、経験的な方法もありません。中央調整可能なパラメータは1つだけです(CONFIG_SCHED_DEBUGを有効にする必要があります)。
/proc/sys/kernel/sched_min_grinderity_ns
スケジューラを「デスクトップ」(すなわち、低レイテンシ)ワークロードから「サーバ」(すなわち、良好なバッチ)ワークロードに調整するために使用することができる。
ただし、マルチタスクスケジューラ調整ガイドでは、「タイムスライス」を計算するための2つの異なる式を提案します。 (実行可能なジョブの数によって異なります)たとえば、次のようになります。オープン水勢ガイド。
私は孤立したCPUでのみSCHED_FIFOスレッドを実行します。
答え1
CFS
「以前のスケジューラのような」時間はありません。
タイムCFS
スライスは、基本的に同じスレッドに割り当てられたCPU実行時間の連続遷移の間の期間です。これにより、2つのオプションが提供されます。
すべてのスレッドは
min_granularity_ns
少なくとも1回実行するのに十分な時間がありますlatency_ns
。だからあなたのtimeslice = scheduling period * (task's weight/total weight of tasks in the run queue)
受け入れるスレッドが多すぎる
latency_ns
ため、次に基づいて実行したいスレッドをより多く受け入れるには、タイムスライスが大きくなります。timeslice = number_of_running_tasks * sched_min_granularity_ns
だからCFS
代表する完全公平なスケジューラは、優先順位の低いスレッドを除外することなく、すべての人の時間を無差別に拡張します。