組み込みシステム(glibc 2.6.1を使用しているARMプロセッサのLinuxカーネル2.6.28)では、複数のスレッドで構成されるアプリケーションを実行しています。これらのスレッドのうちの1つが他のスレッドより多くのCPU時間を取得したいと思います。pthreadsのNice-Levelですか?
は 優先順位を設定するための一つの選択肢は_RR
(または
_FIFO
\
SCHED
)\
SCHED
で
_setschedparam
\
pthread
を使用するように思わ
が、しかし、これは寝ていない限り、それはその仲間から離れて、すべてのCPUを食べる(スレッドはかなりあまりにも多くのCPUを与えますスレッドはまだSCHED_OTHER
を使用しています)。
もう1つのオプションは、スレッドのniceレベルを設定することです。しかし、これは私が探していたものとまったく同じですが(スレッドはもう少しCPUを獲得しますが、他のスレッドは飢えさせることはできません)、正しく動作するようにはできません。 manページによると、 "スレッドは共通のnice値を共有しません"と私は解釈しています。同じプロセス内の異なるスレッドに個別のnice値を設定できます。ここで
は私のコードです:
TIDがすべてのスレッド間で同じであるようだが。スレッドの個々のniceレベルを設定すると、getpriority
を呼び出すときにも、すべてのスレッドで最新のniceレベルが返されます。パフォーマンスが一貫している(つまり、スレッドAとスレッドBを同じタスクで実行し、次にAを-19に、Bを19に設定して、両方ともほぼ同じ時間に終了する)。
スレッドAを実行しているときに-19に設定し、Bを実行して+19に設定すると、Bがフルパワーで実行されます(Aより前に終了します)。
スレッドは、それが後で変更する方法で実行されているときに設定されたniceレベルを使用するようです。
私は、より多くの情報やあらゆる種類の確認のために狂気のようにグーグルで探偵しましたが、私がこれまでに見つけたのはむしろあいまいです。誰かがここで、Linux(2.6.28、glibc 2.6.1)上でスレッドの素晴らしいレベルがどのように処理されるかについての説明はありますか?そして、すでに実行中のスレッドの素晴らしいレベルをどうやって変えることができましたか?
私はこれがパーティーに少し遅れたと知っていますが、私がやろうとしていることをやっているように見えます。あなたのスレッドをどうやって作ったのか知りたかったのですが? pthreadsによると、NTPLスレッドであれば、すべてのスレッドが同じプライオリティを共有しなければならないという。 –