2006年から2007年にかけての取り組み

BSDCon 2006からBSDCan 2007までの1年間で同成果を実現するために多くの取り組みがあった。主な作業項目は次のとおり。

  • 効率の良いロックプロファイリングの実現(これについは今後も改善すべき項目)
  • 並列度を向上させたUNIXドメインソケットロックの実現
  • (実験的ではあるが)スケジューラロックの実装
  • リーダライタロックの採用(sleepableではない)
  • 最適化された共有排他ロックの採用(sleepable)
  • ULE 2.0への取り組み
  • Giantロックを引き続き削除
  • ネットワークスタックの最適化
  • libthrをデフォルトのスレッドライブラリへ変更

ULE 2.0スケジューラへの取り組みの結果、SMPにおける作業では4BSDスケジューラよりもULEスケジューラの方が明らかによい結果を示すようになっている。依然として安定しないシーンがあるが、安定性の向上への作業に取り組んで安定してからはULE 2.0がデフォルトのスケジューラになりそうだ。

Giantロックの残り - 今後の開発対象

これまでの取り組みのかいあって、FreeBSD 7.0カーネルはそのほとんどにおいてGiantロックが存在しないものになるが、それでもまだいくつかの部分は残っている。代表的な対象は次のとおり。

  • TTY
  • CAM SIM、pseudo-deviceなどのドライバ
  • MSDOS、SMB、NFSv4などのファイルシステム
  • IPX over IP、IPv6 ND6/MLD6、netatmなどのネットワークプロトコル
  • newbus
  • USB、Firewore
  • contigmallocなどVMの一部
  • そのほかいくつかバラバラに点在

KAME IPSec、I4B ISDNスタック、いくつかのレガシーデバイスなどに残っていたGiantロックは7.0においては削除されている。

こうした取り組みのメインとなるThe SMPng Projectは2000年6月に開始されたものだ。最終的な目的はシステムに点在するGiantロックをいくかの細かいロックによる実装に変換し、コンテンションを削減することにあった。結果的にSMPにおける性能が向上することになるわけだが、7年を経てついに当初の目的が実現されたと言える。