リアルタイムコンテキストでスレッドを実行する方法と、従来のタイムシェアリングスレッドとしてスレッドを実行する方法を尋ねる場合は、schedulers properly using sched_setscheduler
を設定するだけです。
時分割スレッドは、SCHED_OTHER
になりたい。リアルタイムシミュレータスレッドはSCHED_FIFO
またはSCHED_RR
になります。
Linuxでは、リアルタイム優先順位で実行するには、これを可能にするリソース制限(man 2 rlimit)が必要です。特に、 rlimitは、必要な最高の優先度に設定する必要があります。あるいは、アプリケーションをrootとして実行することもできます。 PAMとLinuxシステムでは、これは、典型的には、リアルタイムグループにリアルタイム優先度99までRTPRIO制限を許可する/etc/security/limits.conf
@realtime - rtprio 99
これに適切な行を追加することによって達成されます。次に、/etc/groups
にリアルタイムグループを追加し、ユーザーがグループに属していることを確認します。
(これは初めてのことですが、デッドマンのスイッチを優先度の高いリアルタイムスレッドにして、シミュレータが不調にならないようにすることもできますシステムを使用不能にします...高いCPU負荷をシミュレートしている場合は、CPUの負荷が大きくなり、再起動する必要がなくなります。
すべてのリアルタイムプロセスをリセットしないでくださいノーマルモードに? –
@Victor:以前はその機能を使用していませんでしたが、どれくらい頼りにしているのか分かりません。すべてを更新し、すべての優先順位を落とすのに使用されているようですが、そうした後の通常の優先順位のようなものにどのように戻っていくのか分かりません。 – andersoj
それでは、私は新たなフォークプロセスでは、このコマンドを呼んでいるとしましょう: はsched_setscheduler(GETPID()、SCHED_FIFO、&sp); これは正しく1ではなく0はsched_setschedulerリターンをexcecutedれないと私はかなり確信している理由は? sp_sched_priorityが正しく設定されている(sp.sched_priorityが98に設定されている) –