システム全体のスケジュールの変更

システム全体のスケジュールの変更

システム全体のプロセススケジューリングポリシーを変更する方法はありますか?たとえば、すべてのプロセスに対してデフォルトのSCHED_OTHERをSCHED_RRに変更したいとします。このコマンドはchrtプロセスで動作します。システム全体の設定を変更したいです。これについて考えていますか?

修正する:

具体的には、別のポリシーを使用していくつかのコマンドを実行したいのですが、tar問題はプログラムを開始する前にプロセスIDを知らないことです。

答え1

chrtは実行中のプロセスの予約優先順位を変更するだけでなく、実際にpidが必要な場合は、特定の予約ポリシーに従って新しいプロセスを開始できます。

   chrt [options] priority command argument ...

   chrt [options] -p [priority] PID

説明する

   chrt sets or retrieves the real-time scheduling attributes of an
   existing PID, or runs command with the given attributes.

したがって、SCHED_RR rtprio 10を最初から実行するtarを直接起動するには

chrt -r 10 tar blahblahraroptions

注釈に記載されているように、実行中のすべてのプロセスが同じ優先順位で同じスケジューリングポリシーを実行することが妥当でない場合、これを達成する方法はありません。
ただし、必要なスケジューリングポリシー/優先順位に応じて、すべてのユーザーのプロセスを自動的に開始できます。これは(基本的に)子プロセスによって継承されるからです。

1/ bashプロセスをフォークし、SCHED_FIFO /優先順位10を予約します。

$ chrt -f 10 bash

2/これから始まるすべてのプロセスは、chrtを使用せずに同じ方法でスケジュールされます。

/proc/2074 $ ps -eHo pid,ppid,tid,class,rtprio,ni,pri,comm
...
4168  2074  4168 FF      10   -  50         bash
4192  4168  4192 FF      10   -  50           ps
...

テスト目的にのみ注意して使用してください。もちろんフォーク爆弾の発射を避け、できるだけ高い優先順位を指定してください!

関連情報