CFSを理解したと思いました...
スケジュールされた待ち時間は、実行可能な各プロセスがプロセッサの対応する共有を受信することを期待する時間です。 Linuxカーネルコードは次のものを提供します。
(デフォルト:6ms *(1 + ilog(ncpus))、単位:ナノ秒)
1つのCPUマシンの場合は6msかかり、4コアマシンの場合は18msかかります。 Rpi Zero ワンコアとRpi 4クアッドコアで確認してみるとそういうことです。ただし、クアッドコアを搭載したPi 4は、ゼロよりも強力なシステムです。確かに、予約待ち時間が3倍ではなく、より小さくなると予想できますか?どちらの場合も、sched_min_capsularityを見て、両方とも8つのタスクを処理し、0.75ミリ秒と2.25ミリ秒の固定時間フラグメントに置き換えられます。私はこれのために明らかに混乱しています...
答え1
あなたは間違いなく計画された遅延が3倍大きいよりも3倍小さくなると予想します。
これが_NONE、_LOGで「修正」された理由です。または_LINEAR。
SMPの概念を考えると分ける、CPUを追加する代わりに。これにより、全体的なパフォーマンスを得ることはできませんが、まだより良い応答性を得ることができます。
この短い関数(「ピリオド」)は両方を使用します。最小粒度そして隠れる。再フォーマットしました。私はあなたがCを理解するためにCについて何も知る必要はないと思います。できないヒント:
static u64 __sched_period(unsigned long nr_running)
{
if (unlikely(nr_running > sched_nr_latency))
return nr_running * sysctl_sched_min_granularity;
else
return sysctl_sched_latency;
}
最後に、物事よりも単語に関する詳細情報:ウィキペディア、CFS:
...これ原子単位個々のプロセスのCPUシェアを割り当てます(したがって以前の時間フラグメントの概念)
それ追加残っている単語は次のとおりですkernel/sched/fair.c
。
* (to see the precise effective timeslice length of your workload,
* run vmstat and monitor the context-switches (cs) field)
値6ミリ秒、0.75ミリ秒(=1/8) そして24ミリ秒(= ncpus = 8用に変更された_LOG)できるIMHO、それを与える、つまり時間の一部として解釈してください。これをヘルツ(Hertz)に換算すると、Kconfig.hz
100HZ(サーバー)から1000HZ(高応答)の範囲が一致します。
1/.00075 s
1333.3 Hz
1秒に1,000以上の最小単位「スライス」を収容できます。
1/.006 s
166.6 Hz
166個の未変更の待ち時間「スライス」は、100HZ「サーバー」と250HZ「損傷」の間にあります。
1/.024 s
41.6 Hz
8コアにログ修正を適用すると、各コアはコンテキスト遷移を4倍に減らすことができますが、「有効レイテンシ」は依然として低いです。
理髪店と比較したとき、新しい顧客が10分以上待つ必要がないようにしたいと思います。これはあなたがしなければならないことを意味します捕まえる10分ごとに現在の顧客が座っています。少なくとも挨拶時間には。
座席が4つあり、理髪店がある店舗では、その10分を短縮できます。 4人の理髪師がそれぞれキャビネットで働き、40分ごとに止まって見てください。新規顧客は以前と同じように平均10分待つだけです。
これは待ち時間の完全な「線形」修正です。Nを掛ける。
しかし、最悪のシナリオでは、4人とも同時に新しい顧客をチェックインします。なぜなら同時に始まるからです。この時間以降にお客様が入場すると、サービスを受けるまで39分待つ必要があります。
したがって、トレードオフにNを掛ける代わりにログ(N)へ。
1 + ilog(N)
これは 1+ilog(4) = 1+2 になるので、4 人の理髪師は理髪時間を 10 分から 30 分 (40 分ではなく) に延長できます。一緒に10分の遅延を達成します。
4倍から16に、50分にだけ延長されます。 「修正」は代数的で、次のとおりです+ 1
。