Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A...
Transcript of Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A...
![Page 1: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/1.jpg)
1
Mio: A High-PerformanceMulticore IO Manager for GHC
Haskell Symposium 2013
Andreas Voellmy Junchang Wang Kazu Yamamoto Paul Hudak
Yale Univ IIJ-II
![Page 2: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/2.jpg)
2
概要
![Page 3: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/3.jpg)
3
並行 Haskell
Haskell は並行プログラムを書くのに最適な言語
![Page 4: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/4.jpg)
4
スレッドとイベント駆動
![Page 5: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/5.jpg)
5
GHC のランタイム・システム マルチコア環境を思考した実装
![Page 6: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/6.jpg)
6
GHC でコンパイルしランタイム・システムをリンクした
並行プログラムはマルチコア環境でスケールすべき
![Page 7: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/7.jpg)
7
問題点
実際は、並行プログラムがマルチコア環境でスケールしない
![Page 8: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/8.jpg)
8
エコー・サーバのスループット コネクションごとに軽量スレッドを生成 極力オーバーヘッドを削除 400 コネクション、計 500,000 リクエスト
![Page 9: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/9.jpg)
9
原因
IOマネージャにボトルネックがある
![Page 10: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/10.jpg)
10
IOマネージャ
![Page 11: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/11.jpg)
11
IO マネージャの仕組み
![Page 12: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/12.jpg)
12
解決方法
![Page 13: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/13.jpg)
13
解決方法1: 並行コール・バックテーブル 他のスレッドが動いていない
グローバルなジャイアントロックを分割
![Page 14: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/14.jpg)
14
エコー・サーバのスループット(再掲)
![Page 15: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/15.jpg)
15
解決方法2: コアごとのIOディスパッチャ コアの数が増えると IO ディスパッチャだけが 動いている
コアごとの IO ディスパッチャを導入
![Page 16: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/16.jpg)
16
エコー・サーバのスループット(再掲)
![Page 17: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/17.jpg)
17
解決方法3: スケーラブルなイベント管理 イベントの登録時に軽量イベントが待たされる
OS はイベントのエントリを挿入/削除する際に グローバル・ロックを取る
![Page 18: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/18.jpg)
18
スケーラブルなイベント管理 (2) OS はイベントのエントリを変更する際は グローバル・ロックを取らない
![Page 19: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/19.jpg)
19
エコー・サーバのスループット(再掲)
![Page 20: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/20.jpg)
20
実践的なHTTPサーバのスループット サーバ機: HT なしの 80 コア クライアント機: HT ありの 8 コア ネットワーク:10Gpbs イーサ 計測ソフト: weighttp 400 コネクション、計 500,000 リクエスト
![Page 21: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/21.jpg)
21
実践的なHTTPサーバの応答時間 同じ環境 サーバ機:12コアを利用 計測ソフト:改良した weighttp
![Page 22: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/22.jpg)
22
実装 ほとんどの部分を Haskell で記述 874 行追加 359 行削除 たくさんの OS をサポート Linux では epoll FreeBSD では kqueue (Mac を含む)他のOS では poll
GHC HEAD にマージ済み もうすぐ GHC 7.8.1 の一部としてリリースされる たくさんのバグを発見 GHC IO マネージャのバグ GHC RTS のバグ GHC ビルドシステムのバグ epoll の深刻なバグ
![Page 23: Mio: A High-Performance Multicore IO Manager for …kazu/material/2014-mio.pdf1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang](https://reader033.fdocuments.co/reader033/viewer/2022050519/5fa2d0707746f143fc1ba6ca/html5/thumbnails/23.jpg)
23
今後の課題 Yield 関数がスループットを劇的に改善
IO マネージャを軽量スレッド・スケジューラに組み込む