局所性を考慮した共有メモリ並列計算機上の並列BIBOP

局所性を考慮した共有メモリ並列
計算機上の並列BIBOPアロケータ
遠藤敏夫
Joint work with 田浦健次朗, 米澤明憲
(JSPP2001投稿中)
並列プログラムのメモリ管理
既存のアプローチ
 逐次アロケータ + 排他制御

Libc mallocなどをそのまま使うと遅すぎる
 各システム独自のアロケータ

Ex. Apacheサーバ, Cilk, KLIC。プログラマの負担大
 汎用並列アロケータ (本研究のアプローチ)
[Larsonら98] [Veeら99] …スケーラビリティ
 [Bergerら00] …スケーラビリティ+消費量
DSMでの局所性への言及はまだない

分散共有メモリ(DSM)マシン
 共有メモリマシンの一種
Origin 2000では、
 リモート/ローカルメモリのアク
セスコスト差は3倍程度
 各ページは最初にアクセスした
プロセッサにとってローカル
CPU
Mem
CPU
Mem
CPU
Mem
DSM(Originなど)
CPU
CPU
CPU
Mem
Mem
Mem
SMP(Enterpriseなど)
並列アロケータが達成すべき
目標
 局所性 (Origin 2000などのDSM)


背景: ローカル/リモートメモリのアクセスコスト差(3倍)
確保者にとってローカルなメモリを使わせたい
 メモリ消費量


アロケータによる消費量≧プログラムによる利用量
多すぎると他プログラムに悪影響
 スケーラビリティ


背景: プログラムによってはCPUあたり100K malloc/s
確保処理が並列にできる必要
3条件を満たすためには
 空き領域の管理方法に注目

空き領域をスレッド独立に管理すると
○ 局所性、スケーラビリティ
× 消費量

空き領域をスレッド間共有すると
× 局所性、スケーラビリティ
○ 消費量
 予告: スレッド独立+stealあり の方法を提案
メモリ消費量 v.s. 局所性
 局所性を最優先させると、メ
モリ消費量増大の可能性


(B)で、必ずローカルメモリを
確保すると消費量2m
(B)で、消費量mに抑えるとス
レッド2は全てリモートメモリ
最悪スレッド数倍の消費
u1
thread 1
m
u2
thread 2
m
t
(A)
u1
thread 1
u2
thread 2
t
m
m
(B)
t
t
本研究の貢献
 BIBOP(big bag of pages)型アロケータの並列化方
式LPS(locality-aware page shared)の提案/実装

局所性 ⇔ 消費量間のトレードオフを自由に調整可


許容消費定数 k の導入
スケーラブル

48プロセッサ(R10000 195MHz)で18M malloc/s
… 1プロセッサ時(750K malloc/s)の24倍
発表の概要






BIBOP
素朴な並列化方式
提案方式 LPS
メモリ消費量解析(簡単に)
性能評価
まとめ
BIBOPアロケータの概要

広まっているアロケータの一つ
ヒープは固定サイズページから成
り立つ
ページは同サイズオブジェクトを含
む
空き領域は、





フリーオブジェクトリスト(サイズ毎)
フリーページリスト
で管理
free
obj list
free
page list
素朴な並列化になっていない(1/3)
 All shared(AS)

空き領域を全て共有
threads
× 非スケーラブル
○ 消費量最小
× 局所性悪
free obj list
free page list
OS
All-shared(AS)
ASは以降出てきません
素朴な並列化(2/3)
 All local(AL)

空き領域をスレッド個別管理
threads
○ スケーラブル
× 消費量大
free obj list
free page list
最悪、最小値のスレッド数倍
○ 局所性良
必ずローカルメモリを確保
OS
All-local(AL)
素朴な並列化(3/3)
 Page shared(PS)


空きオブジェクト: スレッド個別
空きページ: 共有
threads
free obj list
○ スケーラブル
○ 消費量小 ←以降の話の標準
× 局所性悪
空きページを任意のスレッドが再利用
free page list
OS
Page-shared(PS)
○← →×
mega malloc ops/sec
PS, AL方式の性能(1/2)
25
20
PS
AL
libc
15
10
5
Origin 2000(blue1)
並列木作成ベンチマーク
•GCあり、同期
•GC/free時間省く
0
0
20
40
#threads
60
 Malloc回数のスループット計測


PS … 13.5M回/s(逐次の18.5倍)
AL … 21.2M回/s(逐次の28.5倍)
 両者ともIRIX libc mallocよりはるかにスケーラブル
PS, AL方式の性能(2/2)
200
remote ratio
consumption (MB)
×← →○
×← →○
250
150
100
50
0
0
2
4
6
8
10
# allocator threads
12
1
0.8
0.6
PS
AL
0.4
0.2
0
0
2 4 6 8 10 12
# allocator threads
 ALはメモリ消費が激しい

最悪PSの12倍
 PSは局所性が悪い

空ページが別スレッドに再利用される率=約0.9
Origin 2000(chorus)
擬似サーバベンチ
•常に12スレッド
•GCあり、非同期
•使用量: 約20MB
•横軸:v=同時にメモリ
利用するスレッド数
提案方式LPSの外部仕様
 Locality-aware page shared (LPS)
○ スケーラブル
○ 消費量: PSのk倍以下かつ、AL以下
○ 局所性: 上の条件内で最大限に

ユーザはk(許容消費倍率, k≧1)によってト
レードオフの調節可
LPSの内部仕様(1/2)
 空き領域をスレッド独立

まず自リストを探索
threads
→同スレッドによって再利用されやすい
その次は、
 消費量を抑えたいとき、他リストを
探索
 局所性を上げたいとき、OSから確
保
free obj list
free page list
OS
Locality-aware
page-shared(LPS)
LPSの内部仕様(2/2)
空きオブジェクト
リスト探索
自分の空きページ
リスト探索
Yes
a < k max l ?
No
他人の空きページ
リスト探索
OSから確保
またはGC
成功
成功
成功
a … アロケータによる消費ページ数
l … 前回のGCで生き残ったページ数
max l … これまでのlの最大値
k … 許容消費倍率
LPSの消費量について
特定のプログラムに
対する消費量
(1)
(2)
(3)
kが小さいときはPS並
k max l までは消費
性質上ALは超えない
消費量
AL
(#)
(3)
LPS
(2)
max l
PS
(1)
1
k
以上より、どのkに対してもLPS消費量は

PS消費量のk倍(#)以下

AL消費量以下
mega malloc ops/sec
LPS方式の性能(1/2)
25
20
PS
AL
libc
LPS(1)
15
10
5
0
0
20
40
#threads
60
 LPS(k=1)のスケーラビリティはPSとALの中間

17.8M回/s(逐次の24倍)
LPS方式の性能(2/2)
1
PS
AL
LPS(1)
LPS(2)
LPS(3)
LPS(4)
200
150
100
50
0
0
2 4 6 8 10 12
# allocator threads
remote ratio
consumption (MB)
250
0.8
0.6
0.4
0.2
0
0
2 4 6 8 10 12
# allocator threads
PS
AL
LPS(1)
LPS(1.5)
LPS(2)
LPS(3)
LPS(4)
LPS(8)
 消費量: v小(左)でもPSのほぼk倍に抑えられている
 局所性: k大になるにつれ、remote確保率小
k=1は、PSと変わらず
→バランスなプログラムでさえ、局所性を得るためには約2倍の消費
が必要

まとめ
 並列BIBOPアロケータ方式LPSを提案

ゴールは





スケーラビリティ
メモリ消費量
局所性
トレードオフ
ユーザは許容消費倍率の調節によって、トレードオフを
自由に調節可
メモリ消費量解析、実験による性能評価
関連研究
 ローカルヒープを用いたスケーラブルな並列アロケータ
(G)はGCあり、(E)は明示free
 [市吉ら94](G) … スレッドローカルGC。KLIC言語と密着
 [Larsonら98](E)
 [Veeら99](E) … 共有ヒープへのアクセス頻度解析
 [Bergerら00](E) … BIBOP,メモリ消費量解析
 [Boehm00](G) … BIBOP, 空きオブジェクトリストの一部のみスレッ
ドローカル
いずれもDSMの局所性には言及せず
今後の予定




実用アプリでの実験
局所性の解析
GCスケジューリングとの関係の研究
許容消費倍率の自動選択?