Mercurial > hg > Papers > 2014 > masakoha-sigos
changeset 31:9b043cb87ee9
add some experiments result
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 08 May 2014 02:20:01 +0900 |
parents | 110e54772bf9 |
children | a33defe57134 |
files | paper/images/sigos.graffle slide/index.html |
diffstat | 2 files changed, 205 insertions(+), 95 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/images/sigos.graffle Tue May 06 15:01:45 2014 +0900 +++ b/paper/images/sigos.graffle Thu May 08 02:20:01 2014 +0900 @@ -26,7 +26,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2014-04-22 06:21:56 +0000</string> + <string>2014-05-06 07:26:15 +0000</string> <key>Modifier</key> <string>MasaKoha</string> <key>NotesVisible</key> @@ -856,8 +856,8 @@ <integer>38</integer> <key>Points</key> <array> - <string>{135.49983525886029, 70.24251661658981}</string> - <string>{193.01095137839275, 68.765772274133369}</string> + <string>{135.49983442492646, 70.240596872431169}</string> + <string>{193.01078976353338, 68.760114008544122}</string> </array> <key>Style</key> <dict> @@ -14588,6 +14588,94 @@ <key>VPages</key> <integer>1</integer> </dict> + <dict> + <key>ActiveLayerIndex</key> + <integer>0</integer> + <key>AutoAdjust</key> + <true/> + <key>BackgroundGraphic</key> + <dict> + <key>Bounds</key> + <string>{{0, 0}, {558.99997329711914, 783}}</string> + <key>Class</key> + <string>SolidGraphic</string> + <key>ID</key> + <integer>2</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + </dict> + <key>BaseZoom</key> + <integer>0</integer> + <key>CanvasOrigin</key> + <string>{0, 0}</string> + <key>ColumnAlign</key> + <integer>1</integer> + <key>ColumnSpacing</key> + <real>36</real> + <key>DisplayScale</key> + <string>1 0/72 in = 1.0000 in</string> + <key>GraphicsList</key> + <array/> + <key>GridInfo</key> + <dict/> + <key>HPages</key> + <integer>1</integer> + <key>KeepToScale</key> + <false/> + <key>Layers</key> + <array> + <dict> + <key>Lock</key> + <string>NO</string> + <key>Name</key> + <string>レイヤー 1</string> + <key>Print</key> + <string>YES</string> + <key>View</key> + <string>YES</string> + </dict> + </array> + <key>LayoutInfo</key> + <dict> + <key>Animate</key> + <string>NO</string> + <key>circoMinDist</key> + <real>18</real> + <key>circoSeparation</key> + <real>0.0</real> + <key>layoutEngine</key> + <string>dot</string> + <key>neatoSeparation</key> + <real>0.0</real> + <key>twopiSeparation</key> + <real>0.0</real> + </dict> + <key>Orientation</key> + <integer>2</integer> + <key>PrintOnePage</key> + <false/> + <key>RowAlign</key> + <integer>1</integer> + <key>RowSpacing</key> + <real>36</real> + <key>SheetTitle</key> + <string>キャンバス 10</string> + <key>UniqueID</key> + <integer>10</integer> + <key>VPages</key> + <integer>1</integer> + </dict> </array> <key>SmartAlignmentGuidesActive</key> <string>YES</string> @@ -14598,7 +14686,7 @@ <key>WindowInfo</key> <dict> <key>CurrentSheet</key> - <integer>7</integer> + <integer>8</integer> <key>ExpandedCanvases</key> <array/> <key>Frame</key> @@ -14661,6 +14749,11 @@ <real>1.1299999952316284</real> <real>1</real> </array> + <array> + <string>キャンバス 10</string> + <real>1.1299999952316284</real> + <real>1</real> + </array> </array> </dict> </dict>
--- a/slide/index.html Tue May 06 15:01:45 2014 +0900 +++ b/slide/index.html Thu May 08 02:20:01 2014 +0900 @@ -149,19 +149,14 @@ </tbody> </table> <p> - ファイルを読みながら、Word Count や grep などを<br> - 並列実行したい + ファイルを読みながら、Word Count や grep などを 並列実行したい。<br> + -> 本研究では Word Count にて実装を行った。 </p> <p> - 計算よりも読み込みを優先しなければならない。読み込みで待ちが入ってしまうので、IO Thread を追加 + 計算よりも読み込みを優先しなければならない。読み込みで待ちが入ってしまうので、IO Thread を追加。 </p> </div> - <!-- add slides here; example --> - <div class='cover'> - <h3>Cerium の例題 : WordCount</h3> - - </div> <div class='cover'> @@ -169,49 +164,46 @@ <br> <img src='images/includeIOTask.png' style="height:270px" align="middle"> <ol> - <li>ファイルをある一定の大きさで読み込む</li> - <li>読み込んだテキストファイルに対して、それぞれ計算を行う</li> - <li>計算した結果を集計する</li> + <li>ファイルをある一定の大きさずつ読み込む</li> + <li>読み込んだテキストファイルに対して、それぞれ WordCount を行う</li> + <li>WordCount の結果を集計する</li> </ol> </div> <div class='cover'> <h3>mmap の特徴</h3> - 従来では mmap を使って読み込んでいた - <table border="0" cellpadding="0" cellspacing="0"> - <tbody> - <tr> - <td><img src='images/mmap.png' style="height:350px" align="middle"></td> - <td> - <ul> - <font size = 5> - <li> - mmap は、ファイルを直接メモリ空間に map する。<br> - アクセスされたメモリ部分を OS が自動的に読み込む。<br> - </li> - <li> - code がシンプルだが、読み込み終わるまで待たされる。 <br> - </li> - </font> - </ul> - </td> - </tr> - </tbody> - </table> + + <img src='images/mmap.png' style="height:250px" align="middle" > + <br> + + <ul> + <li> + mmap は、仮想メモリ空間にファイルの中身を対応させ、そのメモリ空間に + アクセスされたら、 OS が読み込みを行う。<br> + </li> + <li> + code の記述はシンプルだが、スレッドが読み込み終わるまで待たされる。 <br> + </li> + <li> + 読み込みが OS 依存となるので、環境に左右されやすく、読み込みを細かく制御することが難しい。 + </li> + </ul> </div> <div class='cover'> <h3>読み込みながら計算を行う</h3> + <p>mmap を使用せずに、read を独立したスレッドで実行させる。そして、読み込んだ部分に対して Word Count を並列に起動する。 + </p> <br> <img src='images/divide_read.png' style="height:250px" align="middle" > <br> <ul> - <li> Read は 連続で動作しファイルを読み込む </li> - <li> Read の待ちは CPU を消費しない </li> - <li> 読み込み終わったブロックに対して、<br>並列 Task を起動する </li> + <li> read は全て読み込み終えるまで連続で動作しファイルを読み込む </li> + <li> read の待ちは CPU を消費しない </li> + <li> 読み込み終わったブロックに対して、Word Count を起動する </li> </ul> </div> @@ -224,11 +216,13 @@ <ul> <li> - Task を一度に生成するとメモリを圧迫する。<br> - Block 単位で徐々に起動していく。 + WordCount Task を一度に全て生成すると、その Task でメモリを圧迫する。 </li> <li> - Blocked Read Task が読み込み終わるまで、<br>Task Blockを待たせる + ある程度の数でまとめた Block という単位で徐々に Task を起動していく。 + </li> + <li> + 読み込んでいない部分に Word Count が走らないように、Blocked Read Task が読み込み終わるまで、Task Blockを待たせる。 </li> <li> 待ち合わせには Cerium の wait for を使用する。 @@ -236,25 +230,39 @@ </ul> </div> + +<!-- + <div class="cover"> + <h3>I/O 専用 thread の実装前</h3> + <br> + <img src='images/SPE_ANYblockread.png' style="height:300px"> + <ul> + <li> + Cerium では、各種 Task にデバイスの設定をすることができる。 + </li> + <li> + デバイスの設定を SPE_ANY で行うと、Cerium Task Manager 側で自動的に CPU を割り振ってくれる。 + </li> + <li> + 自動的に割り振ってしまうと、 Blocked Read の隙間に Word Count が割り込んでしまい、読み込みの時間が伸びてしまう。 + <font color=red>-> 自動的に割り振られないように、I/O専用 Thread を用意した。</font> + </li> + + </ul> + </div> +--> + <div class='cover'> <h3>I/O 専用 thread での Blocked Read の実装</h3> <br> - <img src='images/IO_0blockread.png' style="height:350px"> + <img src='images/IO_0blockread.png' style="height:300px"> <ul> - <li>Task とは別に Thread を割り当てているので、Read Task に割り込みが行われなくなる<br></li> - <li>pthread_setschedparam にて実装<br> + <li>Word Count とは別に Thread を割り当てているので、Blocked Read Task 間に Word Count が割り込まれることがない。</li> + <li>Thread レベルで割り込まれないように、pthread_setschedparam にて IO_0 の priority を設定している。<br> </li> </ul> </div> - <div class="cover"> - <h3>I/O 専用の thread を使用しない場合</h3> - <br> - <img src='images/SPE_ANYblockread.png' style="height:350px"> - <ul> - <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。 </li> - </ul> - </div> <div class='cover'> <h3>実験概要</h3> @@ -262,7 +270,7 @@ <ul> <li> Mac OS X 10.9.1</li> <li> 2*2.66 GHz 6-Core Intel Xeon</li> - <li> Memory 16GB 1333MHz DDR3</li> + <li> Memory 16GB</li> <li> HDD 1TB 7200 rpm SATA 3.0 Gbps </li> <li> ファイルに Word Count をかける</li> <li> ファイルの読み込みから結果までを測定</li> @@ -271,10 +279,13 @@ <div class='cover'> <h3>実験 : CPU 数での比較</h3> + <p>file size 1GB</p> <p>表内の数値の単位は全て秒である。</p> -division size = 128k , 48 Task num / 1 Block +<!-- 1度に読み込む量を書かないといけない --> +<!-- bldsv 12 ssd あるってよ--> +Blocked read Task 1つ当たりの読み込み量は 128kbyte * 48 <table border="2" cellpadding="0" cellspacing="0"> <tbody> <tr> @@ -332,7 +343,8 @@ <h3>実験 : division size を変更してみる</h3> -division size = <font color=red>16k</font> , 48 Task num / 1 Block + +Blocked read Task 1つ当たりの読み込み量は <font color=red>16kbyte </font>* 48 <table border="2" cellpadding="0" cellspacing="0"> <tbody> <tr> @@ -382,52 +394,72 @@ </tbody> </table> + <ul> + <li>CPU 4つ以上からは、読み込み方法を変えても結果がほとんど同じとなった。</li> + <li>mmap はコードがシンプルでもかなり速く動作するが、チューニング次第で Blocked Read のほうが速く動作する。</li> + </ul> + </div> +<!-- --> <div class='cover'> -<h3>実験 : 使用 CPU 数での比較</h3> +<h3>実験 : OS を変更してみる</h3> +<p>実験環境</p> +<ul> + <li> Cent OS 6.5</li> + <li> Core i7-3770 3.40GHz</li> + <li> Memory 16GB</li> + <li> HDD 2TB 7200 rpm SATA 6.0 Gbps </li> + <li> file size 1GB </li> +</ul> <table border="2" cellpadding="0" cellspacing="0"> <tbody> - <tr> + <!-- align = rigth 寄ってくれない(´;ω;`)ウッ…--> + <tr align="rigth"> <td>read mode \ CPU num</td> <td></td> <td>CPU 1</td> + <td>CPU 2</td> + <td>CPU 3</td> <td>CPU 4</td> - <td>CPU 8</td> - <td>CPU 12</td> + <td>Thread 8</td> </tr> <tr> <td>mmap</td> <td></td> - <td></td> - <td></td> - <td></td> - <td></td> + <td>6.852</td> + <td>6.765</td> + <td>7.632</td> + <td>12.504</td> + <td>7.649</td> </tr> <tr> <td>read</td> <td></td> - <td></td> - <td></td> - <td></td> - <td></td> + <td>10.545</td> + <td>8.699</td> + <td>8.667</td> + <td>8.152</td> + <td>7.607</td> </tr> <tr> <td>Blocked Read(SPE_ANY)</td> <td></td> - <td></td> - <td></td> - <td></td> - <td></td> + <td>8.686</td> + <td>10.606</td> + <td>12.995</td> + <td>11.799</td> + <td>14.723</td> </tr> <tr> <td>Blocked Read(IO_0)</td> <td></td> - <td></td> - <td></td> - <td></td> - <td></td> + <td>6.751</td> + <td>6.800</td> + <td>7.311</td> + <td>7.016</td> + <td>6.755</td> <!-- <td bgcolor="#ffffcc">Blocked Read(IO_0)</td> <td bgcolor="#ffffcc">99.2</td> @@ -436,11 +468,10 @@ </tbody> </table> - <ul> - <li></li> - <li></li> - <li></li> - </ul> + size が小さくなると、シーケンシャルの読み込みに近いので、ランダムだと + mmap が遅くなってしまう。 stream 演算 + I/O の ぷらいおりてぃ 上げないでどうなるかどうか + division size = 64k 256k </div> <div class='cover'> @@ -471,20 +502,6 @@ <div class='cover'> </div> - - <div class='cover'> - </div> - - - <div class='cover'> - </div> - - <div class='cover'> - </div> - - <div class="cover"> - </div> - </div> <!-- presentation --> </body> </html>