Mercurial > hg > Papers > 2013 > sugi-sigos
view presen/index.html @ 10:5c57e35e19b6
add presen
author | sugi |
---|---|
date | Tue, 23 Apr 2013 23:31:26 +0900 |
parents | |
children | 57b1c4692d21 |
line wrap: on
line source
<!-- Google IO 2012/2013 HTML5 Slide Template Authors: Eric Bidelman <ebidel@gmail.com> Luke Mahé <lukem@google.com> URL: https://code.google.com/p/io-2012-slides --> <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="chrome=1"> <!--<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">--> <!--<meta name="viewport" content="width=device-width, initial-scale=1.0">--> <!--This one seems to work all the time, but really small on ipad--> <!--<meta name="viewport" content="initial-scale=0.4">--> <meta name="apple-mobile-web-app-capable" content="yes"> <link rel="stylesheet" media="all" href="theme/css/default.css"> <link rel="stylesheet" media="only screen and (max-device-width: 480px)" href="theme/css/phone.css"> <base target="_blank"> <!-- This amazingness opens all links in a new tab. --> <script data-main="js/slides" src="js/require-1.0.8.min.js"></script> </head> <body style="opacity: 0"> <slides class="layout-widescreen"> <slide class="title-slide segue nobackground"> <!--<aside class="gdbar"><img src="images/google_developers_icon_128.png"></aside> The content of this hgroup is replaced programmatically through the slide_config.json. --> <hgroup> <h1 data-config-title><!-- populated from slide_config.json --></h1> <h2 data-config-subtitle><!-- populated from slide_config.json --></h2> <p data-config-presenter><!-- populated from slide_config.json --></p> </hgroup> </slide> <slide> <hgroup> <h2>研究背景</h2> </hgroup> <article> <ul> <li>分散プログラムには信頼性とスケーラビリティが必要である</li> <li>しかし、両方を兼ね備えたプログラムを作成することは容易ではない</li> <li>そこで、当研究室では信頼性とスケーラビリティの両方をもったプログラムの記述をサポートする、分散フレームワークAliceを開発を行なっている</li> <li>Aliceはデータとタスクを細かく分割したDataSegment、CodeSegmentでプログラム記述する</li> <li>DataSegment、CodeSegmentで記述することにより高い並列処理を行うことができる</li> <li>Aliceの並列性能を確認するためbitonic Sortを実装したが、実行速度に問題があったため、 本論文では実行速度の改善を試みた</li> </ul> </article> </slide> <slide> <hgroup> <h2>Code Segment</h2> </hgroup> <article> <ul> </ul> </article> </slide> <slide> <hgroup> <h2>Data Segment</h2> </hgroup> <article> <p>DataSegmentはデータを細かくしたものであり、以下のAPIで操作を行う</p> </article> </slide> <slide> <hgroup> <h2>実行速度の問題</h2> </hgroup> <article> <p>Aliceは先行研究であるFederated Lindaよりも処理速度が遅い。<br> 作成した例題によりOverHeadの原因が見つかっている</p> <ul> <li>Message Packによる型変換</li> <li>SEDA Architecture</li> <li>Output Data Segmentの作成時のコピー</li> </ul> </article> </slide> <slide> <hgroup> <h2>Message Pack</h2> </hgroup> <article> <p>シリアライズライブラリの一種。<br> シリアライズされたデータにオブジェクトの型情報を併せて埋め込むため、<br> IDL(インターフェース定義ファイル)を用意する必要がない。<br> 異なる言語間でオブジェクトを交換可能<br> MessagePack for Java のVersion 0.6からValue型が追加されており、<br>オブジェクトを動的型付け可能</p> <ul> <li>MessagePackを使用することで他のノードとData Segmentの送受信が高速に行うことができる</li> <li>AliceはData SegmentをQueueに追加する際にValue型に変換</li> <li>アノテーションをつけることにより既存のData Segmentと互換性を保ったまま拡張することができる</li> </ul> </article> </slide> <slide> <hgroup> <h2>Message Packの問題</h2> </hgroup> <article> <p>分散プログラムにおいて、常にVersionが同じとは限らない。<br> 旧Versionとの互換性のため、Value型に変換している。<br> しかし、追加するタイミングで変換を行うと、外部と通信を行わない<br> DataSegmentに対しても型変換を行う</p> Sortなどの配列をValue型に変換する場合は要素の数が増えるほど、<br> 変換する時間が増加する。 <ul> </ul> </article> </slide> <slide> <hgroup> <h2>SEDA Architecture</h2> </hgroup> <article> <p>マルチコアを活かすためにAliceではSEDA Architectureを採用している。 <br>SEDAとはマルチコアスレッドを用いて大量の接続を管理し、<br> データを処理毎に分けられたステージと呼ばれるスレッドで処理を行う。</p> Aliceでは <ul> <li>putやtakeなどの要求に沿ったCommandを作成するステージ</li> <li>Commandを処理するステージ</li> <li>DataSegmentをCodeSegmentにセットするステージ</li> </ul> の3つのステージで構成されている。 </article> </slide> <slide> <hgroup> <h2>SEDAの問題点</h2> </hgroup> <article> <p>SEDAは多段のパイプラインによって構成されるためレスポンスが遅れる。<br> スループット重視の実装であるため、レスポンスが要求される<br> Sortのようなプログラムに向いていない。<br> 非力なマシーンでは、スレッドを切り替えが頻繁に起こり、<br> レスポンスを下げる要因になる。</p> </article> </slide> <slide> <hgroup> <h2>LinkedBlockingQueue</h2> </hgroup> <article> <p>今回、SEDA Architectureを実装するにあたりJavaのLinkedBlockingQueueを使用している。</p> 特徴として <ul> <li>LinkedBlockingQueueは片方向の連結リストを使用したQueue</li> <li>enqueue/dequeueの操作時は排他制御は別々のlockで管理</li> <li>enqueueとdequeueの操作を並列に行うことが可能(スループットに優れている)</li> </ul> </article> </slide> <slide> <hgroup> <h2>Output Data Segment作成時のコピー</h2> </hgroup> <article> CodeSegmentはDataSegmentを取得するとActiveになる。<br> 取得されたDataSegmentはCodeSegmentによって変更され、<br> Output Data Segmentとして出力される。<br> この際、変更されたDataSegmentをコピーし、新しくDataSegmentを作成する。<br> このコピーにかかる時間がオーバーヘッドとなっている。 <ul> <li></li> </ul> </article> </slide> <slide> <hgroup> <h2>問題に対する改善案</h2> </hgroup> <article> <ul> <li>MessagePack</li> MessagePackによるValue型に変換が必要なケースは、<br> 他のノードに対してData Segmentを送信する場合である。<br> DataSegmentを追加するタイミングでValue型に変換せず、<br> メッセージを送信する前に変換を行えばよい。 <p></p> <li>SEDA Architecture</li> Sortのようなにレスポンスが必要なプログラムのために、SEDAのステージ上ではなく、 直接DataSegmentを取得するAPIを用意する <p></p> <li>Output Data Segment作成時におけるコピー</li> Data SegmentはCode Segment内ではReceiverという変数が保持している。 </ul> </article> </slide> <slide> <hgroup> <h2>Slide with Image (Centered horz/vert)</h2> </hgroup> <article class="flexbox vcenter"> <img src="images/barchart.png" alt="Description" title="Description"> <footer class="source">source: place source info here</footer> </article> </slide> <slide> <hgroup> <h2>Table Option A</h2> <h3>Subtitle Placeholder</h3> </hgroup> <article> <table> <tr> <th></th><th>Column 1</th><th>Column 2</th><th>Column 3</th><th>Column 4</th> </tr> <tr> <td>Row 1</td><td>placeholder</td><td class="highlight">placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <td>Row 2</td><td>placeholder</td><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <td>Row 3</td><td>placeholder</td><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <td>Row 4</td><td>placeholder</td><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <td>Row 5</td><td>placeholder</td><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> </table> </article> </slide> <slide> <hgroup> <h2>Table Option A (Smaller Text)</h2> <h3>Subtitle Placeholder</h3> </hgroup> <article class="smaller"> <table> <tr> <th></th><th>Column 1</th><th>Column 2</th><th>Column 3</th><th>Column 4</th> </tr> <tr> <td>Row 1</td><td>placeholder</td><td class="highlight">placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <td>Row 2</td><td>placeholder</td><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <td>Row 3</td><td>placeholder</td><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <td>Row 4</td><td>placeholder</td><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <td>Row 5</td><td>placeholder</td><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> </table> </article> </slide> <slide> <hgroup> <h2>Table Option B</h2> <h3>Subtitle Placeholder</h3> </hgroup> <article> <table class="rows"> <tr> <th>Header 1</th><td>placeholder</td><td class="highlight">placeholder</td><td>placeholder</td> </tr> <tr> <th>Header 2</th><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <th>Header 3</th><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <th>Header 4</th><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> <tr> <th>Header 5</th><td>placeholder</td><td>placeholder</td><td>placeholder</td> </tr> </table> </article> </slide> <slide> <hgroup> <h2>Slide Styles</h2> </hgroup> <article class="smaller"> <div class="columns-2"> <ul> <li class="red">class="red"</li> <li class="red2">class="red2"</li> <li class="red3">class="red3"</li> <li class="blue">class="blue"</li> <li class="blue2">class="blue2"</li> <li class="blue3">class="blue3"</li> <li class="green">class="green"</li> <li class="green2">class="green2"</li> </ul> <ul> <li class="green3">class="green3"</li> <li class="yellow">class="yellow"</li> <li class="yellow2">class="yellow2"</li> <li class="yellow3">class="yellow3"</li> <li class="gray">class="gray"</li> <li class="gray2">class="gray2"</li> <li class="gray3">class="gray3"</li> <li class="gray4">class="gray4"</li> </ul> </div> <div class="centered" style="margin-top:2em"> I am centered text with a <button>Button</button> and <button disabled>Disabled</button> button. </div> </article> </slide> <slide class="segue dark nobackground"> <aside class="gdbar"><img src="images/google_developers_icon_128.png"></aside> <hgroup class="auto-fadein"> <h2>Segue Slide</h2> <h3>Subtitle Placeholder</h3> </hgroup> </slide> <slide class="fill nobackground" style="background-image: url(images/sky.jpg)"> <hgroup> <h2 class="white">Full Image (with Optional Header)</h2> </hgroup> <footer class="source white">www.flickr.com/photos/25797459@N06/5438799763/</footer> </slide> <slide class="segue dark quote nobackground"> <aside class="gdbar right bottom"><img src="images/google_developers_icon_128.png"></aside> <article class="flexbox vleft auto-fadein"> <q> This is an example of quote text. </q> <div class="author"> Name<br> Company </div> </article> </slide> <slide> <hgroup> <h2>Slide with Iframe</h2> </hgroup> <article> <iframe data-src="http://www.google.com/doodle4google/history.html"></iframe> </article> </slide> <slide> <article> <iframe data-src="http://www.google.com/doodle4google/history.html"></iframe> </article> </slide> <slide class="thank-you-slide segue nobackground"> <aside class="gdbar right"><img src="images/google_developers_icon_128.png"></aside> <article class="flexbox vleft auto-fadein"> <h2><Thank You!></h2> <p>Important contact information goes here.</p> </article> <p class="auto-fadein" data-config-contact> <!-- populated from slide_config.json --> </p> </slide> <slide class="logoslide dark nobackground"> <article class="flexbox vcenter"> <span><img src="images/google_developers_logo_white.png"></span> </article> </slide> <slide class="backdrop"></slide> </slides> <script> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXXXXX-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <!--[if IE]> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script> <script>CFInstall.check({mode: 'overlay'});</script> <![endif]--> </body> </html>