2

私が理解していることから、スケジューラがスレッドでプリエンプションを実行するまでのデフォルトの時間は約 100 ミリ秒ですが、このクォンタは使用中のスレッド (コンテキストを切り替える必要があるスレッド) の数によってどのように変化しますか?

実行中の 200 のスレッドがあり、そのうちの 100 が 100 ミリ秒以下を使用していた場合、残りの 100 はあまり満足できません。完全なスレッド サークル時間のようなエンティティはありますか? 量子は魔女に基づいていますか?

Linux 3.2+ カーネルを念頭に置いています。

4

1 に答える 1

1

CFS アプローチは、各プロセスがプロセッサの時間の 1/n を受け取るというものです。ターゲット レイテンシがあります。これは、すべてのプロセスが何らかのコードを実行する機会を受け取る時間です。

これにアプローチするために、スケジューラはtimesliceと呼ばれる指定された時間プロセスを実行します。通常、タイムスライスは、実行中のプロセスの数で割ったターゲット レイテンシです。

しかし、実行中のプロセスの数が無限に近づくと、タイムスライスはゼロに近づきます。これは最終的に許容できないスイッチング コストになるため、CFS は各プロセスに割り当てられたタイムスライスに下限を課します。この下限は最小粒度 と呼ばれます。デフォルトでは 1 ミリ秒です。したがって、実行可能なプロセスの数が無限に近づいても、発生する切り替えコストに上限があることを確認するために、それぞれが少なくとも 1 ミリ秒間実行されます。

于 2013-07-01T21:56:03.000 に答える