view paper/slides/sample.html @ 42:affad4dda4cf

fix slide
author suruga
date Thu, 22 Feb 2018 05:12:57 +0900
parents cd2d73cb6b2c
children 3763786f1680
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8">
   <title>分散版 Jungle データベースの性能測定方法</title>

<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.4.0 (2016-12-24) [x86_64-darwin14]">
<meta name="author"    content="仲松栞" >

<!-- style sheet links -->
<link rel="stylesheet" href="s6/themes/projection.css"   media="screen,projection">
<link rel="stylesheet" href="s6/themes/screen.css"       media="screen">
<link rel="stylesheet" href="s6/themes/print.css"        media="print">
<link rel="stylesheet" href="s6/themes/blank.css"        media="screen,projection">

<!-- JS -->
<script src="s6/js/jquery-1.11.3.min.js"></script>
<script src="s6/js/jquery.slideshow.js"></script>
<script src="s6/js/jquery.slideshow.counter.js"></script>
<script src="s6/js/jquery.slideshow.controls.js"></script>
<script src="s6/js/jquery.slideshow.footer.js"></script>
<script src="s6/js/jquery.slideshow.autoplay.js"></script>

<!-- prettify -->
<link rel="stylesheet" href="scripts/prettify.css">
<script src="scripts/prettify.js"></script>

<script>
  $(document).ready( function() {
    Slideshow.init();

    $('code').each(function(_, el) {
      if (!el.classList.contains('noprettyprint')) {
        el.classList.add('prettyprint');
      }
    });
    prettyPrint();
  } );

  
</script>

<!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
<!--[if IE]>
<script src="s6/js/jquery.microsoft.js"></script>
<![endif]-->



</head>
<body>

<div class="layout">
  <div id="header"></div>
  <div id="footer">
    <div align="right">
      <img src="s6/images/logo.svg" width="200px">
    </div>
  </div>
</div>

<div class="presentation">

  <div class='slide cover'>
    <table width="90%" height="90%" border="0" align="center">
      <tr>
        <td>
          <div align="center">
            <h1><font color="#808db5">分散版 Jungle データベースの性能測定方法</font></h1>
          </div>
        </td>
      </tr>
      <tr>
        <td>
          <div align="left">
            仲松栞
            琉球大学 工学部 情報工学科  河野研
            <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
          </div>
        </td>
      </tr>
    </table>
  </div>

<div class='slide '>
<!-- === begin markdown block ===

      generated by markdown/1.2.0 on Ruby 2.4.0 (2016-12-24) [x86_64-darwin14]
                on 2018-02-22 05:11:14 +0900 with Markdown engine kramdown (1.13.2)
                  using options {}
  -->

<!-- _S9SLIDE_ -->
<h1 id="section">研究背景</h1>
<ul>
  <li>スマートフォン等の普及により、Webサービスの利用者が増え、Webサーバーにかかる負荷も増大している</li>
  <li>この問題を解決する為に当研究室では、スケーラビリティを持つ分散データベースとしてJungleを開発している</li>
  <li>ここで言うスケーラビリティとは、複数のマシンに処理を分散させたりすることで、システムの処理能力を向上させる性能を指す</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-1">問題提起</h1>
<ul>
  <li>これまでJungleの分散性能を測定する方法はWebサーバー込みで行われていた</li>
  <li>Webサーバーを使用した測定方法は、Jungleに合わせたテストの準備が難しい</li>
  <li>また、出力結果がWebサーバーの性能に依存する為、Jungleの単体の分散性能を測定できなかった</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-2">研究目的</h1>
<ul>
  <li>Jungle単体の分散性能を測定できる環境を構築したい</li>
  <li>また、Jungleを用いるデータの伝搬方式や、トランザクションのmergeに関する研究開発をしやすくしたい</li>
  <li>本研究ではWebサーバーを取り除き、木構造に構築したJungleのノード上で、いくつかのノードから書き込みを伝搬させて、変更が全体に伝搬するまでの実験を行える環境を構築した</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="jungle">JUngleデータベースの構造</h1>
<ul>
  <li>一般的なウェブサイトの構造は大体が木構造であるため、データ構造として木構造を採
用している</li>
  <li>木の変更を非破壊で行なっている</li>
  <li>木の変更をLogとして持っている</li>
  <li>そのLogを通信することにより、木を分散させる</li>
  <li>Logの通信には当研究で開発している分散フレームワークAliceを用いている</li>
  <li>異なる変更履歴を1つにまとめるMergeという機能を持っている</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="jungle-1">Jungleの分散機構</h1>
<ul>
  <li>Jungleの分散機構はツリートポロジーを想定している</li>
  <li>ツリー型であれば、一度トップまでデータを伝搬させることで木全体のデータを同期できる</li>
</ul>

<div>
        <img src="./pictures/tree4.svg" alt="message" style="float: left;width: 50%;" />
        <div style="float: right; width: 50%;">
        <ol>
            <li>node1からnode0へデータが送られる</li>
            <li>node0でデータがupdateされ、そのデータがnode1,node2へ送られる</li>
            <li>node1からnode3,node4へデータが送られ、全体でデータの同期が完了する</li>
      </ol>
      </div>
      <div style="clear: both;"></div>
</div>

<div align="center"><img src="./pictures/tree2.svg" style="center" /></div>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-3">実験の準備</h1>
<ul>
  <li>Webサーバーを取り除いた、Jungleの純粋な性能を計測する環境を構築する</li>
  <li>学科のVM16台でPCクラスタを構築し、クラスタ上にジョブスケジューラーTORQUEを設定した</li>
  <li>他の利用者とリソースが競合しないよう、TORQUEジョブスケジューラーを利用している</li>
  <li>本研究で用いたVMの性能を以下に示す</li>
</ul>
<table style="border-collapse: collapse;border:1px solid #000000;">
        <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">マシン台数</th>
        <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">OS</th>
        <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">CPU</th>
        <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">Memory</th>

        <tr>
        <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">16台</td>
        <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">CentOS Linux release 7.2.1511 (Core) </td>
        <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">QEMU Virtual CPU 2.3GHz</td>
        <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">1GB</td>
        </tr>
</table>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="torque-resource-manager">TORQUE Resource Manager</h1>
<ul>
  <li>TORQUEはジョブスケジューラーであり、分散された複数のノードに一度にジョブを投入することができる為、本研究で採用した</li>
  <li>TORQUEはジョブを管理・投下・実行する3つの処理で構成されている</li>
  <li>ジョブの管理・投下を担うヘッダーノードから、ジョブの実行を担う計算ノードへジョブが投下される</li>
  <li>本実験では、TORQUEを用いて、計測用のスクリプトを15台のJungleに一度に投入するスクリプトを投入した</li>
</ul>

<div align="center"><img src="./pictures/torque2.svg" style="center" /></div>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="torque">TORQUEの使い方</h1>
<ul lang="c">
  <li>ジョブはqsubコマンドで投入する</li>
</ul>
<pre><code>$ qsub scripts/LogupdateTest-qsub.sh 
</code></pre>
<ul lang="c">
  <li>ジョブの処理状況はqstatコマンドで確認できる
    <ul>
      <li>Sは現在のジョブの処理状況を示し、Rは処理中であり、Cは処理完了を表している</li>
    </ul>
  </li>
</ul>
<pre><code>$ qstat

Job ID                    Name             User            Time Use  S Queue
------------------------- ---------------- ---------------  -------- - -----
563.tino-VM1              LogUpdateTest    ie-user                 0 C jungle 
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-4">これまでのまとめ</h1>
<ul>
  <li>以上が実験の環境についての説明である</li>
  <li>つづいて、このTORQUEを用いて、Jungleの分散性能を測定する</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-5">実験</h1>
<ul>
  <li>以下にJungleの分散性能を測定する手順を示す</li>
</ul>
<div>
        <img src="./pictures/gaiyou3.svg" alt="message" style="float: left;width: 50%;" />
        <div style="float: right; width: 50%;">
        <ul>
            <li>1台でTopologyManagerを起動し,残りの15台でJungleを1つずつ起動する</li>
            <li>TopologyManagerは指定されたトポロジーの情報に従い、接続先の情報をJungleノードに送る</li>
            <li>Jungleは送られてきた接続先のIPアドレス、ポート番号、接続名に従い、トポロジーを形成する</li>
            <li>1~7台の子ノードのJungleに書き込んだデータがrootノードのJungleへMergeし終わるまでの時間を計測する</li>
      </ul>
      </div>
      <div style="clear: both;"></div>
</div>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="topologymanager">TopologyManager</h1>
<ul>
  <li>TopologyManagerは、Aliceが持つネットワーク上の複数のサーバーノードにトポロジーを形成さる機能である</li>
  <li>TopologyManagerにトポロジーの内容が書かれたトポロジーファイルを渡すことで、任意のトポロジーを構成させることができる。</li>
  <li>本実験ではTopologyManagerにツリー型のトポロジーファイルを渡すことで、15台のJungleでツリートポロジーを構成させた。</li>
</ul>

<div align="center"><img src="./pictures/topologymanager6.svg" style="center" /></div>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-6">実験をするにあたりぶつかった問題点とその対処法</h1>
<ul>
  <li>ところが、TORQUEにジョブを投入しても、実験がうまくいかなかった</li>
  <li>原因は、Jungleには、自身の処理を終了させる機能が備わっていないことだった
    <ul>
      <li>Jungleがデータを書き込み終わる時に、TopologyManagerへnullLogを送るコードを実装した</li>
      <li>TopologyManagerはnullLogを受け取ることで、全てのノードがタスクを終了したことを確認する</li>
      <li>確認とともに、TopologyManagerはJungleへ”finish”を送り、テストを終了させる</li>
    </ul>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-7">実験の準備の為に行なったこと</h1>
<ul>
  <li>TORQUEに使用するperlスクリプトを用意した</li>
  <li></li>
  <li>また、環境構築の際に、JungleとAliceは異なるパッケージで作られていた為、バージョンがズレていた
    <ul>
      <li>mavenリポジトリのキャッシュをクリアし、アップデートを行うことで修正した</li>
    </ul>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-8">まとめと今後の課題</h1>
<ul>
  <li>本研究ではJungleの分散性能の測定方法の提案と測定環境の構築を行なった</li>
  <li>それにあたり、Jungleが自身を終了させることができない問題が起きた
    <ul>
      <li>データ書き込みの最後にTopologyManagerにnullLogを送り、Jungleを終了させるコードを実装した</li>
    </ul>
  </li>
  <li>今回構築した測定環境で、現在のJungleのmergeや分散アルゴリズムを研究したい</li>
  <li>再接続時に、Jungleのノードのデータを再ロードできるプロトコルを定義したい
    <ul>
      <li>方法としては、他のノード、もしくはディスクからデータを読み込む</li>
    </ul>
  </li>
  <li>ディスク上にあるJungleの木を読み出すプロトコルを定義したい</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="alice">分散フレームワークAlice</h1>
<ul>
  <li>Aliceは当研究室で開発している並列分散フレームワークである</li>
  <li>
    <p>Alice は、ネットワーク上の複数のサーバーノードにトポロジーを形成させ、通信する機能を提供する</p>
  </li>
  <li>本実験では、Aliceを用いて15台のJungleにツリートポロジーを形成させ、子ノードとJungleノード間&gt;のデータの通信を行なった</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-9">計測結果(1/2)</h1>
<ul lang="c">
  <li>1台に書き込み/1回書き込み</li>
</ul>
<pre><code>TopologymanagerTime = 5285

hostname: node6  time  = 214 
</code></pre>
<ul lang="c">
  <li>7台に書き込み/1回書き込み</li>
</ul>
<pre><code>TopologymanagerTime = 5115

hostname: node9  time  = 98 

</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-10">計測結果(2/2)</h1>
<ul lang="c">
  <li>1台に書き込み/100回書き込み</li>
</ul>
<pre><code>TopologymanagerTime = 5425

hostname: node14  time  = 278 
hostname: node14  time  = 210 
           ...
hostname: node14  time  = 5 
hostname: node14  time  = 4 
</code></pre>
<ul lang="c">
  <li>7台に書き込み/100回書き込み</li>
</ul>
<pre><code>TopologymanagerTime = 5351

hostname: node10  time  = 290 
hostname: node10  time  = 209 
           ...
hostname: node10  time  = 17 
hostname: node10  time  = 16
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 lang="c" id="section-11">ジョブスクリプト</h1>
<pre><code>#!/bin/sh
#PBS -q jungle
#PBS -N LogUpdateTest
#PBS -l nodes=16,walltime=00:08:00

cd /mnt/data/jungle_workspace/Log
/usr/bin/perl /mnt/data/jungle_workspace/scripts/LogupdateTest.pl
</code></pre>
<ul>
  <li>-q … queueを指定。</li>
  <li>-N … 実行結果の出力ファイル名</li>
  <li>nodes … 使用するnodeの台数、</li>
  <li>walltime … 実行制限時間</li>
  <li>Logディレクトリに移動し,今回政策したperlスクリプトを実行している</li>
  <li>実行結果がLogディレクトリに吐き出される</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 lang="c" id="perl">perlスクリプト</h1>
<pre><code>mysystem("cd $jungleDir; ruby scripts/tree.rb $nodeNum &gt; scripts/tree.dot");
mkdir "$logFile";
mysystem("ssh $nodes[0] \"cd $logFile;java -cp ../../build/libs/logupdateTest-1.1.jar alice.topology.manager.TopologyManager -conf ../../scripts/tree.dot -p 10000 --showTime --noKeepAlive &gt; $logNum\" ",1);
$logNum++;
sleep 10;
for my $i (1..($#nodes-7)) {
  mysystem("ssh $nodes[$i] \"cd $logFile;java -jar ../../build/libs/logupdateTest-1.1.jar -host $nodes[0] -p 10003 -port 10000  --noKeepAlive &gt; $logNum\" &amp; ");
  $logNum++;
}

for my $j (($#nodes-6)..($#nodes)){
mysystem("ssh $nodes[$j] \"cd $logFile;java -jar ../../build/libs/logupdateTest-1.1.jar -host $nodes[0] -p 10003 -port 10000  -write -count 100 --noKeepAlive &gt; $logNum\" &amp;" );
}
for (@wait) {
    wait; #1がついている部分だけweit TopologyManagerだけweit 
}
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-12">その言葉を待っていました</h1>
<ul>
  <li>開発中です</li>
</ul>

<!-- === end markdown block === -->
</div>


</div><!-- presentation -->
</body>
</html>