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開発者、デバッガー開発者が一同に介するので、話が一気に進む。その現場を目撃したという感じである。ツールチェーンの開発者は多分そのコミュニティの古株で、コアなメンバーは顔見知りという感じだった。
低レベルなお話は自分にとっては大変興味のある話なので、参加するだけで楽しかった。自分にとっては低レベルな仕事というのが昨今ないのが悩みである。カーネルレベルでプロファイルをとって性能チューニングをするとか、コアダンプからトラブルシューティングをするとか、ビルドの時間を大幅に削減するとか、そーゆーことをやってみたいなあとうずうずしたところである。