システム全体のプロセススケジューリングポリシーを変更する方法はありますか?たとえば、すべてのプロセスに対してデフォルトの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
...
テスト目的にのみ注意して使用してください。もちろんフォーク爆弾の発射を避け、できるだけ高い優先順位を指定してください!