カーネルコミュニティでうまく立ち回るには
|
| 日立の大島 訓氏 |
The Linux Foundation Japan Symposiumでは、毎回日本人開発者による講演が少なくとも1つ行われるのが恒例となっているが、今回は日立の大島 訓氏による「Linuxにおけるリソース管理の改善」と題された講演が行われた。この講演で大島は、日立の開発者によって作成されLinuxカーネルに取り込まれたパッチを2つ紹介した。
1つ目は河合英宏氏によるcoredump maskingで、これはアプリケーションがクラッシュした際にどのタイプのメモリ領域のコアを取得するのかをプロセスごとに指定できるようにするものだ。もともとの発想は、巨大な共有メモリを利用するマルチプロセスのアプリケーションがクラッシュした際に、プロセスごとに共有メモリをダンプするのはディスクスペースおよび時間の無駄であるという考えである。完成したcoredump maskingでは、「anonymousかつprivate」、「anonymousかつshared」、「file-backedかつprivate」、「file-backedかつshared」という4タイプの領域ごとにコアダンプを取るかどうかを設定することができる。
2つ目はUDPでもカーネルが使用するメモリの上限値を設定可能にするパッチで、こちらは大島氏と青木英郎氏、安井隆弘氏によるもの。従来のLinuxカーネルにはUDPソケットバッファのサイズに上限がないという問題があり、これを悪用するとシステムがダウンするまでカーネルページを無制限にピンダウンするといった攻撃がユーザースペースから実行できてしまうそうである。そこでこの問題に対処するためにパッチの開発に取りかかったものの、当初はTCPのメモリアカウンティングと同様の機能をUDPに実装する方針だったものが、最終的にはTCPのメモリアカウンティングを削除して新たにstream/datagram汎用のメモリアカウンティングを実現するものになったそうだ。
大島氏の講演では、それぞれのパッチをLKML(Linux Kernel Mailing List)で提案した際にどのようなフィードバックを受けて、どのように設計・実装を変更したのかといった開発経緯の説明に重きが置かれていた。大島氏がLKMLでのやり取りから得た教訓には、以下のようなものがあるそうだ。
- 機能をカーネルで実現する必要性を明確に述べる
- 各々の提案の長所/短所を整理する
- 反対する人がいても諦めない(最終的にメンテナが納得すればなんとかなる)
- テストはしっかりやる
- 大きな変更を恐れず、最初から問題点をすべて相談したほうが良い
- 早いうちのupstreamにパッチを投げてみる
以上、本稿では第7回 The Linux Foundation Japan Symposiumの講演内容を紹介した。
