今週のLKML

forkbomb killer

パッチについて

http://permalink.gmane.org/gmane.linux.kernel.mm/60317

こんな簡単なコマンドを実行したとする。(やらないでね)

# forkbomb(){ forkbomb|forkbomb & } ; forkbomb

するとまぁ見てわかる通り、あっというまにプロセスが大増殖する。

説明はこのpatchがくわしい。
http://permalink.gmane.org/gmane.linux.kernel.mm/60318

読んでみて簡単に翻訳してみると…

forkbomb の問題は二種類にわけられる。

  1. プロセスの数でメモリを圧迫してシステムを不安定に
  2. 大量のメモリを食って大量のswapoutを起こしてシステムを遅くする

1番は ulimit で、2番は cgroup でメモリ量を制限したり overcommit_memory をいじったりすることで一応の対処はできる。

しかし、 1番のulimitだと、 forkbomb を起こしてしまったユーザはすでに ulimit にかかっているのでなにもできなくて他のadminユーザ頼りになる。もちろん root が forkbomb しちゃったらもうどうしようもない。

2番の cgroup の方はあらかじめプロセスをグループにいれておかないといけないわけで…「想定外」のことが起こると大変なことになってしまうわけで…。

ということで、 OOM が走る時に「最近起動して大量にメモリを食っているプロセスツリー(=多分 forkbomb)をkillする」というのがこのパッチになる。

このパッチを入れてKConfigで有効にすると

/sys/kernel/mm/oom/mm_tracking_enabled と /sys/kernel/mm/oom/mm_tracking_reset_interval_msecs という sys ファイルができる。前者は見てわかる通りにこの機能を有効にするかどうか、後者は「最近機動したプロセス」の追跡をリセットする間隔になる。

システムの起動からずーっとリセットもせずに追跡はできない。ここで設定した間隔ごとに

  1. プロセス数
  2. kswapd が走った回数
  3. alloc stall(メモリ要求)の回数

をチェックする。これが前回と比べて増えていなければ、前回までの結果をリセットしてしまう。

と、いうものだがもちろん「追跡」するために fork/vfork/exit あたりには overhead が必要になる。

議論

http://permalink.gmane.org/gmane.linux.kernel.mm/60326

  • forkbomb なんてめったに起こらないことのために、しょっちゅう起こるforkのたびに overhead ってのはどうなのかね?
    • forkbomb が起こった時は物理的にリセットしなくてはいけないことが多く、ネットワークのむこうだとかだとしんどい
  • サーバとかだとアプリケーションは厳選されてるんじゃ?
    • 人の手では100%はないよね。
    • システムが普通の人の作業でこわれる、というのはあってはならない。

http://permalink.gmane.org/gmane.linux.kernel.mm/60406

APMの削除?

http://comments.gmane.org/gmane.linux.kernel/1117266

2006年のVistaのリリースではもうAPMサポートなくなってしまったし、これ以上APMが必要なノートに出会うこともないだろうし、削除しようというパッチ。

http://permalink.gmane.org/gmane.linux.kernel/1117299

80年代までしか使われていなかったようなもののサポートもまだ残っているし、消す必要もないのでは? 古いコードを残しておくことは(実際にはテストしないし)そんなに手間ではない、ということらしい。 特にAPMx86に深く食いこんでメンテの邪魔になるような規模ではないわけだし。

削除するなら

  • CONFIG_APM を CONFIG_EXPERT の下にうつして、誰か文句言わないか反応を見る
  • WARN() を使って、 「APM なくなるかもよ。どうしても必要なら言ってね。」というような警告を出す

という手順をとるべき、らしい。

http://permalink.gmane.org/gmane.linux.kernel/1117824

こんなスケジュールでどうだい?という提案

  • 2.6.39:
    • 2.6.42 で削除されると feature-removal.txt に書く
    • CONFIG_EXPERT の下に移す
  • 2.6.40, 2.6.41
    • 実行時に WARN() する
  • 2.6.42:
    • 削除

http://permalink.gmane.org/gmane.linux.kernel/1117814

そもそも、なぜAPMを削除したいか、について。APMがいらないなら、APMサポートなしでコンパイルしたら?という意見に対して。 APMのみのラップトップで cpuidle が動くか、のようなテストをしたくない、らしい。

Acked-By がついていたりもするし、メンテナさんが見つかったりテストする人が出てこなければAPMは削除されるんですかね。

overlay filesystem

http://comments.gmane.org/gmane.linux.file-systems/52078

リードオンリーなファイルシステムの上に、リードライト可能なファイルシステムをかぶせることを実現するファイルシステム。ようするに、 LiveCD とかで 「リードオンリーなCD上のファイルシステム」の上に「USBメモリとかさして作った書きこみ可能な領域」をかぶせて、LiveCDだけど普通のマシンみたいに書きこみもできちゃうよ、ということを実現する。

unionfs と違って、一度ファイルを open してしまえば、後はその「上のファイルシステム」か「下のファイルシステム」に直接オペレーションがとぶようになるので開けた後のオーバーヘッドが少ないし、実装もシンプルになる。

http://permalink.gmane.org/gmane.linux.kernel/1116300

ドキュメントはこのパッチ。

http://permalink.gmane.org/gmane.linux.kernel/1116347

もっとファイルを構造化しなよ、と Linus からつっこみ。

シンボル解決の高速化

http://comments.gmane.org/gmane.linux.kernel/1117063

シンボル名をソートして登録するようにして、解決を二分岐で速くしよう、という話。なかなかいいように見える…が…

http://permalink.gmane.org/gmane.linux.kernel/1118292

kallsyms はアドレス順に並んでいてほしい、ということであまり歓迎されてなさげ。

kstrtobool

http://comments.gmane.org/gmane.linux.kernel/1116809

新しいカーネル内のライブラリ。 debugfs とか sysfs とかで "y" だとか "n" だとか "0" だとか "1" だとか書きこまれた時の判定をまとめたもの。

http://permalink.gmane.org/gmane.linux.kernel/1116811

本体はここ。break がなかったりとか指摘されているけど直って入るんでなかろーか。

Android 3.0 の話

http://slashdot.jp/it/11/03/25/2028219.shtml

Android 3.0のソースコードはしばらくリリースされない」そうですが、 GPLv2 には確か期限を定める部分はなくって「いつか公開するよー」でも一応セーフなわけで「GPL違反になるんじゃ?」ってのは違うみたいですね。

http://lwn.net/Articles/427113/

まぁ、HTC が製品出して120日間はコードを出さないとかのポリシーに対抗しようと、

http://lwn.net/Articles/427114/

こんな patch の提案あったりしてますね。