- ベストアンサー
Linuxのマルチコアへのタスク割り当て
Linuxカーネルの、SMP環境でのスケジューリングについて調べています。 ユーザがあるプロセスを起動したとして、そのプロセスはどのようなアルゴリズムで、特定のCPUに割り当てられるのでしょうか??? おそらく、各CPUの負荷を観測して、一番暇なCPUに割り当てる、というものかと思うのですが・・・ もしそのカーネルソースの該当部分などご存知でしたら、その場所も示して頂けると有り難いです。 よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
OSのスケジューラーはschedという文字列を持つファイルで、kernを含むディレクトリーの中にあったりするので、あて感で見て見ました。 プロセスの起動はfork & execという流れで行われるのはご存知のとおりですが、forkにバランスするような賢いことはしていないようです。 http://lxr.linux.no/#linux+v3.2.1/kernel/sched.c#L2972 その後のexecでは暇なところを選んでいるみたいですね。 http://lxr.linux.no/#linux+v3.2.1/kernel/sched.c#L3778 選び方はこんな感じですね。 基本的なチェックをやって、 http://lxr.linux.no/#linux+v3.2.1/kernel/sched_fair.c#L2389 暇なCPUを探すと。 http://lxr.linux.no/#linux+v3.2.1/kernel/sched_fair.c#L2244 何かの参考になれば。
お礼
有難うございます!まさにこのような箇所が知りたいところでした。 手元のデュアルコアAndroid端末が、どうも効率よく各CPUにスレッドを割り振っていないように見えたので、原因を調べていました。 これからご指摘のソース周辺を読んで、深堀りしたいと思います。