45

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

具体的な質問:

  • /procそのような情報を公開するファイルはありますか?
  • (または) ディストリビューションの Linux ヘッダーで明確に定義されていますか?
  • (または) この値を公開する Linux API (おそらく sysinfo) の C 関数はありますか?
4

5 に答える 5

39

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

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

これは、デフォルトの LinuxスケジューラであるCompletely Fair Schedulerが、固定のタイムスライスではなく、ある割合のプロセッサをプロセスに割り当てるためです。つまり、各プロセスのタイムスライスは現在の負荷に比例し、プロセスの優先度値によって重み付けされます

SCHED_RR を使用する特別な目的のリアルタイム プロセスの場合、デフォルトのタイムスライスは Linux カーネルRR_TIMESLICEinclude/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 間隔を取得するために使用できます。

于 2013-05-06T16:13:38.837 に答える
35

CFS (プロセスのデフォルトのスケジューラー) には固定のタイムスライスがなく、ターゲットのレイテンシー ( sysctl_sched_latency) と実行中のプロセスの数に応じて実行時に計算されます。タイムスライスが最小粒度 ( ) 未満になることはありませんsysctl_sched_min_granularity

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

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

于 2013-07-01T22:29:08.563 に答える
11

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

sched_latency_nsおよびファイル (これらsched_min_granularity_nsはデバッグ目的であり、カーネルが で構成されている場合にのみ表示されますCONFIG_SCHED_DEBUG) は、プロセスのスケジューリングに影響しSCHED_OTHERます。Alexey Shmalko の回答に記載されているように、CFS でのタイム スライスは固定されておらず (ユーザー空間にエクスポートされていません)、カーネル パラメーターやプロセスのナイス値などの要因に依存します。

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

于 2015-06-25T13:11:54.067 に答える
9

Linuxでのタイム スライスに関するこの質問と同じ疑問をグーグルで検索しようとしましSCHED_RRたが、こことカーネルのソース コードの両方から明確な回答が得られませんでした。

さらにチェックしたところ、キーポイントはRR_TIMESLICEデフォルトのタイムスライスがミリ秒ではなく jiffies であることがわかりました! そのため、設定内容に関係なく、 のデフォルトのタイム スライスSCHED_RRは常に 100 ミリ秒HZです。

/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

少し混乱していますが、これが理解に役立つことを願っています!

于 2016-11-28T05:48:12.777 に答える