未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

Linux Collaboration Summit 2010, 3rd Day

3日目、最終日はTool Chainのセッションに出た。http://events.linuxfoundation.org/lfcs2010/toolchain

GCC's New Frontiers: Performance and Plug-ins, Mark Mitchell

4/14にリリースされたばっかしのgcc-4.5のお話である。http://gcc.gnu.org/gcc-4.5/

GCCはシリコン(半導体)ベンダーにとって、必要不可欠のツールで、GCCの拡張に貢献している人はフルタイムで仕事として行っている人がほとんどである。性能は重要である。今回の拡張では、リンク時の最適化、およびプロファイラを利用して最適化が目玉となっている。実行時の動的特性を記録して、例えばどちらに分岐かなどを記録して、分岐予測ミスが起きにくいようにコードを生成する。今後の方向性としてキャッシュミスなどを記録して、キャッシュミスが起きにくいコードを生成するというアイデアが発表されていた。
GCC開発者向けの話題として、最適化は定量的な評価が重要で、定量的なデータなしに、最適化パッチを投稿してはいけない。ベンチマークは後からとってつけたものではなく、開発プロセスの一つである。チューニングは重要である。ターゲットマシンへの理解も重要である。

感想:キャッシュミスなどをハードウェアのパフォーマンスカウンターで計測することは可能であるが、精密な値を計測することは難しい。(通常はできない)。そのことを質問したところ、ハードウェアの厳密なところはよくわからないが、統計的に多くの値を収集すればないよりはいいだろうとの回答だった。フロアからはエミュレーションでやったりするとコメントされていた。そのようなコードをコンパイラが出す(?)というアイデアも出た。質問からいろいろ議論が膨らむのがこの手の発表の醍醐味である。
以下はわたしのメモ(プレゼン資料をできる範囲で写経した)

mark@codesourcery.com

GCC 4.5 is released at April 14, 2010

GCC Performance: Silicon Vendor Perspective
 1997: what is gcc
 2001: a few people seem to want to use GCC with my CPU
 2004: Linux matters to my users. I need a working GCC port.
 2009: GCC is used by all my customers. Thus, CPU performance is a
       function of GCC performance.
Link-Time optimization: See The Big Picture
 compile: Optimize a bit; and generate bytecode
 link: load in all the bytecode; optimize it all at once
Profile-Guided Optimization:
 future uses
  place data so as to maximize cache performance
  minimize code size for cold code
  optimisically replace variables  by constants
  auto-tune optimization parameters
 Know more! Guess less!
Thoughts for GCC Developers
 optimization is a quantitative exercise
  optimization patches should not be posted without quantitative data
 benchmarking is part of the development process
 tuning is vital
 Good performance requires awareness of the target machine
Thoughts for Silicon Vendors
 why you must invest
 why you must invest broadly
Requirements for A Plug-in API

The GNU Gold Linker, Ian Lance Taylor

GNU Linkerは歴史的な経緯により、複雑で、非常に遅い。チューニングすることも難しい。そこでGoldというリンカーを作った。というお話。Linux kernel buildはlinker scriptsのundocumented featuresを利用しているので、Goldではリンクできないそうである。

感想:Linker大変そうだ。リンクが速くなるとビルドが速くなるのでうれしいなあと思った。

GDB Challenges, Tom Tromey

GDBも進化を続けている。C++pythonのサポート、性能向上、トレーシングのサポートなどなど。C++のpretty-printing(マングルされた関数をもとに戻して綺麗に表示する)、例外処理、式のパースなどなどを追加。細かい性能向上やトレーシングのあれやこれやのサポート。ptraceは歴史的な経緯で、複雑でバギーで、性能もよくないので、置き換えなければいけないと考えていて、utraceがその候補になっている。

感想:GDBの新機能、拡張の方向性などは、(低レベルな)Cのプログラマにとっては、どれもこれも魅力的なものである。ptraceを置き換えるべく開発されているutraceは現時点でカーネルには含まれていない。そのことについてコメントを求めたところ、utraceが使えればそれに越したことはない、だけど現時点でptraceを使えるので、utraceがなくても困ってはいない。だけど、カーネルコミュニティには必要性を訴えて行きたいというような趣旨のことを言っていた。Linuxカーネルの新機能追加には正しいユースケースが必要なので、それを地道に訴えていくのが必要なんだろうなあと感じた。

What we're doing; archer
 C++, python, performance, tracing
C++
 pretty-printing, exception handling, expression parsing, bad cases
performance
 data structures 101
 DWARF
Tracing
 catch syscall
 kernel component
 system tap
what everybody else is doing
 record/replay
 multiprocess
 async/non-stop
 tracepoints
 inline functions
 valgrind
other challenges
 bug front
 runtimes
 prtace must die
 pesky users
Runtimes
 C
  longjmp
  dynamic loader
  threads and clone
 C++
  exceptions
ptrace must die
 signals
 reparenting
 otherwise clunky
 eager reporting
 obscurely buggy
ptrace solutions
 utrace
 gdbserver
Pesky Users
 optimization
  VTA
 IDEs
 Clusters

その他

C++の標準化のお話。あれやこれや。感想:標準化はいろいろ大変だなあ。
GCCプラグインGPL V3のお話。GCCは4.5よりコンパイラプラグインを書くことが可能になった。つまりGCC本体を一切変更することなく、機能拡張をプラグインで行えるようになった。これを利用すれば、プロプライエタリ製品(CPU)向けのクローズドなコンパイラを素早く作ることができるようになった。GPL V3での扱いについて、解説があった。感想:プラグインで拡張するというのはリチャードストールマン的にはどうなんだろうと思ったが、ライセンス的にいろいろグレーなところがありそうだが、GPLV3では問題ないというお話だった。(わたしの理解が正しければ)。

ツールチェーンの感想

小さめの部屋だったのだが、満員盛況で、椅子を追加していた。30人くらいは参加していただろうか。Linuxカーネル開発者とツールチェーンの開発者が同じ部屋にいていろいろ議論するので話が非常にさくさくと進むという印象を持った。Linux Kernel Summitだとユーザ側がほとんどいないので、実際のユースケースからの議論に深みがでないが、Linux Collaboration Summitはカーネルハッカーと、コンパイラ開発者、Linker開発者、デバッガー開発者が一同に介するので、話が一気に進む。その現場を目撃したという感じである。ツールチェーンの開発者は多分そのコミュニティの古株で、コアなメンバーは顔見知りという感じだった。
低レベルなお話は自分にとっては大変興味のある話なので、参加するだけで楽しかった。自分にとっては低レベルな仕事というのが昨今ないのが悩みである。カーネルレベルでプロファイルをとって性能チューニングをするとか、コアダンプからトラブルシューティングをするとか、ビルドの時間を大幅に削減するとか、そーゆーことをやってみたいなあとうずうずしたところである。