Linuxカーネルのタイムスライス(またはクォンタム)の値を探しています。
ありますか /proc
そのような情報を公開するファイル?
(または)ディストリビューションのLinuxヘッダーで明確に定義されていますか?
(または)この値を公開するLinux API(おそらくsysinfo)のC関数はありますか?
前もって感謝します。
特定のプロセスに割り当てられたクォンタム 異なる場合があります :
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間隔を取得できます。
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のタイムスライスは固定されておらず(ユーザー空間にエクスポートされません)、カーネルパラメーターとプロセスのNice値などの要因に依存します。
sched_rr_get_interval() は、プリエンプトまたはブロックされない限り、_SCHED_RR
_プロセスが取得することが保証されるクォンタムである固定値を返します。従来のLinuxでは、_SCHED_RR
_クォンタムは0.1秒です。 Linux 3.9以降、制限は_/proc/sys/kernel/sched_rr_timeslice_ms
_ファイルを介して 調整可能 です。この場合、クォンタムはデフォルトが100のミリ秒値として表されます。
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
少し混乱しています。これがあなたの理解に役立つことを願っています!
sysctl
は、実行時にカーネルパラメーターを読み書きするために使用されます。利用可能なパラメーターは、/proc/sys/
。また、Linux 3.9では、 SCHED_RR クォンタムを調整(および表示)するための新しいメカニズムが追加されました。/proc/sys/kernel/sched_rr_timeslice_msファイルは、クォンタムをミリ秒値として公開します。デフォルトは100です。このファイルは、クォンタムをデフォルト値にリセットします。あなたは試してみたいかもしれません:
sysctl kernel.sched_rr_timeslice_ms