RHEL6 から RHEL7 までのカーネルの振る舞いを研究しながら、我々は次の事実を発見した。RHEL6カーネルパラメータの説明:
> kernel.sched_min_grinderity_ns
sched_min_capsularity_ns はスケジューラ期間の初期値です。スケジューラ期間は、実行可能なすべてのジョブが少なくとも1回実行されることを許可される期間です。 CFSにはタイムスライスの概念はありませんが、期間を最初のタイムブロックとして考えてから、それをタイムスライスに均等に分割できます。各時間フラグメントは実行可能なプロセスに対応します。この調整可能項目は初期値のみを指定します。実行可能ジョブが多すぎると、スケジューラは実行時間が短すぎないように期間を長くします。
/usr/share/doc/kernel-doc-2.6.32/Documentation/scheduler/sched-design-CFS.txt
>kernel.sched_latency_ns
CPU 集約タスクのターゲットプリエンプション遅延を設定します。
パラメータの説明はkernel.sched_min_granularity_ns
私たちを混乱させます。このパラメータについての私たちの理解は、実行可能な各タスクがCPUで実行できる最小時間(つまり、実行可能な各タスクに提供されるタイムスライス)であることです。の場合、kernel.sched_latency_ns
実行可能なすべてのジョブが1回以上実行される期間。
私たちは他の多くの記事から理解を得ました。これそしてそれ。一部のリンクは異なるカーネルバージョンを参照できますが、パラメータの一般的な説明は変更しないでください。
ベストアンサー1
同意する。 RHEL6のマニュアルは、参照しているマニュアルと一致しません。無視してください。
https://elixir.bootlin.com/linux/v2.6.32/source/Documentation/scheduler/sched-design-CFS.txt#L95
したがって、CFSスケジューラには、以前のスケジューラと同じ「タイムスライス」という概念がなく、経験的な方法もありません。中央調整可能なパラメータは1つだけです(CONFIG_SCHED_DEBUGを有効にする必要があります)。
/proc/sys/kernel/sched_min_granularity_ns
スケジューラを「デスクトップ」(すなわち、低レイテンシ)ワークロードから「サーバ」(すなわち、良好なバッチ)ワークロードに調整するために使用することができる。デフォルトはデスクトップワークロードに適した設定です。
同じバージョンでは、この値のデフォルト値は1msです。これはタイムスライスの最小値です(以前のCONFIG_HZ = 1000に相当)。
https://elixir.bootlin.com/linux/v2.6.32/source/kernel/sched_fair.c#L40
「すべての実行可能ジョブが少なくとも1回実行されることを許可する必要がある期間」という合理的なデフォルトでは、1msは小さすぎます。
/*
* Targeted preemption latency for CPU-bound tasks:
* (default: 5ms * (1 + ilog(ncpus)), units: nanoseconds)
*
* NOTE: this latency value is not the same as the concept of
* 'timeslice length' - timeslices in CFS are of variable length
* and have no persistent notion like in traditional, time-slice
* based scheduling concepts.
*
* (to see the precise effective timeslice length of your workload,
* run vmstat and monitor the context-switches (cs) field)
*/
unsigned int sysctl_sched_latency = 5000000ULL;
/*
* Minimal preemption granularity for CPU-bound tasks:
* (default: 1 msec * (1 + ilog(ncpus)), units: nanoseconds)
*/
unsigned int sysctl_sched_min_granularity = 1000000ULL;