2008-10-07から1日間の記事一覧

FreeBSDとの違い

roundrobin()の仕組み、tick値やrrticks値の設定はNetBSD 1.6と「BSDカーネルの設計と実装」の段階でのFreeBSDとは特に違いがないように見える。 4BSD由来のコードがそのまま生きているという事だろう。BSDカーネルの設計と実装―FreeBSD詳解作者: マーシャル…

クロックレートとタイムスライス

NetBSD 1.6のデフォルト値ではHZ = 100に設定されており、tick = 10000us = 10msである。 rrticks = hz / 10 = 10ticks = 100msであり、hardclock()が10ms毎、roundrobin()が100ms毎に実行される事になる。 つまり、1スレッド毎のタイムスライスは100msにな…

NetBSD 1.6/MIPSのプロセススケジューリング

hardclock()はtick毎に呼び出され、その中でroundrobin()はrrticks毎に呼び出される。roundrobin()はneed_resched()を呼び出し、need_resched()はaston()を呼び出す。 これにより、proc構造体のmd_astpendingフラグが有効になる。UserIntr,UserGenException,…

yamt-idlelwp branchに関する議論のスレッドで発見したパッチの解析

NetBSD-currentにはschedcpu()がないで少し言及したyamt-idlelwp branchに関する議論のスレッドで発見したパッチを解析してみた。 このパッチは恐らくスケジューラのモジュール化を目的としており、4.0からcurrentのコードへ至る途中の段階がどうなっていた…

NetBSD-current - sched_4bsd.cの解析

sched_tick() 100ms毎にプロセスを切り替える、とコメントに書いてあるように見えるが、実際にやっているのはcpu_need_resched()の呼び出しでci->ci_want_reschedを1にしたり、spc->spc_ticksを更新したり、spc->spc_flagsを書き換えたりする程度。kern_clo…

generic software interrupt framework

NetBSDにはgeneric software interrupt frameworkという仕組みがある。 これはボトムハーフハンドラを実現したり、クロック処理等に使われている。 Linuxの*_softirq()に近い。APIは、 void * softint_establish(u_int flags, void (*func)(void *), void *a…

NetBSD-currentのランキュー(kern/kern_runq.c)

NetBSD-currentでは、それまでkern/kern_synch.cにあったキュー関連の変数※とキューへのアクセス関数をまとめてkern/kern_runq.cへ移動した。 ※以下の変数 struct prochd sched_qs[RUNQUE_NQS]; /* run queues */ volatile uint32_t sched_whichqs; /* bitma…

NetBSD-currentでは、mi_switch()も激しく書き直されている

2.0より処理の単位がprocからlwpへ書き直された。引数がバージョンによって異なる: 1.6 mi_switch(struct proc *p) 2.0〜4.0 mi_switch(struct lwp *l, struct lwp *newl) current mi_switch(struct lwp *l) 1.6ではmi_switch()がcpu_switch()を呼び出し、…

NetBSD-currentにはschedcpu()がない

revision 1.188より、NetBSD-currentではschedcpu()が無くなっている。これは、スケジューラのモジュール化を進めていく中でschedcpu()をモジュール固有の機能/モジュール間で共通の機能に別けて整理し直した為と思われる。schedcpu()はsched_pstats()に名…

NetBSDのプロセススケジューラ解析 / 1.6→current間の主な変更点

スケジューリング機構に手を入れる事を目的として、NetBSDのプロセススケジューラを解析している。 作業の中で分かった事を順次まとめて行きたい。 スケジュールの単位がprocからlwpに変更され、スケジューリングに関する主要なパラメータがlwpに移った(2.0…