ToDo:
古典的なunixでは、nice値 19のプロセスは、CPU時間割り当ての 優先順位が極めて低く、nice値の低いプロセス群へのCPU時間割り当てが 余った際に実行されていたので、余っているCPU時間を 割り当てたいプロセスに nice値 19を設定するという 運用が行なわれてきた。
FreeBSDでも、4BSDスケジュラーの振る舞いはこれに近かったのだが、 ULEスケジュラーでは、CPU時間を貪欲に消費するプロセスに対する CPU時間割り当ては、nice値 0と nice値 20(最大値)の間でも 大きく偏らないため、fork-waitモデルでnice付きのworker processを 大量に投入する古いタイプの並列演算ロードに対しての CPUスケジューリングの公平性が損なわれている。
下記のパッチで、対話的でないnice付きプロセスの一部を idle queueへ入れてみたのだが、idle queue内のロードバランスが 行なわれないようで、低い優先順位で並列負荷を実行するのには向かない模様。
やはり、timeshare queue内のスケジューリング回りを直さないと無理みたい
Index: sys/kern/sched_ule.c =================================================================== --- sys/kern/sched_ule.c (revision 306791) +++ sys/kern/sched_ule.c (working copy) @@ -1537,6 +1537,8 @@ KASSERT(pri >= PRI_MIN_INTERACT && pri <= PRI_MAX_INTERACT, ("sched_priority: invalid interactive priority %d score %d", pri, score)); + } else if (td->td_proc->p_nice >= 19) { + pri = PRI_MIN_IDLE + (td->td_proc->p_nice - 19); } else { pri = SCHED_PRI_MIN; if (td_get_sched(td)->ts_ticks)
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記