柳澤です。 On Tue, 10 Jan 2006 21:31:27 +0900 森戸一成 <[EMAIL PROTECTED]> wrote:
> 現在、プロセスごとにCPU使用率をコントロール > してみたいと思っています。 > 環境はFreeBSD4.11です。 (snip) > 一定マイクロ秒ごとにキューのスルーとキューへの挿入 > を繰返すようにしたのですが、CPU使用率は減る一方で > 結果的にプロセスは止まってしまいました。 スケジューリングまわりのコードを軽く眺めた程度なので外しているかも 知れませんが、プロセスの状態をSLEEPなどにせずにrunqueueには繋がない ということをすることで、制限しようとしているプロセスが動き続けていると OSに誤認されているように思います。 その結果、プロセスは動いていないのにp_estcpuの値だけは異常に大きい ということになり、スケジューリングの際に不当な扱いを受けているのでは ないでしょうか。(sys/kern/kern_synch.cのschedcpu関数) > もしどなたかプロセスひとつひとつのCPU使用率を > 変更をご存知か、思いつく方がいましたら、 > ご返信お願い致します。 先に述べた状況を改善する方法としてキューに繋ぐか否かだけではなく キューに繋がない場合にプロセスの状態をSSTOPなどに変更すると良いかも 知れません。 やろうとしておられることは抽選型スケジューリング(lottery scheduling)に近い感じがしますが、こちらのコードも参考にしてみては いかがでしょうか。 http://www.hypersurface.net/dpetrou/research.html -- ------------------------------------------------------- Yoshisato YANAGISAWA <[EMAIL PROTECTED]> Dept. of Mathematical and Computing Sciences, Graduate School of Information Science and Engineering, Tokyo Institute of Technology.
