web-dev-qa-db-ja.com

Linuxスケジューラのタイムスライスを知る方法は?

Linuxカーネルのタイムスライス(またはクォンタム)の値を探しています。

ありますか /procそのような情報を公開するファイル?

(または)ディストリビューションのLinuxヘッダーで明確に定義されていますか?

(または)この値を公開するLinux API(おそらくsysinfo)のC関数はありますか?

前もって感謝します。

36
backlash

特定のプロセスに割り当てられたクォンタム 異なる場合があります

sched_latency_nsおよびsched_min_granularity_nsを調整することで「スライス」を調整できますが、その「スライス」は固定量子ではありません。また、CFSプリエンプションの決定は瞬間的な状態に基づいていることに注意してください。タスクはCPU時間の完全な(可変の)「スライス」を受け取った可能性がありますが、より適切なタスクが利用可能な場合にのみプリエンプションがトリガーされるため、「スライス」は予想される「最大中断なしCPU時間」ではありませんに..しかし、それはやや似ています。

SCHED_RRを使用する特殊目的のリアルタイムプロセスの場合、デフォルトのタイムスライスは、Linuxカーネルで include/linux/sched/rt.h の_RR_TIMESLICE_として定義されます。

_/*
 * 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間隔を取得できます。

29
Vilhelm Gray

CFS(プロセスのデフォルトスケジューラ)には固定タイムスライスがありません。ターゲットレイテンシ(sysctl_sched_latency)および実行中のプロセスの数。タイムスライスは最小粒度(sysctl_sched_min_granularity)。

タイムスライスは常にsysctl_sched_min_granularityおよびsysctl_sched_latency。デフォルトはそれぞれ0.75ミリ秒と6ミリ秒で、 kernel/sched/fair.c で定義されています。

ただし、実際のタイムスライスはユーザー空間にエクスポートされません。

27
Alexey Shmalko

_SCHED_OTHER_プロセス(つまり、(デフォルト)非リアルタイムラウンドロビンタイムシェアリングポリシーの下で動作するプロセス)と_SCHED_RR_プロセスの間で受け入れられた答えには多少の混乱があります。

_sched_latency_ns_および_sched_min_granularity_ns_ファイル(デバッグ用であり、カーネルが_CONFIG_SCHED_DEBUG_で構成されている場合にのみ表示されます)は、_SCHED_OTHER_プロセスのスケジューリングに影響します。 Alexey Shmalkoの回答で述べたように、CFSのタイムスライスは固定されておらず(ユーザー空間にエクスポートされません)、カーネルパラメーターとプロセスのNice値などの要因に依存します。

sched_rr_get_interval() は、プリエンプトまたはブロックされない限り、_SCHED_RR_プロセスが取得することが保証されるクォンタムである固定値を返します。従来のLinuxでは、_SCHED_RR_クォンタムは0.1秒です。 Linux 3.9以降、制限は_/proc/sys/kernel/sched_rr_timeslice_ms_ファイルを介して 調整可能 です。この場合、クォンタムはデフォルトが100のミリ秒値として表されます。

9
mtk

LinuxのSCHED_RRのタイムスライスと同じ疑問について、このチケットをGoogleで検索しました。しかし、こことカーネルソースコードの両方から明確な答えを得ることができません。さらに確認した結果、キーポイントは「RR_TIMESLICE」がjiffiesのデフォルトのタイムスライスであるであり、ミリ秒ではありません。したがって、SCHED_RRのデフォルトのタイムスライスは、設定したHZに関係なく、常に100ミリ秒です。

「/ proc/sys/kernel/sched_rr_timeslice_ms」の値と同じです。値はミリ秒で入力しますが、jiffies!で保存および出力します。したがって、CONFIG_HZ = 100の場合、次のことがわかります。

# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms
# cat /proc/sys/kernel/sched_rr_timeslice_ms
10

少し混乱しています。これがあなたの理解に役立つことを願っています!

4
Shile

sysctlは、実行時にカーネルパラメーターを読み書きするために使用されます。利用可能なパラメーターは、/proc/sys/。また、Linux 3.9では、 SCHED_RR クォンタムを調整(および表示)するための新しいメカニズムが追加されました。/proc/sys/kernel/sched_rr_timeslice_msファイルは、クォンタムをミリ秒値として公開します。デフォルトは100です。このファイルは、クォンタムをデフォルト値にリセットします。あなたは試してみたいかもしれません:

sysctl kernel.sched_rr_timeslice_ms
1
Dennis