Upgrade to Pro — share decks privately, control downloads, hide ads and more …

隣の芝は茶色いか ~ NUMA システムのメモリのレイテンシ / NUMA memory latency

隣の芝は茶色いか ~ NUMA システムのメモリのレイテンシ / NUMA memory latency

会社の LT 会で発表した、 NUMA システムのメモリのレイテンシを計測した件のプレゼンテーションです。

計測ツールは https://github.com/umezawatakeshi/numa_memory_latency にあります。

Transcript

  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. 昔こんなこと言ってました • https://twitter.com/umezawa_takeshi/status/724997040715898881 • でも実は測ってない(=伝聞)

  12. どうやって測ろう • ストアのレイテンシを測るのは難しい – いつ完了したのか知る方法がない • ロードのレイテンシを測ろう • ロードして、それが終わったらまたロードして …をたくさん(10秒ぐらい)繰り返す

    • 経過時間 ÷ ロード回数 = レイテンシ
  13. それほど単純ではない(1) • 最近のプロセッサはスーパースカラ&アウト オブオーダーなので、単にロード命令を並べ ただけでは並列に実行されてしまう 並列に実行されないように、ロードしたらアド レスが取れて、そのアドレスからロードしてア ドレスが取れて…という構造にする(ロード間 に依存関係を発生させることで直列に実行さ せる)

  14. それほど単純ではない(2) • 最近のプロセッサはハードウェアプリフェッチ があるので、規則正しいメモリアクセスを行う と勝手にアクセスしてキャッシュメモリまで 持ってきてしまう アクセスするアドレスがランダムになるように して、ハードウェアプリフェッチが効かないよう にする

  15. それほど単純ではない(3) • 隣のキャッシュのデータをロードしたら自分の キャッシュにコピーができてしまう(たぶん) 諦めて隣のメモリのレイテンシを測って、自分 のメモリのレイテンシとの差で推測する

  16. 測定ツール • https://github.com/umezawatakeshi/numa_m emory_latency • 後述の機材が CentOS 6 で動いている関係上、 GCC

    4.4.7 の 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. 測定結果 対象 レイテンシ L1キャッシュ (32KiB/core) ~1.6ns L2キャッシュ (256KiB/core) ~7.0ns L3キャッシュ

    (LLC) (15MB/socket) ~18ns ローカルノードの メインメモリ ~90ns リモートノードの メインメモリ ~190ns
  20. 結論 • 隣のメモリは遠い • というか隣のプロセッサが遠い • NUMAシステムで、複数のプロセッサにまた がってメモリをたくさん使うタスクを適切に書く のは難しいです

  21. オマケ:よく分からないこと • L1 のレイテンシは CPU0 より CPU1 の方が小 さかった •

    L2 のレイテンシは計測誤差程度だった • L3 のレイテンシも CPU0 より CPU1 の方が小 さかった • 何回測っても同じ傾向になる • 計測手法に若干の問題がある可能性…?