FreeBSD Daily Topics

2011年7月15日新スケジューラ「FBFS」実装したFreeBSD LiveDVD登場

src

Brain Fuck Scheduler for FreeBSD

current - 現在、Rudo Tomori氏の手によって新しいスケジューラの実装が進められています。実装しようとしているスケジューラはCon Kolivas氏が2009年に発表したBrain Fuck Schedulerと呼ばれるスケジューラです。BFSと短縮名で呼ばれています。BFSはシンブルな仕組みで動作するスケジューラで、性能の低いマシンでとくに性能を発揮できるものだと言われています。

FreeBSD FBFS live DVD image is available nowにBFSを有効にしたFreeBSDのライブDVDイメージが公開されていますので、興味がある場合には試すことができます。FreeBSD 8.2-RELEASE i386をベースに軽量GNOMEの環境が起動するようにカスタマイズされたライブDVDです。

ULEスケジューラを使っている場合のsysctl値
# sysctl kern.sched
kern.sched.cpusetsize: 8
kern.sched.preemption: 1
kern.sched.topology_spec: <groups>
 <group level="1" cache-level="0">
  <cpu count="4" mask="f">0, 1, 2, 3</cpu>
  <children>
   <group level="2" cache-level="2">
    <cpu count="4" mask="f">0, 1, 2, 3</cpu>
   </group>
  </children>
 </group>
</groups>

kern.sched.steal_thresh: 2
kern.sched.steal_idle: 1
kern.sched.steal_htt: 1
kern.sched.balance_interval: 127
kern.sched.balance: 1
kern.sched.affinity: 1
kern.sched.idlespinthresh: 16
kern.sched.idlespins: 10000
kern.sched.static_boost: 152
kern.sched.preempt_thresh: 80
kern.sched.interact: 30
kern.sched.slice: 12
kern.sched.name: ULE
#
FreeBSD BFSに切り替えると表示がこのように変わる
# sysctl kern.sched
kern.sched.preemption: 1
kern.sched.slice: 12
kern.sched.name: FBFS
#

FreeBSDには4BSDとULEという2つのスケジューラがあります。4BSDはシングルコアで高い性能を発揮し、ULEはマルチコアで高い性能を発揮します。現在ではULEがデフォルトになっており、4BSDはULEとの性能比較や、組み込みデバイスでの利用を想定して残されています。

4BSDもULEも優れたスケジューラですが、かなり多くの設定項目を持ち、その値の微調整はとても大変なものだと言われています。歴史的に何度も調整が実施された部分があり、どのパラメータがどのような影響を及ぼすのか、全体を把握している開発者は存在しないのではないかと見られます。BSFはこうしたヒューリスティックに決定される部分を排除した上で、性能を発揮できるスケジューラを実現するという側面を持っていました。

BFSはULEに取って変わるようなタイプのスケジューラではないのですが、FreeBSDにとっていくつかのメリットがあります。まず、BFSが現在のPCとカーネルにおいてどの程度の性能を発揮するのか、どういった特徴を見せるのか観測できること、そうした結果をULEと比較できることなど、改善を進めるための指標としての側面です。もうひとつは、組み込みで採用するスケジューラとして新しい選択肢となる点にあります。

FreeBSDは組み込みで使われる機会が増えていますので、4BSD以外のスケジューラが選択できるようになるのか好ましいことといえます。4BSDほど複雑な仕組みにもならないとみられており、それなりにカスタマイズしやすい候補が増えるということになります。

おすすめ記事

記事・ニュース一覧