柳澤です。

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.

メールによる返信