Download presentation
Presentation is loading. Please wait.
Published byAndrea Breiner Modified 約 5 年前
1
梅澤威志 twitter: @umezawa_takeshi
隣の芝は茶色いか 梅澤威志
2
NUMA って 知ってますか
3
Non- Uniform Memory Access
4
不 均一な メモリ アクセス
5
NUMA とは マルチプロセッサシステムにおいて、メモリ(要するにDRAM)へのアクセス(スループット、レイテンシ)が均一でないような環境
6
もうちょっとわかりやすく プロセッサから見て「近いメモリ」と「遠いメモリ」があり、どのメモリが近いかはプロセッサによって異なる環境のこと
どのメモリが近いかがプロセッサによらず同じであるような環境は、単にメモリ階層が存在しているだけ
7
つまりこういうこと プロセッサ プロセッサ 遠い 近い 近い メモリ メモリ
8
具体的な製品 最近だと PC でもマルチプロセッサシステムは全部 NUMA である
Intel だと Nehalem の Xeon (2009) 以降 AMD だと Opteron (2003) 以降
9
最近のPCのNUMAの図 メ モ リ CPU CPU メ モ リ I/O
10
ここから 本題
11
昔こんなこと言ってました でも実は測ってない(=伝聞)
12
どうやって測ろう ストアのレイテンシを測るのは難しい ロードのレイテンシを測ろう
いつ完了したのか知る方法がない ロードのレイテンシを測ろう ロードして、それが終わったらまたロードして…をたくさん(10秒ぐらい)繰り返す 経過時間 ÷ ロード回数 = レイテンシ
13
それほど単純ではない(1) 最近のプロセッサはスーパースカラ&アウトオブオーダーなので、単にロード命令を並べただけでは並列に実行されてしまう
並列に実行されないように、ロードしたらアドレスが取れて、そのアドレスからロードしてアドレスが取れて…という構造にする(ロード間に依存関係を発生させることで直列に実行させる)
14
それほど単純ではない(2) 最近のプロセッサはハードウェアプリフェッチがあるので、規則正しいメモリアクセスを行うと勝手にアクセスしてキャッシュメモリまで持ってきてしまう アクセスするアドレスがランダムになるようにして、ハードウェアプリフェッチが効かないようにする
15
それほど単純ではない(3) 隣のキャッシュのデータをロードしたら自分のキャッシュにコピーができてしまう(たぶん)
諦めて隣のメモリのレイテンシを測って、自分のメモリのレイテンシとの差で推測する
16
測定ツール https://github.com/umezawatakeshi/numa_memory_latency
後述の機材が CentOS 6 で動いている関係上、 GCC の C++0x の範囲で記述。(C++11 でも OK)
17
測定機材 Dual Xeon E5-2630L v2 たまたま手の届く範囲にこれがあっただけ Ivy Bridge EP 6C12T
Base 2.4GHz, TB 2.8GHz L1D$: 32KiB/core L2$: 256KiB/core L3$: 15MiB/socket たまたま手の届く範囲にこれがあっただけ
18
測定上の注意 このハードの管理者ではないので、 このホストを占有できてはいないので、 非常にザックリした測定であることに注意
サーバとしての製品名は知らない EIST や TB や HT などをオフにすることもできない このホストを占有できてはいないので、 他のプログラム(特にデーモン)が全く走っていない状態で計測できているわけではない 非常にザックリした測定であることに注意
19
~1.6ns ~7.0ns ~18ns ~90ns ~190ns 測定結果 対象 レイテンシ L1キャッシュ (32KiB/core)
L3キャッシュ (LLC) (15MB/socket) ~18ns ローカルノードの メインメモリ ~90ns リモートノードの ~190ns
20
結論 隣のメモリは遠い というか隣のプロセッサが遠い
NUMAシステムで、複数のプロセッサにまたがってメモリをたくさん使うタスクを適切に書くのは難しいです
21
オマケ:よく分からないこと L1 のレイテンシは CPU0 より CPU1 の方が小さかった L2 のレイテンシは計測誤差程度だった
何回測っても同じ傾向になる 計測手法に若干の問題がある可能性…?
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.