IIJ Technical WEEK 2012 Day1 #iij_tw2012

IIJのエンジニアによるイベント「IIJ Technical WEEK 2012」初日の模様です。 http://techlog.iij.ad.jp/archives/545 *Stratosphereが提供するSDN/OpenFlow技術の現在と未来 *IIJのコンテナデータセンターの運用実績と新規研究開発 *クラウド基盤を支える要素技術 続きを読む
15
前へ 1 ・・ 5 6 次へ
まつもとりー / Ryosuke Matsumoto @matsumotory

軽量スレッドの軽量の定義は10万個起動しても大丈夫という意味 #iij_tw2012

2012-11-14 16:49:41
堂前@IIJ @IIJ_doumae

なぜHaskellか?Haskellのスレッドは軽量・安全。ここで軽量とは「10万個起動しても大丈夫」というイメージ。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 16:49:52
堂前@IIJ @IIJ_doumae

カーネルによるコンテキストスイッチではなく、ユーザプログラムがコンテキストスイッチを起こすものを「軽量」と呼びたい。軽量プロセス→Erlang、軽量スレッド→Haskellで実現されている。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 16:51:34
堂前@IIJ @IIJ_doumae

「関数型言語だから軽量スレッド・プロセスがつくれるのか?」去年質問されて1年間考えた。結局関数型プログラミングには破壊的代入がないので、実現できたのではないかと考えている。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 16:52:35
堂前@IIJ @IIJ_doumae

ネイティブスレッド。複数スレッドを作っておけばカーネルが勝手にコアに割り振ってくれる。ただしコンテキストスイッチが発生するので性能が出ない。そこで最近はイベント駆動に注目が集まっている。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 16:55:11
堂前@IIJ @IIJ_doumae

イベント駆動はコアあたりの性能は出るが、複数のコアを有効に活用できない。(コアの数だけプロセス上げればいいとも言うが…)イベントハンドラのせいでコードの見通しも悪くなる。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 16:56:10
まつもとりー / Ryosuke Matsumoto @matsumotory

Haskellの軽量スレッド使うとイベント駆動の上に軽量スレッドのせられるのでコードの見通しが良いのか。こうみるといい感じだな。 #iij_tw2012

2012-11-14 16:56:48
堂前@IIJ @IIJ_doumae

非同期例外。他のスレッドにとって自分が殺される。それを補足したい。Haskellでは魔法のようなTimeout関数を使うことで「タイムアウトしたら失敗」を検知できる。他の言語よりも実現しやすい。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 16:59:21
まつもとりー / Ryosuke Matsumoto @matsumotory

プールされたプロセスとスレッドの差ってTLBのフラッシュの差とかでコンテキストスイッチの処理に差がでるけど、軽量プロセスと軽量スレッドの差は資源を共有するかどうかの差だけ? #iij_tw2012

2012-11-14 16:59:43
堂前@IIJ @IIJ_doumae

高速化のためにやったこと。システムコールを呼ぶとすべての軽量スレッドが止まるので、最小限に。汎用的な思いライブラリを書き換えて高速化。知らないうちにロックされていることがあるので、それを回避する。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:00:26
堂前@IIJ @IIJ_doumae

Warpのアーキテクチャ。システムコールがなるべく発生しないようにしている。もしファイルがキャッシュに乗っていれば、3つのシステムコールで応答を返せる。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:02:33
まつもとりー / Ryosuke Matsumoto @matsumotory

nginxみたいにマルチプロセスにイベント駆動のせてイベントハンドラ登録させるとコードの見通しが悪いってのを考えると、erlangの軽量プロセスとHaskellの軽量スレッドめっちゃ良い気がしてきた。しかし、これのデメリットはなんなんだろう? #iij_tw2012

2012-11-14 17:03:12
堂前@IIJ @IIJ_doumae

Linuxではstraceでシステムコールを観測できる。年中眺めていると無駄なcallが見つかる。連続してstatを投げているなど。1回にまとめて例外を捕まえる方が効率的。知らないうちにfutex()つかてったり #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:04:11
まつもとりー / Ryosuke Matsumoto @matsumotory

accept4はノンブロッキングなacceptですね。apache2.4のeventはこの部分がブロッキングだった #iij_tw2012

2012-11-14 17:04:58
堂前@IIJ @IIJ_doumae

nginxのstraceをよく眺めている。知らないシステムコールを見つけることも。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:05:38
堂前@IIJ @IIJ_doumae

ベンチマークツール。Apache Bench(ab)不安定。httperfメモリ管理がまずい。ベンチマークツール側が負けてしまうこともある。いまのところweighttpがおすすめ。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:06:47
まつもとりー / Ryosuke Matsumoto @matsumotory

「ベンチマークツールはabはおすすめしない。httperfもabもselect使ってるから、サーバ側が早くなるとベンチ側が先にダメになる。」確か、selectは監視するfdの数が1024で、シーケンシャルに舐めるからかなり遅いんだったかな? #iij_tw2012

2012-11-14 17:08:00
堂前@IIJ @IIJ_doumae

ベンチマークツールを駆使していると突然パフォーマンスが出ないケースに出くわすことも。1コネクションに制限するとスループットが出ない。1000コネクションで見ていると気づかない。1コネクションだと気づけた。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:08:16
堂前@IIJ @IIJ_doumae

haskellのコンパイラ。GHC(Glasgow Haskell Compiler)プロファイリングオプションがある。フォワグラウンドで、1プロセスの時しかプロファイルがとれない。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:10:56
堂前@IIJ @IIJ_doumae

HaskellのDate.Timeは汎用的な代わりに非効率。HTTPでは日付の書式が決まっているので、29文字限定でGMTでの表記に特化したライブラリを書いた。ログはstrftime()へのラッパーを経由して書く。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:13:54
山本和彦 @kazu_yamamoto

.@IIJ_doumae すいません。資料にタイポがありました。「Date.Time」→ 「Data.Time」 #iij_tw2012

2012-11-14 18:06:33
堂前@IIJ @IIJ_doumae

ロックの調査。Haskellではeventlogをとるツールがある。プログラムにログを出力するコードを挿入。出てきた結果をThreadScopeで可視化。これでロックの利用状況を把握。 #iij_tw2012 http://t.co/p3V6q3dq

2012-11-14 17:16:39
前へ 1 ・・ 5 6 次へ