cpu.cfs_期間_usでより長いまたはより短い期間を使用すると、どのような利点がありますか?

cpu.cfs_期間_usでより長いまたはより短い期間を使用すると、どのような利点がありますか?

各プロセスのCPU時間を制限したい場合は、タスクをcgroups実行する2つのパラメータ、およびを渡すことcpu.cfs_period_usができますcpu.cfs_quota_us

パラメータに関する情報は次のとおりです。:

  • cpu.cfs_期間_us:帯域幅決定に使用される各スケジューラ期間の期間(マイクロ秒)。デフォルトは100000usまたは100msです。期間が長ければスループットは向上しますが、スケジューラは CPU 集約的なワークロードをより長く維持できるため、待ち時間が長くなります。より短い期間の場合はその逆です。これは、CFSスケジューラによってスケジュールされた非RTジョブにのみ影響します。
  • cpu.cfs_quota_us:現在のグループの各cfs_period_us期間中に実行が許可される最大時間(マイクロ秒)。たとえば、CPU_time_usを半分に設定すると、cgroupはその時間の50%しか最大操作を実行できません。これは、システム内のすべてのCPUの合計時間を表します。したがって、たとえば2つのCPUを完全に活用するには、この値をcfs_period_us値の2倍に設定する必要があります。

プロセスをCPUコア1つに制限したいとしましょう。これは次の方法で行うことができます。

cpu.cfs_quota_us   1.000.000
cpu.cfs_period_us  1.000.000

そして

cpu.cfs_quota_us   100.000
cpu.cfs_period_us  100.000

そして

cpu.cfs_quota_us   10.000
cpu.cfs_period_us  10.000

これら3つのオプションの違いは何ですか? Firefoxプロセスがあるとしましょう。cpu.cfs_period_usもっと長いか短いのは何で、その理由は何ですか?

ベストアンサー1

引用文が示すように、数字が小さいほど待ち時間が短くなります。プロセスは予約されるまで長く待つ必要はありません。各プロセスはすぐに順番になります。ただし、スケジュールを変更するとコストが高くなります。時間が経過して別のプロセスを実行する準備が整うたびに、スケジュールが変更されます。

スケジュールの変更には、スタック内のすべてのレジスタの保存、スタックポインタのジョブ制御ブロックへの保存、ジョブ制御ブロックの切り替え、仮想ページテーブルの一部の無効化/アクティブ化、スタックポインタの再ロード、およびレジスタの復元が含まれます。さらに、より多くのキャッシュミスが発生する可能性があります。つまり、状況が遅くなります。

長期実行非対話型ジョブの場合、スケジューラー期間が長いほど良いです。バッチスケジューラは、標準の対話型スケジューラよりも予約期間が長く、優先順位が低い。

おすすめ記事