1

現在のスレッドの優先度を変更する次のコードがあります。パラメータとして 90 を渡しましたが、スレッドが優先度 19 で実行されているようです。

  • ulimit -r が 99 に設定されていることを確認しました
  • プロセスはルートとして実行されています

プロセスが優先度 19 で実行されていることを確認するにはどうすればよいですか。次のコマンドを実行しました。ご覧のとおり、pri は 19 です。また、rtprio と pri の違いは何ですか? Redhat Enterprise Linux バージョン 6.3 の 2.6 カーネルを使用しています。これはリアルタイム Linux ではないため、if(pthread_setschedparam(pthread_self(), SCHED_RR, &param))スケジューラをSCHED_RR

ps -p 10834 -o pid,tid,class,rtprio,ni,pri,psr,pcpu,stat

PID   TID CLS RTPRIO  NI PRI PSR %CPU STAT
10834 10834 TS       -   0  19   9 99.9 R+
void changePriority(int tPriority)
{
    int  policy;
    struct sched_param param;

    pthread_getschedparam(pthread_self(), &policy, &param);
    param.sched_priority = tPriority;
    if(pthread_setschedparam(pthread_self(), SCHED_RR, &param))
            err_sys("error while setting thread priority to %d", tPriority);
}
4

1 に答える 1

1

PRI対を参照するとRTPRIO、 から逐語的にman ps:

プロセスの PRI 優先度。数値が大きいほど優先度が低くなります

...

RTPRIO リアルタイム優先度。


PRInice()システムコールまたはniceコマンドラインツールを使用して設定できます。PRIプロセスのメインスレッドの優先度です。Linux の場合、これはプロセスの非リアルタイム スレッドの優先度も設定します*。

からman 1 nice:

Niceness の範囲は -20 (最も有利なスケジューリング) から 19 (最も不利) です。

NicenessPRI同義語です。

*リアルタイム スレッドとはSCHED_OTHERSCHED_BATCHおよび とはSCHED_IDLE異なるスケジューリング ポリシーを持つスレッドです。SCHED_FIFOSCHED_RR


RTPRIOOPに記載されている機能を介してスケジューリングポリシーを設定できます。

スケジューリング ポリシーは、少なくとも 32 の異なるレベルを提供することが保証されています。と を使用sched_get_priority_minsched_get_priority_maxて、実装範囲を決定します。

于 2013-02-15T16:01:21.987 に答える