mio: a high-performance multicore io manager for …kazu/material/2014-mio.pdf1 mio: a...

23
1 Mio: A High-Performance Multicore IO Manager for GHC Haskell Symposium 2013 Andreas Voellmy Junchang Wang Kazu Yamamoto Paul Hudak Yale Univ IIJ-II

Upload: others

Post on 09-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

23

今後の課題 Yield 関数がスループットを劇的に改善

IO マネージャを軽量スレッド・スケジューラに組み込む