Monthly Archives: 3月 2012

Permalink to single post

卒業しました

無事に東京大学を卒業しました。

あと修士研究について表彰され、研究科長賞なるものをいただきました。

所属は東京大学大学院情報理工学系研究科の創造情報専攻で、研究室はささだ研でした。笹田先生をはじめとして、ささだ研の皆様にはとてもお世話になりました。とても感謝しております。

ということで、大学院在学中のことをまとめてみる。

プロファイラ関連

修士の主な研究はプロファイラの開発でした。始まりは「I/Oまわりの改善から研究の手をつけようとした→IOまわりのプロファイラをした→よく分からないことになった→じゃあプロファイラをつくっちゃおうか」という感じだった気がします。

Ruby用リアルタイムプロファイラ – rrprof

まず初めに作ったものはRuby用のリアルタイムプロファイラでした。動作デモが下のやつです。

特徴としては

  • メソッドごとに実行時間が得られる (普通のプロファイラと同じですが・・・)。
  • リアルタイムプロファイラ (オンラインプロファイラ)であること。プログラムを実行しながら平行してプロファイルできる。
  • CCTを用いて、コンテキスト情報を含めた情報取得が出来る
  • 情報取得部分と表示部分が別プログラムで、それぞれネットワーク上の別ホストで実行できる
  • それなりにボトルネックが低い

プロファイル情報の取得にはRubyのトレース命令を使ってフックをかけ、メソッドごとに開始時間・終了時間の差分値を取得しています。上記の特徴を実現するためにいろいろと実装の工夫とかしてました。ダブルバッファリングだったり、データ構造やシリアライズの工夫だったりと。

情報処理学会 プログラミング研究会 (査読付き論文誌)

このRuby用リアルタイムプロファイラについて設計と実装の論文書いて、情報処理学会のプログラミング研究会 (PRO) というところで発表した。学会は沖縄県の宮古島でやりました。学会発表は初だったのでいろいろとテンパったけど、まぁなんとか。

論文の内容としては先ほどチラっと書いた実装上の工夫点をつらつら並べ、それによってどういう性能がでたか、あるいはどんなところがオーバーヘッドの原因となっているかを細かめに書いた感じです。結果としてプロファイラの時間的なオーバーヘッドはさして大きくはなかったのですが、細かく見るとCCT作るときの処理や、時間の取得処理、Rubyのトレース命令によるオーバーヘッドがややあり、という感じでした。

あと論文誌にも投稿して、結果として採録されました。よかったよかった。ということで詳細は論文で・・・ (ここにアップしても良かったんだっけ・・・よさげだったら折角だしそのうち載せます)

スクリプト言語用リアルタイムプロファイラのためのフレームワーク – llprof

Ruby用として作ったプロファイラでしたが、自分Rubyは使わんし Pythonとかでも使えたらいいなということで、いろんな面で汎用的な部品として使えるようにフレームワークとして設計しなおしました。

特徴としては、上記のRuby用リアルタイムプロファイラのやつに加えて

  • 様々なスクリプト言語処理系に対応することができる
  • 性能尺度 (実行時間とか、メモリ使用量とか、要するに計る対象) をユーザーが拡張できる
  • Webブラウザで情報閲覧できる
  • いろいろと可視化する方法が備わっている
  • 実環境でもつかえるよ! (実際に後述するArrowで使ってみている)

画面も結構変わりました。Webブラウザ上で見るようになったこともあり。まぁどちらかというとショボくなっているという説も。以下が動作画面

構成は下図のようにビューア・サーバー・プロファイリングモジュールという三部分。

llprof - プロファイラ構成

プロファイリングモジュールで情報取得→サーバーに蓄積→それをビューアで表示という流れです。基本的に情報の蓄積データ構造や送信方法などはRuby用のやつをそのまま踏襲しています。それをそのまま汎用化した感じです。

RubyKaigi 2011

当初は「Ruby用リアルタイムプロファイラ」として発表する予定だったんですけど、なんか上記のフレームワーク的な部分が比較的よくできてしまった上に、Pythonでのある程度の分析例まで用意できそうだったので、それをネタにして発表してしまった。ただそのための準備がギリギリになって結構大変だった。まぁここで苦労したおかげてこの後は比較的すんなりと研究を進められたかも。

そんなこんなでRubyKaigiですが内容は思いっきりPythonネタでした。ほんとさーせんした。へびつかいで・・・。

ソフトウェア科学会

RubyKaigiで発表したような内容でしたが、実装面とか汎用性部分の設計についてまとめて論文にして、ソフトウェア科学会で発表した。また沖縄です。今度は本島です。沖縄ばかりですいません。発表はそれなりに盛り上がって、まぁ無難に終わったという感じ。

まぁ若干風邪ナドナドでくたばったりもしましたが・・・。

修士論文

とまぁこんな流れでプロファイラについての研究をしていって、最後に修論としてこれらをまとめました。題目は「スクリプト言語用リアルタイムプロファイラのためのフレームワークの設計と実装」でした。基本的にPROで発表したもの+ソフトウェア科学会で発表したものがベースになっている感じ。

修論もここにうぷしていいのかな。まぁそのうち。

その他

VoXY – A VNC to HTTP Proxy

なんてのも作ったりしたなぁ。授業としてね。いやクルマじゃないよ。Webブラウザから使えるVNC的な。

全部JSとPythonでかきましたとも。結局フルスクラッチで。

一応SACSISでポスター発表もしました。

Arrow

僕が仕事としてやったもの。アローね。匿名 (に近い形) でメッセージのやりとりができるというサービス。僕が担当したのはシステム設計・構築やインフラまわりなどなど。

クラウドとかなんとかまわりを本格的に触ったのはこれが初めてだったり、この規模のサイト運営も初めてだったり、アクセス殺到に潰されてみたり、いろいろと初めてづくしで非常に勉強になりました。まぁそもそもなにかソフトウェアをリリースするっていうのもあまり真面目にやったことはなかったので、そういう意味でも。

あとは、研究でやっていたプロファイラの適用例としても使わせていただきました。結果としてはあまりArrow側に貢献できる事はまだ大きくないですが、いろいろな知見を得られました。またArrowのおかげで実用的な研究としてアピールすることも出来た、という点は大きかったと思います。

ということで、機会を与えていただいたArrowの中の方々に感謝。

スナガラボ株式会社

作っちゃいました。会社。別に登記だけだったら多少の金さえあればできるので、難しいことはないですが。

会社の誕生日はワタクシの誕生日でもある7月20日に。

ある種の勢いなんですかね。まぁでもなんとなく「学生終わるまでに自分で会社作って働く」みたいな目標?があったので、それに沿った感じてもあり。

まぁ今後もいろいろと模索しながら仕事をしていきたいと思います。

今後

さぁどうしようか。

プロファイラの今後

いろいろとやりたいことはありつつも優先度は下がってしまう。まぁやりたいことをまとめるぐらいはしておこう。

  • 速く (オーバーヘッド低く) したい
    • データ構造工夫したり、送信方法工夫したり?あとは言語処理系がわのインターフェイスについても考える必要があるかもしれない。修論直前にねばったけどだめたった。。。
  • ログ的なものを送れるようにする
  • 手軽に使えるような機能を考える
    • コンソールで完結するとか?
  • もっとコードを綺麗にしなければ・・・
  • アボートすんなよ
  • Viewを拡張可能にする
  • ドキュメント・ソースコードのコメントとかをもっと整備する

一歩一歩。

僕とスナガラボの今後

さきほども書いたように、当面はいろいろと模索しつつ、営業しつつ、仕事しつつ、まぁほそぼそと。

なんかこう、ゆくゆくは情報技術を活用した地域分散を一つの軸としていって、その最前線として “離島” を絡めた仕事ができるといいですね。現状、一体何をするんだって感じですが。

ま、人生なにがあるか分かりません。

Permalink to single post

[gentoo] Firefox 11.0のコンパイルできなかった

emergeすると謎のinternal compiler error:

# emerge -av firefox

(・・・中略・・・)

x86_64-pc-linux-gnu-g++ -o SpdySession.o -c -I../../../dist/stl_wrappers -I../../../dist/system_wrappers -include /var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/config/gcc_hidden.h -DMOZILLA_INTERNAL_API -D_IMPL_NS_COM -DEXPORT_XPT_API -DEXPORT_XPTC_API -D_IMPL_NS_GFX -D_IMPL_NS_WIDGET -DIMPL_XREAPI -DIMPL_NS_NET -DIMPL_THEBES  -DSTATIC_EXPORTABLE_JS_API -DOSTYPE=\”Linux3.2\” -DOSARCH=Linux -DEXCLUDE_SKIA_DEPENDENCIES  -DOS_LINUX=1 -DOS_POSIX=1  -DIMPL_NS_NET -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http/../../base/src -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/xpcom/ds -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/content/base/src -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/content/events/src  -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/ipc/chromium/src -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/ipc/glue -I../../../ipc/ipdl/_ipdlheaders  -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http -I. -I../../../dist/include -I../../../dist/include/nsprpub  -I/usr/include/nspr -I/usr/include/nss      -fPIC -fno-rtti -Wall -Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wcast-align -Wno-invalid-offsetof -Wno-variadic-macros -Werror=return-type -pipe -march=core2 -mtune=core2 -mno-avx -fno-exceptions -fno-strict-aliasing -fshort-wchar -pthread -pipe -DNDEBUG -DTRIMMED -g -Os -freorder-blocks  -fomit-frame-pointer   -DMOZILLA_CLIENT -include ../../../mozilla-config.h -MD -MF .deps/SpdySession.pp /var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http/SpdySession.cpp
In file included from ../../../dist/include/nsAutoPtr.h:48,
from ../../../dist/include/gfxPattern.h:46,
from ../../../dist/include/IPC/IPCMessageUtils.h:54,
from ../../../ipc/ipdl/_ipdlheaders/mozilla/net/PNecko.h:14,
from ../../../ipc/ipdl/_ipdlheaders/mozilla/net/PNeckoChild.h:9,
from ../../../dist/include/mozilla/net/NeckoChild.h:44,
from /var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http/nsHttp.h:60,
from ../../../dist/include/mozilla/net/HttpChannelParent.h:45,
from /var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http/HttpChannelParent.cpp:41:
../../../dist/include/nsCOMPtr.h: In function ‘nsQueryInterface do_QueryInterface(nsISupports*)’:
../../../dist/include/nsCOMPtr.h:316: internal compiler error: in tree_nrv, at tree-nrv.c:143
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugs.gentoo.org/> for instructions.

いろいろと調べるとgccのバグのもよう。しかも修正済みなんですね。

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41153

以前なんかのバグでgcc 4.4に戻してからそのままにしてしまってた。gcc 4.5でコンパイルしてみる。

# gcc-config 4.5.3
* Switching native-compiler to x86_64-pc-linux-gnu-4.5.3 …
>>> Regenerating /etc/ld.so.cache…                                                                                [ ok ]

* If you intend to use the gcc from the new profile in an already
* running shell, please remember to do:

*   . /etc/profile

# . /etc/profile
# emerge -av firefox

(・・・ 中略 ・・・)

>>> Original instance of package unmerged safely.
* Updating desktop mime database …
* Updating icons cache …                                                                                        [ ok ]
>>> www-client/firefox-11.0 merged.

まあ出来ますわな。

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41153