ithreadによるダイレクトリディスパッチなどを活用したネットワーク処理の並列化を実施するようになると、1つしかないにせよ複数あるにせよ、NICの部分がコンテンションの発生源として無視できなくなる。このためハードウェアの入力をお互いに依存しないキューに分割して処理を並列化したり、逆に出力する段階でハードウェアの処理を助けるようにデータを統合したりしてNICに送りだすという処理が必要になっている。

並列処理を意識した入力キューの実装

並列処理を意識した出力キューの実装

今後の展開

今後はさらにコンテンションやロックの分析を実施して、より適切なロック実装の模索と適用、ルートロックの細粒化が取り組まれる。近いところではFreeBSD 7.2でゼロコピーBPFが導入されるほか、FreeBSD 8.0までにマルチアウトプットキューのサポートとコネクションにおける弱いCPUアフィニティの実現、広域構造体におけるハッシュロックの実装などが計画されている。

ネットワーク処理の高速化はFreeBSDがもっとも力を注いでいる開発分野だ。今度も開発が継続して実施されることになる。引き続き注目していきたい。