Mercurial > hg > Papers > 2013 > sugi-thesis
view presen/index.html @ 13:db3b8eaba7b0 default tip
add presen
author | sugi |
---|---|
date | Fri, 22 Feb 2013 16:18:39 +0900 |
parents | b1f834cb90af |
children |
line wrap: on
line source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type="text/css"> tr.srctr { font-size:28px; } td.srctd { height:17em; } pre.srcbox { height: 100%; overflow: scroll; } .src{ overflow: scroll; width: 90%; height: 60%; } .center { margin-left: auto; margin-right: auto; text-align: center; } .textcenter { text-align: center; } .taninaritop { margin: auto; width: 95%; font-weight: bold; } </style> <title>2013/ 2/ 21</title> <!-- metadata --> <meta name="generator" content="S5" /> <meta name="version" content="S5 1.1" /> <meta name="presdate" content="20130221" /> <meta name="author" content="Yu SUGIMOTO" /> <meta name="company" content="University of the Ryukyu" /> <!-- meta temporary --> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <!-- configuration parameters --> <meta name="defaultView" content="slideshow" /> <meta name="controlVis" content="hidden" /> <!-- configuration extensions --> <meta name="tranSitions" content="true" /> <meta name="fadeDuration" content="500" /> <meta name="incrDuration" content="250" /> <!-- configuration autoplay extension --> <meta name="autoMatic" content="false" /> <Meta name="playLoop" content="true" /> <meta name="playDelay" content="10" /> <!-- configuration audio extension --> <meta name="audioSupport" content="false" /> <meta name="audioVolume" content="100" /> <meta name="audioError" content="false" /> <!-- configuration audio debug --> <meta name="audioDebug" content="false" /> <!-- style sheet links --> <link rel="stylesheet" href="ui/default_utf/slides.css" type="text/css" media="projection" id="slideProj" /> <link rel="stylesheet" href="ui/default_utf/outline.css" type="text/css" media="screen" id="outlineStyle" /> <link rel="stylesheet" href="ui/default_utf/print.css" type="text/css" media="print" id="slidePrint" /> <link rel="stylesheet" href="ui/default_utf/opera.css" type="text/css" media="projection" id="operaFix" /> <!-- embedded styles --> <style type="text/css" media="all"> .imgcon {width: 100%; margin: 0 auto; padding: 0; text-align: center;} #anim {width: 33%; height: 320px; position: relative;} #anim img {position: absolute; top: 0px; left: 0px;} </style> <!-- S5 JS --> <script src="ui/default_utf/slides.js" type="text/javascript"></script> </head> <body> <div class="layout"> <div id="controls"><!-- DO NOT EDIT --></div> <div id="currentSlide"><!-- DO NOT EDIT --></div> <div id="header"></div> <div id="footer"> <h1>琉球大学 卒業発表</h1> <h2>並列信頼研</h2> </div> </div> <div class="presentation"> <div class="slide"> <h1>分散ネットフレームワークAliceによる例題の作成</li> <h3></h3> <li>杉本 優 </li> <li>指導教官 河野 真治</li> <h4><a href="http://ie.u-ryukyu.ac.jp/" rel="external">琉球大学 並列信頼研究室</a></h4> <div class="handout"></div> </div> </div> <!-- PAGE --> <div class="slide"> <h1>研究目的</h1> <li>インターネット上のサービスは信頼性とスケーラビリティ両方が要求される</li> <li>信頼性とは定められた動作環境下で安定して機能を果たす</li> <li>スケーラビリティとはリソースの追加のみでサービスを維持する</li> <li>本研究室ではスケーラビリティと信頼性の両方を併せ持った分散ネットフレームワークAliceの開発を行っている</li> <li>必要なAPIが備わっているか、スケーラビリティがあるか調べる必要がある</li> <li><font color="#ff0000">本研究では、Aliceを使って分散アプリケーションを作成、スケーラビリティの実験を行った</font></li> </div> <!-- PAGE --> <div class="slide"> <h1>Alice</h1> <h2>データをData Segmentで表現し、処理をCode Segmentで表現</h2> <ul> <li>Code Segmentはタスクを細かく分割したもの</li> <br> <p class="center"> <object type="image/svg+xml" data="obj/svg/dsandcs2.svg" viewbox="0 0 700 700" id="vgID"></object> </p> <h2>Code Segmentに依存するData Segmentを記述する</h2> </ul> </ul> </div> <!-- PAGE --> <div class="slide"> <h1>Data Segment API (1) put ,update</h1> <ul> <li>Data Segmentをデータベース的に利用</li> <li>4つのAPIを使って操作を行う</li> <table border="1" cellpadding="5" cellspacing="0"> <tr> <td> <img src="obj/svg/put.png" width=600 height=400> <!-- <object type="image/svg+xml" data="obj/svg/put.svg" viewbox="50 50 300 300" id="put"> </object> --> </td> <td> <img src="obj/svg/update.png" width=650 height=400> <!--<object type="image/svg+xml" data="obj/svg/update.svg" viewbox="50 50 300 300" id="update"> </object>--> </td> </tr> </table> <li>putとupdateはデータを追加、または更新を行う</li> </ul> </div> <!-- PAGE --> <div class="slide"> <h1>Data Segment API (2) peek ,take</h1> <ul> <li>peekとtakeはデータの取得、取得と削除を行う</li> <table border="1" cellpadding="5" cellspacing="0"> <tr> <td> <img src="pix/peek.png" width=500 height=400> </td> <td> <img src="pix/take.png" width=500 height=400> </td> </tr> </table> <li>これら4つのAPIで分散アプリケーションが書けるのかどうかを調べる</li> </ul> </div> <!-- PAGE --> <div class="slide"> <h1>水族館ゲーム</h1> <h2>目的</h2> <ul> <li>AliceにAPIが揃っているか、スケーラビリティを有しているか調べる</li> </ul> <h2>内容</h2> <ul> <li>魚の情報をゲームに参加するClient全体で共有し、複数のディスプレイに異なる視点で表示される</li> <p class="center"> <img src="pix/for_Fx.png" width=600 height=300> </p> </ul> </div> <!-- PAGE --> <div class="slide"> <h1>データ伝搬のしくみ</h1> <p class="center"> <img src="pix/Alice.png" width=500 height=600> </p> </div> <!-- PAGE --> <div class="slide"> <h1>実験</h1> <h2>実験概要</h2> <ul> <li>仮想クラスタサーバーをツリー状に構成する</li> <li>トップノードからData Segmentを送信して、トップノードに戻ってくるまでの時間を測定</li> <p class="center"> <object type="image/svg+xml" data="obj/svg/experience.svg" viewbox="50 50 900 900" id="vgID"> </object> </p> 構成するツリーを様々な形に変えて測定を行った。 </ul> </div> <!-- PAGE --> <div class="slide"> <h1>実験</h1> <h2>実験環境</h2> <ul> <h2>VMwareとKVMの2つの環境を用意</h2> <li>共にTORQUE Resource Managerを用いてジョブスケジュール</li> <p> VMware <li>ブレードサーバー8台(CPU Intel(R) Xeon(R) X5650 @2.64 仮想24コア)</li> <li>仮想クラスタサーバー44台(仮想4コア)</li> </p> <p> KVM <li>ブレードサーバー3台(CPU Intel(R) Xeon(R) X5650 @2.64 仮想24コア)</li> <li>仮想クラスタサーバー16台(仮想4コア)</li> </p> </ul> </div> <div class="slide"> <h1>4分木の図の一部</h1> <img src="pix/child4.png" width=1500 height=500> </div> <!-- PAGE --> <div class="slide"> <h1>実行結果(1) - 44 台で構成 (VMware)</h1> <table border="1" cellpadding="5" cellspacing="0"> <tr> <td> <img src="pix/cs-result.png" width=800 height=600> </td> <td> <object type="image/svg+xml" data="obj/svg/bar.svg" viewbox="50 50 300 300" id="vgID"> </object> </td> </tr> </table> </div> <div class="slide"> <h1>実行結果(2) - 16 台で構成 (VMawre,KVM)</h1> 16台でトポロジーを構成する際にはすべてをトップノードに接続をかけたほうが効果的である <p class="center"> <img src="pix/compare.png" width=800 height=500> </p> </div> <!-- PAGE --> <div class="slide"> <h1>考察</h1> <ul> <li>現状では階層を1段増やす(間に1台追加)ごとに2ms程度遅くなる</li> <li>1台に接続させる数が多くても、階層を増やし過ぎても逆効果</li> <li>44台では階層を3段、1つあたりに接続させる最大のノードは4が効果的</li> <table border="1" cellpadding="5" cellspacing="0"> <tr> <td> <img src="pix/child3-2.png" width=600 height=400> </td> <td> <img src="pix/child4-2.png" width=600 height=400> </td> </tr> </table>> </ul> </div> <!--PAGE--> <div class="slide"> <h1>APIの評価</h1> <h2>setKeyのシンタックス的な問題</h2> <ul> <li>setKey()を呼ぶとData Segmentの取得を行う。必要なData Segmentが揃った時点でCode Segmentが実行</li> <li>コンストラクタ内でsetKeyを行なっているが、コンストラクタとsetKeyをする場所を分ける必要がある</li> </ul> <pre class="srcbox"> public class CheckLocalIndex extends CodeSegment { private Receiver data = ids.create(CommandType.PEEK); private Object obj; public CheckLocalIndex(String key, Object obj){ this.data.setKey("local", key); this.obj = obj; } </pre> </div> <div class="slide"> <h1>まとめ</h1> <ul> <li>現状のAliceで分散アプリケーションを作成するためのAPIが揃っていることを確認する事ができた</li> <li>44台の場合、Aliceによってツリー状のネットワークを構築することでスケーラビリティを確認する事ができた</li> <li>しかし、インターネット上のサービスの場合、参加するユーザの数は膨大であるので、ツリートポロジーに参加する台数を増やしたり、共有する魚のData Segmentの数を増やして検証する必要がある。</li> <li>また、16台ではツリー状に構成するよりも1台に集中させたほうがよかった。</li> </ul> </div> <!-- PAGE --> <div class="slide"> <h1>KVMが遅い理由</h1> <table border="1" cellpadding="5" cellspacing="0"> <tr> <td> <img src="pix/question.png" width=500 height=500> </td> <td> <ol> <font size="5"> <li>ゲストがI/O命令を発行する</li> <li>ホストカーネルが命令をトラップし、仮想マシンのユーザー空間に遷移する</li> <li>仮想マシンのユーザー空間でゲストに代わってI/Oを初期化する</li> <li>仮想マシンのユーザー空間からカーネルに制御が戻る</li> <li>カーネルがゲストコードを再開する</li> </font> </ol> </td> </tr> </table> </div> <div class="slide"> <h1>原因</h1> <ul> <li>標準のI/Oの性能が良くない</li> <li>KVMのゲスト環境では、CPUのキャッシュメモリーにヒットしなかった場合、qemu-kvm(ホスト環境上で動くユーザープロセス)のメモリー空間に割り当てられたメインメモリーにアクセスすることになるが、アクセス処理が複雑になるため、オーバーヘッドが大きい</li> </ul> <h2>改善方法</h2> <ul> <li>I/Oを司るデバイスドライバを準仮想化で動作させることで性能を向上させることができる</li> <li>Virtio-KVMを使用することで1.5倍程度性能を向上させることができるもよう</li> </ul> </div> </body> </html>