Japan Linux Symposium 2009:1日目(10月21日)のセッションメモ
Per Backing Device Dirty Data Writeback Replaces pdflush Driven Writeback in an Attempt to Speed up this Operation
詳しいデータや関数は、Jens Axboeさんがこちらに資料をアップしてくれています。
Not So C Constructs in the Linux Kernel
Linuxカーネルは約1200万行の巨大なC言語プログラムだが、移植性・機能性を保つための実装や、オブジェクト指向的な設計のための定義、ユーザーメモリアクセス例外の処理テーブル、コンパイラの最適化制御など、プリプロセッサマクロやリンカ、インラインアセンブラなどの”黒魔術”を駆使している。
これらは、使うだけなら簡単なので何気なく使っていたが、こんなことやってたのかと正直驚き。今度、コードをじっくり見てみよう。
- listの実現。
- カーネルで非常に多用されているlist_headの実装。list_head自体が、prev,nextポインタのみの実装になっててシンプルだが、それを実現するcontainer_of()マクロがかなり強引な実装。
- Iteratorの実現。
list_for_each_entry()
- get/put_user(), copy_to/from_user()
- ユーザーメモリとのやりとりでよく使うマクロ。オペランドサイズによって、最適化される。
- マクロの実体は、思い切りインラインアセンブラ。リンク時に.fixupエントリをサーチテーブルに仕込み、ページがなかったらfixupメカニズムをハンドルするという、低レベルな実装をべた書きしている。
- Percpuは説明をスキップしていました。
- Sparse and other checkers
インタビューのメモ
- Linuxのようなプロジェクトは計画してはいけない。こんなになるんだったら、手を出さなかった。自分のために作った。それ以外の成果は、ただの状況変化だ。
- Linuxはの開発は、プロセスを決めてるだけ。受け付けるという姿勢、すべてがまとまる場を提供している。
- 何回も、プロセスを変えている。あまりにもひとつのことにコストがかかるようになると、やり方を変えるしかない。2-3年で1回は変えてきている。プロダクトのことは気にしてない。開発のことだけを考えている。
- イノベーションは、計画をすることではない。
- 自由という言葉は好きだが、開発の最も最適な方法として活動を行っている。Linuxは企業活動に歩み寄れるはず。
- 市場で成功することは期待していないが、技術的卓越性という期待で進めている。Linuxが世の中で使われていることが、進化に貢献している。
- いまでも趣味。
UNIX+OSS+Ruby
まつもとゆきひろさんのお話。
まつもとさんの好きなもの(UNIX,OSS,プログラミング言語)は、Linusの指向、Linux(UNIX)の思想とすごくリンクする。
- Simple
- Extensible
- Flexible, Pipelines, Scripting
- シェルスクリプトなど、ありとあらゆるところを自分の好みにできる。何かをやりたいときに、既存のコマンドを組み合わせたり、自分で作ったりして、
- Flexible, Pipelines, Scripting
自由に拡張できる。Windwosだと、そんなソフトがあるか探す。ソフトがあればできるけど、なければできない。やっていいと決められたことはできるが、それ以上のことは、特権階級(プログラムの書ける人)にしか許されない。UNIXは、使い手に自由を与えたということになる。
- Programmable
- Languages
- MyFavoriteLanguages
- Lisp
- Smalltalk
- C
- (Perl)
- 「ある意味すごくすばらいい言語」
- 80年代後半に生まれた。それまで、小さなプログラムを組み合わせて使うという思想(DSL)を実践してきた。これは、目的ごとに新しい使い方(コマンドの使い方)を覚えなければならない。
- たとえば、findの膨大なオプションは言語といっても良い。実は、catのオプションだってたくさんある。UNIXでコマンドをつかうということは、10や20の言語を知っているといえる。
- Perlは、ひとつのプログラミング言語の中に、UNIXのコマンドを全部ぶち込んだような言語。実用的な観点でいうと、ひとつ覚えたら全部できる。UNIXの操作がすごく楽になった。
- PerlはUNIXとスクリプティングのひとつのエポックである。
- 1992年にはじめてPerlを勉強した。その特徴に感銘(インスピレーション)を受けた。このとき、このような領域に、オブジェクト指向を組み合わせれば、面白いと思った。それがRubyを作った動機。同じような思想では、Smalltalkの処理系があまり無かったのも要因。Pythonは知らなかった。Perlの領域にオブジェクト指向をくっつけたのがRubyの発想。