Mercurial > hg > Papers > 2014 > toma-master
annotate slides/master.html @ 73:7c3503a9bfcf
fix
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 13 Feb 2014 13:36:41 +0900 |
parents | c119afd8e948 |
children | 68e21fa11919 |
rev | line source |
---|---|
31 | 1 <!DOCTYPE html> |
2 | |
3 <!-- | |
4 Google HTML5 slide template | |
5 | |
6 Authors: Luke Mahé (code) | |
7 Marcin Wichary (code and design) | |
8 | |
9 Dominic Mazzoni (browser compatibility) | |
10 Charles Chen (ChromeVox support) | |
11 | |
12 URL: http://code.google.com/p/html5slides/ | |
13 --> | |
14 | |
15 <html> | |
16 <head> | |
17 <title> | |
18 関数型言語 Haskell による並列データベースの実装 | |
19 </title> | |
20 | |
21 <meta charset='utf-8'> | |
22 <script | |
23 src='http://web.amothic.com/html5slides/slides.js'></script> | |
24 </head> | |
25 | |
26 <style> | |
27 /* Your individual styles here, or just use inline styles if that’s | |
28 what you want. */ | |
29 | |
30 | |
31 </style> | |
32 | |
33 <body style='display: none'> | |
34 | |
35 <section class='slides layout-regular template-concurrency'> | |
36 | |
37 <!-- Your slides (<article>s) go here. Delete or comment out the | |
38 slides below. --> | |
39 | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
40 <article> |
70 | 41 <h1> 関数型言語 Haskell による並列データベースの実装 </h1> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
42 <p> Daichi TOMA <br> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
43 Feb 12, 2014 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
44 </article> |
31 | 45 |
70 | 46 <article> |
47 <h3> 研究概要 </h3> | |
48 <p> Haskell を用いて信頼性の高い並列データベースを実装した </p> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
49 <p> Haskell は rpar により並列実行を指示し、STMにより共有データを実現する</p> |
70 | 50 <p> Haskellの並列処理は、最新のコンパイラで性能がでることがわかった</p> |
51 <p> 読み込みに関して 12 コアで実行した場合、10.37 倍 という性能向上率が確認できた </p> | |
52 <p> Web 掲示板サービスを開発し、Java と比較して読み込みで 3.25 倍、書き込みで 3.78 倍の性能差が確認できた </p> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
53 <p> Network の並列性能はあまり出てないことがわかった</p> |
70 | 54 </article> |
31 | 55 |
70 | 56 <article> |
57 <h3> Haskellによる信頼性の高いサービスの構築</h3> | |
58 <p> Web サービスの脆弱性を悪用されると多大な被害がでる </p> | |
59 <p> 脆弱性の大半はBuffer Overflowや、Cross site scripting、SQL injection </p> | |
60 <p> これらは型エラー。Haskell は、これらをコンパイル時にチェック</p> | |
61 <p> 入力として受け取った文字列が、HTML型に実行時に自動変換されたりしない<br> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
62 ⇒ Cross site scripting が防げる </p> |
70 | 63 </article> |
31 | 64 |
70 | 65 <article> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
66 <h3> Haskellの型検査の例(list) </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
67 <p> : はlistに要素を追加するための演算子 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
68 <p> 1 : 2 : 3 : [] == [1,2,3] </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
69 <br> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
70 <div align="center"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
71 <img src="images/list.png" width="200px"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
72 </div> |
43 | 73 <pre> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
74 let a = 0 : [1,2,3] -- [0,1,2,3] |
70 | 75 let b = 'a' : [1,2,3] -- error |
76 let c = 1 : ['a','b','c'] -- error | |
43 | 77 </pre> |
70 | 78 </article> |
43 | 79 |
70 | 80 <article> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
81 <h3> 型推論 </h3> |
70 | 82 <p> 前提として関数に以下のような型が定義されているとする </p> |
46 | 83 <pre> |
84 getNode :: Node -> Path -> Node | |
85 elems :: Map k a -> [a] | |
86 children :: Node -> Map Int Node | |
87 </pre> | |
70 | 88 <p> 新しくgetChildrenという関数を定義する</p> |
43 | 89 <pre> |
66 | 90 getChildren node path = elems (children (getNode node path)) |
91 </pre> | |
70 | 92 <p> 型をHaskellが自動で導出する </p> |
66 | 93 <pre> |
94 *Jungle> :type getChildren | |
95 getChildren :: Node -> Path -> [Node] | |
43 | 96 </pre> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
97 </article> |
46 | 98 |
70 | 99 <article> |
100 <h3> 実用的なデータベースには並列実行が必須 </h3> | |
101 <p> 現在、CPU はマルチコア化がすすんでいる </p> | |
102 <p> 実用的なデータベースとするためにはマルチコアに対応させる必要性がある </p> | |
103 <p> 並列に処理できればマルチコアで性能が出る </p> | |
104 <p> Haskell は Eval モナド(rpar)といったモナドで並列実行の機能を提供</p> | |
105 <p> モナドは、Haskellでメタ計算を提供する構文あるいはAPI</p> | |
106 <p> システムコールのようなものと考えてよい</p> | |
107 <p> モナドの例:IOモナド、エラーモナド、STMモナド </p> | |
108 </article> | |
46 | 109 |
72 | 110 <article> |
111 <h3> Haskell の並列処理 </h3> | |
112 <p> sumという1つ目の引数から2つ目の引数までの全ての数を足す関数があるとする </p> | |
113 <p> rpar の引数にすることで関数が並列に実行可能であることを示せる </p> | |
114 <p> do ~ returnで rpar を 1 つにまとめ、runEvalに渡すことで実行する </p> | |
115 <pre> | |
116 main = print (runEval test) | |
117 | |
118 test = do | |
119 a <- rpar (sum 0 10000) | |
120 b <- rpar (sum 10000 20000) | |
121 return (a,b) | |
122 </pre> | |
123 <p> a と b が並列に計算される</p> | |
124 </article> | |
68 | 125 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
126 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
127 <h3> Haskell の遅延評価 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
128 <p> 並列実行は遅延評価が問題になる </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
129 <p> haskell では値が必要となるまで式の評価が行われない </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
130 <p> 並列に実行するように指示しても、評価が行われなければ並列に動かない </p> |
72 | 131 <p> さきほどの例ではprintを行うようにしていた</p> |
132 <pre> | |
133 main = print (runEval test) | |
134 </pre> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
135 </article> |
68 | 136 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
137 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
138 <h3> Haskell の遅延評価 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
139 <p> sprintは評価を行わずに値を表示するコマンド </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
140 <p> _ は未評価の式を表し、thunk と呼ばれる </p> |
68 | 141 <pre> |
142 ghci> let y = map (+1) [1,2,3] :: [Int] | |
143 ghci> :sprint y | |
69 | 144 y = _ |
68 | 145 ghci> length y |
146 3 | |
147 ghci> :sprint y | |
69 | 148 y = [_,_,_] |
68 | 149 ghci> head y |
150 2 | |
151 ghci> :sprint y | |
152 y = [2,_,_] | |
153 </pre> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
154 <p> 並列実行時には出力などを挟んで強制的に即時評価されるようにする </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
155 </article> |
68 | 156 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
157 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
158 <h3> データベースの設計 - 非破壊的木構造 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
159 <p> マルチコア上で、データベースの性能向上をさせるためには、各コアからデータに同時にアクセスできるようにする </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
160 <p> 非破壊的木構造という手法を用いる。</p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
161 <p> 非破壊的木構造は、元となる木構造を書き換えずに編集できる。 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
162 <p> 既にあるデータを変更しないので、データの競合状態が発生しない。並列に読み書きできる </p> |
46 | 163 <br> |
31 | 164 <div align="center"> |
46 | 165 <img src="images/concurrent_edit.png" width="400px"> |
31 | 166 </div> |
167 </article> | |
168 | |
70 | 169 <article> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
170 <h3> Haskell でのRoot Node の管理 </h3> |
31 | 171 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
172 <p> Root Node は最新のNode → 状態を持つ</p> |
70 | 173 <p> 共有された状態を作るには Software Transactional Memory (STM) を使う </p> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
174 <p> STM は、Non-Blockingで共有データを扱える </p> |
70 | 175 <p> 共有データの変更は以下の様に行われる </p> |
31 | 176 <ul> |
66 | 177 <li>他から変更がなければそのまま適用 |
178 <li>変更している間に、他から変更されれば変更処理をやり直し | |
31 | 179 </ul> |
70 | 180 </article> |
31 | 181 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
182 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
183 <h3> 非破壊的木構造データベース Jungle </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
184 <p> 非破壊的木構造を扱うデータベース Jungle を開発した </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
185 <p> Jungle の基本的な使い方 </p> |
66 | 186 <ul> |
187 <li> 木構造を保持する Jungle を作成 | |
188 <li> Jungle に新しい木を作成 | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
189 <li> 木からRoot Nodeを取ってきて、データを参照 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
190 <li> もしくは、Node を編集し、木のRoot Nodeを更新 |
66 | 191 </ul> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
192 </article> |
66 | 193 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
194 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
195 <h3> 木構造を保持する Jungle の作成 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
196 <p> 各スレッドから新しく木を作ったりできるように木構造の保持にSTMを使っている </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
197 <p> Jungle は複数の Tree を名前で管理する </p> |
31 | 198 <div align="center"> |
66 | 199 <img src="images/jungle_type.png" width="500px"> |
31 | 200 </div> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
201 </article> |
66 | 202 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
203 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
204 <h3> 木からRoot Nodeを取ってくる </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
205 <p> 木からRoot Nodeを取ってくるにはgetRootNodeという関数を使う </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
206 <p> 内部でSTMを使っているのでIOモナドを返す</p> |
66 | 207 <pre> |
43 | 208 getRootNode :: Jungle -> String -> IO Node |
66 | 209 </pre> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
210 <p> Jungleと木の名前を渡すと最新の Node が返ってくる </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
211 </article> |
66 | 212 |
70 | 213 <article> |
73 | 214 <h3> Jungle の最も基本的なデータ構造 Node </h3> |
70 | 215 <p> Node はChildren(Node)とattributesを持つ </p> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
216 <p> Jungle の参照や変更の関数は全て Node に対して行う </p> |
66 | 217 <div align="center"> |
218 <img src="images/node_component.png" width="500px"> | |
219 </div> | |
70 | 220 </article> |
66 | 221 |
70 | 222 <article> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
223 <h3> Node を編集し、木の Root Node を更新する </h3> |
70 | 224 <p> updateRootNodeやupdateRootNodeWithで更新できる </p> |
225 <p> 内部でSTMを使っているのでIOモナドを返す</p> | |
66 | 226 <pre> |
43 | 227 updateRootNode :: Jungle -> String -> Node -> IO () |
228 updateRootNodeWith :: (Node -> Node) -> Jungle -> String -> IO () | |
229 </pre> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
230 <p> updateRootNodeには編集したNodeを渡すことで木の Root Node を更新できる </p> |
73 | 231 <p> updateRootNodeWithにはNodeを編集する関数 (Node -> Node) を渡すことで木の Root Node を更新できる </p> |
70 | 232 </article> |
31 | 233 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
234 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
235 <h3> 性能計測 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
236 <p> Jungle がマルチコアプロセッサで性能が出るのか、実用的なWebサービスが提供できるのか確認する </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
237 <p> 性能の計測に用いるサーバの仕様 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
238 <p> ハイパースレッディングで24コアまで使える<br> ハイパースレッディングはおよそ20%程度クロックあたりの性能が向上する </p> |
33 | 239 <table> |
240 <tr> | |
241 <th>名前</th> | |
242 <th>概要</th> | |
243 </tr> | |
244 <tr> | |
245 <td>CPU</td> | |
246 <td>Intel(R) Xeon(R) CPU X5650@2.67GHz * 2</td> | |
247 </tr> | |
248 <tr> | |
249 <td>コア数</td> | |
250 <td>12</td> | |
251 </tr> | |
252 <tr> | |
253 <td>メインメモリ</td> | |
254 <td>126 GB</td> | |
255 </tr> | |
256 <tr> | |
257 <td>OS</td> | |
66 | 258 <td>Fedora 19</td> |
33 | 259 </tr> |
260 </table> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
261 </article> |
31 | 262 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
263 <article class="smaller"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
264 <h3> Haskell コンパイラ </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
265 <p> Haskell のコンパイラには The Glasgow Haskell Compiler (GHC) を利用する </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
266 <p> 現在の GHC の安定版 7.6.3 は並列時にIOマネージャーがスケールしないという問題がある </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
267 <p> リリース候補版である 7.8 を用いることにより、よりよい性能を得ることができた </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
268 <div align="center"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
269 <img src="images/ghc.png" width="600px"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
270 </div> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
271 </article> |
66 | 272 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
273 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
274 <h3> 親和性機能(affinity)を利用する </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
275 <p> 親和性機能とは OS スレッドをCPUコアに固定する機能 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
276 <p> 並列実行時の性能が向上するため性能計測で利用する </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
277 <p> Haskell は実行時に -qa オプションを使うこと親和性機能を使うように指示できる </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
278 </article> |
43 | 279 |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
280 <article class="smaller"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
281 <h3> 読み込みの性能計測 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
282 <p> 木構造の読み込みにかかる時間を計測する </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
283 <p> 12 スレッドで親和性機能を使って実行した場合 10.37 倍の性能向上<br> |
73 | 284 →実コア数である12コアまで、ほぼ線形にスケールする</p> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
285 <p> 親和性機能を使った時 24スレッドで実行すると実行時間が大幅に伸びる </p> |
43 | 286 <div align="center"> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
287 <img src="images/read.png" width="600px"> |
43 | 288 </div> |
289 </article> | |
290 | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
291 <article class="smaller"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
292 <h3> 書き込みの性能計測 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
293 <p> 木構造の書き込みにかかる時間を計測する </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
294 <p> 12 スレッドで親和性機能を使って実行した場合 3.82 倍の性能向上<br> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
295 → 同時に書き込みがあった場合、STMが処理をやり直すため並列度がでない</p> |
73 | 296 <p> 読み込みと同様に、親和性機能を使って24スレッドで実行すると実行時間が大幅に伸びる </p> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
297 <div align="center"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
298 <img src="images/write.png" width="600px"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
299 </div> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
300 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
301 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
302 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
303 <h3> 読み込みと書き込みの考察 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
304 <p> 読み込みが高速 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
305 <p> 書き込みは、同時に書き込まれた場合 STMが処理のやり直しをするため、並列度がでない </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
306 <p> 親和性機能を使った場合 24 スレッドでは遅くなる<br> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
307 ⇒ 全てのCPUコアにスレッドを固定することになりスケジューリングがうまくいかないためだと考えられる |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
308 <p> 書き込みより読み込みが多用されるシステムに向いている </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
309 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
310 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
311 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
312 <h3> Webサービスに組み込んでの性能計測 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
313 <p> Haskell の HTTP サーバ Warp と組み合わせて Web掲示板サービスを開発する </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
314 <p> 測定ツール weighttp を用いて掲示板に読み込みと書き込みで負荷をかける。 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
315 <p> Warp は、ハイパースレッディングで明らかに遅くなるので使わない </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
316 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
317 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
318 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
319 <h3> ネットワークのボトルネック </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
320 <p> ネットワークのボトルネックが大きい </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
321 <p> 並列環境でどのようにスケールするか計測したいため、ネットワークを介さずに性能計測を行う </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
322 <br> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
323 <div align="center"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
324 <img src="images/request.png" width="300px"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
325 </div> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
326 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
327 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
328 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
329 <article class="smaller"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
330 <h3> Webサービスに組み込んでの性能計測 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
331 <p> 読み込みと書き込みの実験結果 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
332 <p> 1秒間あたりどれだけリクエストを捌けるかという指標で比較<br> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
333 ⇒大きければ大きいほど性能が良い </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
334 <p> 8 スレッドで実行時、読み込みは 6.18 倍、書き込みは3.93倍の性能向上 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
335 <p> Jungle 単体での実験結果と同じで、読み込みのほうがスケールする </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
336 <div align="center"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
337 <img src="images/bbs.png" width="600px"> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
338 </div> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
339 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
340 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
341 <article> |
73 | 342 <h3> Java との性能比較 </h3> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
343 <p> HaskellとJavaで同様のWeb掲示板サービスを用意する </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
344 <p> 実環境を想定して、ブレードサーバ2台用意し、ネットワークを介して負荷をかける </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
345 <p> 100 万リクエストを処理するのにかかる時間を計測 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
346 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
347 <table> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
348 <tr> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
349 <th>測定 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
350 <th>Haskell |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
351 <th>Java |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
352 </tr> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
353 <tr> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
354 <td>読み込み |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
355 <td>16.31 s |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
356 <td>53.13 s |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
357 </tr> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
358 <tr> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
359 <td>書き込み |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
360 <td>20.17 s |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
361 <td>76.4 s |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
362 </tr> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
363 </table> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
364 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
365 <p> 読み込みで 3.25 倍、書き込みで 3.78 倍の性能差<br> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
366 ⇒ Haskell は実用的なWebサービスを開発できる </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
367 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
368 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
369 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
370 <h3> Java との生産性の比較</h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
371 <p> Haskell 版 Jungle は 284 行、Java 版 Jungle は 3,390 行 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
372 <p> 実装が 1/12 程度のサイズとなっている </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
373 <p> 再帰的なデータ型の定義ができることや、関数の再利用が行いやすいことが要因 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
374 <p> 同じ機能を実装する場合でも、Haskell は Java と比較してコード行数が短くなる </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
375 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
376 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
377 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
378 <h3> まとめ </h3> |
72 | 379 <p> Haskell を用いて信頼性の高い並列データベースの実装した </p> |
380 <p> Haskell の並列処理は、最新のコンパイラで性能がでることがわかった </p> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
381 <p> 読み込みに関して 12 コアで実行した場合、10.37 倍 という性能向上率が確認できた </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
382 <p> また、Web 掲示板サービスを開発し、Java と比較して読み込みで 3.25 倍、書き込みで 3.78 倍の性能が確認できた </p> |
72 | 383 <p> Network 越しの計測では並列性能があまり出ていないことがわかった </p> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
384 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
385 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
386 <article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
387 <h3> 今後の課題 </h3> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
388 <p> 書き込み処理の性能向上 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
389 <p> 分散データベースとしての実装 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
390 <p> 永続性の実装 </p> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
391 </article> |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
392 |
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
393 <article> |
43 | 394 <h3> |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
395 ネットワークボトルネックの計測 |
43 | 396 </h3> |
397 <p> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
398 ネットワークを介す場合と介さない場合のWarpのベンチマーク |
33 | 399 </p> |
66 | 400 <div align="center"> |
401 <img src="images/warp.png" width="600px"> | |
402 </div> | |
71
98a55a935619
describe slides without rpar
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
403 </article> |
43 | 404 |
68 | 405 |
31 | 406 </body> |
407 </html> |