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年を経てついに当初の目的が実現されたと言える。