6

私は実験を行ってSCHED_FIFOいますが、予期しない動作が見られます。私が使用しているサーバーには、ハイパースレッディングが無効になっている12個のコアがあります。設定可能なすべての割り込みは、CPU0で実行するように設定されています。

私のプログラムは、CPUアフィニティをコア0に設定してスケジューリングポリシーを変更せずに、pthreadsライブラリを使用して優先度の低いタスクのスレッドを作成し始めます。次に、親スレッドはCPUアフィニティをコア3に設定し、独自のスケジューリングポリシーをpid0と優先度でSCHED_FIFO使用するように設定します。 sched_setscheduler()1その後、非ブロッキングループの実行を開始します。

プログラム自体はうまく動作します。ただし、プログラムの実行中にもう一度サーバーにログインしようとすると、プログラムを停止するまで端末が応答しなくなります。これは、スケジューラがリアルタイムプロセスと同じコアで他のプロセスを実行しようとしているようなものです。

  1. 私は何が欠けていますか?
  2. スケジューラーは、リアルタイムプロセスを実行しているコアで他のプロセスを実行しようとしますか?もしそうなら、これを防ぐ方法はありますか?
  3. sched_setscheduler()親でスケジュールポリシーを設定すると、以前に作成された子の動作が変更されますか?

前もって感謝します。

4

1 に答える 1

6

sched_setschedulerスレッドではなく、プロセスのスケジューラーを設定します。見る:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setscheduler.html

スレッドのスケジューラーを設定する場合は、作成する前に、新しいスレッドの属性オブジェクトでpthread_attr_setschedpolicyand関数を使用する必要があります。pthread_attr_setschedparam

Linuxがこれらの要件をどの程度満たしているかはわかりませんが、少なくともコードが仕様に合っていることを確認してから、必要に応じて調整する必要があります...

于 2012-05-12T12:19:54.700 に答える