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さんがこちらに資料をアップしてくれています。

  • いまのカーネルは、pdflushスレッドでDirty data(変更のある(メモリ)ページ)の書き出しを行っている。高速デバイスの書き出しでリクエスト欠乏状態になり、性能が生かしきれない。
  • Dirty dataの書き出しをデバイスごとのwritebackスレッド実装に置き換えることで、ロックの範囲の削減と、スレッド毎の書き出し保証を改善。
  • btrfsでBDIwrite backのほうがスループットが上回る。XFSでも30%ぐらいのスループット改善。ランダムwriteでも安定した性能を示している。
  • 2.6.32-rc1でマージ

Not So C Constructs in the Linux Kernel

Linuxカーネルは約1200万行の巨大なC言語プログラムだが、移植性・機能性を保つための実装や、オブジェクト指向的な設計のための定義、ユーザーメモリアクセス例外の処理テーブル、コンパイラの最適化制御など、プリプロセッサマクロやリンカ、インラインアセンブラなどの”黒魔術”を駆使している。
これらは、使うだけなら簡単なので何気なく使っていたが、こんなことやってたのかと正直驚き。今度、コードをじっくり見てみよう。

list_for_each_entry()

  • get/put_user(), copy_to/from_user()
    • ユーザーメモリとのやりとりでよく使うマクロ。オペランドサイズによって、最適化される。
    • マクロの実体は、思い切りインラインアセンブラ。リンク時に.fixupエントリをサーチテーブルに仕込み、ページがなかったらfixupメカニズムをハンドルするという、低レベルな実装をべた書きしている。
  • Percpuは説明をスキップしていました。
  • Sparse and other checkers

【基調講演】Linuxその歴史、開発の仕組み、オープンイノベーションにおける意味

Linus Tovaldsに、Jim Zemlinがインタビューするという形式で進められた。

Linus登場

Jim Zemlinによる、Linusの紹介がかっこよかった。
数字を順番に出していって、その意味を説明するもの。

  • 2700000
    • Linuxにこの1年間で追加されたコード行数
  • 5547
    • 毎日削除されている行数
  • 1000兆ドル
  • 108億ドル
    • Linuxを作り直すのに必要な開発費
  • 0
    • Linuxを使用するコスト
  • 1

インタビューのメモ

  • Linuxのようなプロジェクトは計画してはいけない。こんなになるんだったら、手を出さなかった。自分のために作った。それ以外の成果は、ただの状況変化だ。
  • Linuxはの開発は、プロセスを決めてるだけ。受け付けるという姿勢、すべてがまとまる場を提供している。
    • 何回も、プロセスを変えている。あまりにもひとつのことにコストがかかるようになると、やり方を変えるしかない。2-3年で1回は変えてきている。プロダクトのことは気にしてない。開発のことだけを考えている。
  • イノベーションは、計画をすることではない。
  • 自由という言葉は好きだが、開発の最も最適な方法として活動を行っている。Linuxは企業活動に歩み寄れるはず。
  • 市場で成功することは期待していないが、技術的卓越性という期待で進めている。Linuxが世の中で使われていることが、進化に貢献している。
  • いまでも趣味。

UNIXOSSRuby

まつもとゆきひろさんのお話。
まつもとさんの好きなもの(UNIXOSSプログラミング言語)は、Linusの指向、LinuxUNIX)の思想とすごくリンクする。

  • Simple
    • FileDescriptorはすばらしい概念。
    • システムコールが少ない
    • すべての入出力がバイトストリーム。
      • UNIX以前は、データは構造があり、レコードがあり、IDがある。UNIXは、データ構造をとらず、あらゆるデータはバイト列であるとした。これにより、応用が広がり、OSがシンプルに。プログラム構成が簡単になった。
  • Extensible
    • Flexible, Pipelines, Scripting
      • シェルスクリプトなど、ありとあらゆるところを自分の好みにできる。何かをやりたいときに、既存のコマンドを組み合わせたり、自分で作ったりして、

  自由に拡張できる。Windwosだと、そんなソフトがあるか探す。ソフトがあればできるけど、なければできない。やっていいと決められたことはできるが、それ以上のことは、特権階級(プログラムの書ける人)にしか許されない。UNIXは、使い手に自由を与えたということになる。

  • OSS
    • OSSは自由である。持っている情報をみんなでわかちあう。
    • 私は、たくさんのFreeSoftwareに育てられた。Emacsを使ってたし、gccを使っていた。OSSがなければ、今の私、Rubyはなかっただろう。
    • 誰かに命令されてRubyを作ったわけではない。趣味として作ったものにたくさんの人に協力してもらった。
    • Rubyというムーブメントは、たくさんの人がRubyを良くしたいという動きだが、Linuxと共通することがある。バザールモデル。
    • 今のプログラマは、ネットでの開発に慣れている。大部屋に集まって固まって開発していた状態をしらない。顔も知らないのに、開発が進む。
  • MyFavoriteLanguages
    • Lisp
      • 最古のプログラミング言語といえるほど古い。Fortrun,COBOLは衰退してきているが、Lispの思想は今でも最先端にいる。
      • 抽象化を高いレベルで扱える。これは、Lispが数学から生まれたことに由来する。数学は段階的に抽象化していくという思想。Lispも同じ理由で廃れない。抽象化の重要性を教えてくれた言語。
    • Smalltalk
    • C
      • UNIXを構成する基本的な言語。シンプルでありながら、いろんなことができる。
      • システム記述に向いた言語。
      • C++は頭のいい人がつくったが、おなじぐらい頭がよくないと使えない。
    • Perl
      • 「ある意味すごくすばらいい言語」
      • 80年代後半に生まれた。それまで、小さなプログラムを組み合わせて使うという思想(DSL)を実践してきた。これは、目的ごとに新しい使い方(コマンドの使い方)を覚えなければならない。
      • たとえば、findの膨大なオプションは言語といっても良い。実は、catのオプションだってたくさんある。UNIXでコマンドをつかうということは、10や20の言語を知っているといえる。
      • Perlは、ひとつのプログラミング言語の中に、UNIXのコマンドを全部ぶち込んだような言語。実用的な観点でいうと、ひとつ覚えたら全部できる。UNIXの操作がすごく楽になった。
      • PerlUNIXスクリプティングのひとつのエポックである。
      • 1992年にはじめてPerlを勉強した。その特徴に感銘(インスピレーション)を受けた。このとき、このような領域に、オブジェクト指向を組み合わせれば、面白いと思った。それがRubyを作った動機。同じような思想では、Smalltalkの処理系があまり無かったのも要因。Pythonは知らなかった。Perlの領域にオブジェクト指向をくっつけたのがRubyの発想。
  • Ruby
    • My Most Favorite Thing
    • Inheritance UNIX
    • Nourished by OSS
    • Lerned from Past Languages
    • Cives you Freedom
    • Makes you Enjoy Programming
    • Makes you Enjoy Programming Again
    • 最近では、海外でも講演する機会もあるが、「Rubyをありがとう」といわれる。Rubyでプログラミングがまた楽しくなった、仕事として作っていても楽しいという話をいただく。