Linux FIFOでスレッドを作成するときにparam.sched_priorityを使用することをお勧めしますか?

Linux FIFOでスレッドを作成するときにparam.sched_priorityを使用することをお勧めしますか?

私の組み込みデバイスで私たちが使用するプロトコルの奇妙な動作を吸収し、時にはFIFOを使用してシリアルデバイスを介してデータを送信するのに時間がかかります。

私はLinuxがリアルタイムオペレーティングシステムではないと思います。なぜLinuxにはリアルタイムシミュレーション機能がありますか?pthread_setschedparam?キューにこの優先順位があると、他のプロセスがスレーブデバイスを検出できなくなります。

Linuxでparam.sched_priority = 40を使用することをお勧めしますか?このパラメータを調整してみましたが、現場で問題を再現するのは難しいです。

これはコードです

if (1)
{
    int policy;
    int r;
    struct sched_param param;

    policy = SCHED_FIFO;
    param.sched_priority = 40;
    r = pthread_setschedparam(cc_state->ser_thread, policy, &param);
    printf("%s: pthread_setschedparam %d", __func__, r);
}

答え1

Linuxのリアルタイムはシミュレーションではなく、スケジュールに影響を与えるシステムコールがあります。望むよりman sched(7)。あなたの質問で何をしたいのか、正確な問題が何であるかは不明です。値はsched_priority他のスレッドの優先順位にのみ関連します。たとえば、優先順位が0より大きいスレッドが1つしかない場合、優先順位が1または40であることは重要ではありません。値が高くても、スレッドに追加の「ブースト」は提供されません。スレッドに必要な相対優先順位を決定し、それに応じて優先順位値を割り当てる必要があります。

SCHED_FIFOスレッドに関連する時間はありません。スレッドは、SCHED_FIFO次のいずれかの条件が発生するまで実行され続けます。スレッドがI / Oを待ってブロックされているか、優先順位の高いスレッドが実行される準備ができているか、スレッドが自発的にプロセッサを放棄します。同じ優先順位のスレッドが複数ある場合は、これを考慮する必要があります。そうしないと、あるスレッドが別のスレッドのCPUを占有する可能性があります。マルチプロセッサコンピュータでは、複数のスレッドを独自のCPU上で同時に実行できます。

関連情報