2009-05-23 7 views
12

組み込みシステム(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)上でスレッドの素晴らしいレベルがどのように処理されるかについての説明はありますか?そして、すでに実行中のスレッドの素晴らしいレベルをどうやって変えることができましたか?

+0

私はこれがパーティーに少し遅れたと知っていますが、私がやろうとしていることをやっているように見えます。あなたのスレッドをどうやって作ったのか知りたかったのですが? pthreadsによると、NTPLスレッドであれば、すべてのスレッドが同じプライオリティを共有しなければならないという。 –

答えて

5

私は突然この質問を投稿しました。私は突然私の間違いを認識しました。私はメインスレッドから関数を呼び出すことによって素晴らしいレベルを設定しました。もちろん、それらはすべて同じスレッドIDを持ちますメインスレッド)。 DOH !!!!

正しいtidを使用するとすべて正常に動作します。

ここでこの質問を削除しますか?

+0

私はそれをそのまま残してもいいと思う、スティーブン。私は人々がすでにそれを閉じてしまったと思います。 –

+0

自分の質問を削除することはできません。今から十分な担当者がいないことがわかります。 faqを参照してください。 –