ブログ@nnaka2992

データベースってなんだよ

NUMAアーキテクチャでのクエリ最適化に関する論文を読みました

この記事の趣旨

"Morsel-Driven Parallelism: A NUMA-Aware Query Evaluation Framework for the Many-Core Age"という2014年に発表された、多コアサーバにおけるクエリ最適化 手法をあつかった論文を読みました。

[Morsel-Driven Parallelism: A NUMA-Aware Query

Evaluation Framework for the Many-Core Age](https://15721.courses.cs.cmu.edu/spring2023/papers/07-scheduling/p743-leis.pdf) Viktor Leis, Peter Boncz, Alfons Kemper, Thomas Neumann

著者について

Viktor Leis、 Peter Boncz、 Alfons Kemper、Thomas Neumannのグループによる研究 いずれもデータベースと 高速化かを中心に研究している。

問題意識

コンピュータアーキテクチャの進化にともない、二つのあたらしい問題 が生じた。

  1. 多コアを利用するためにクエリを数百のスレッドに均等に分散させる
  2. それをNUMA(Non-Uniform Memory Access)による順序通りではないメモリアクセスで実現する必要がある。

これらの要因からplanベースの並列処理による不可分散とコンテキストスイッチボトルネックが問題になりスケールが難しかった。

NUMAによってデータとアクセススレッドがどのチップに配置されるかによって、 データ項目のアクセスコストが異なるため、コンピュータ自体がネットワークになって おり、多コア並列化では、RAMやキャッシュ階層を考慮する必要がある。

この論文ではMoral-drivenクエリ実行フレームワークを提案している。

手法

提案手法は並列クエリ処理のため、morselドリブンクエリ評価フレームワークを提示した。 これはメニーコア時代の分析クエリ性能の主要なボトルネックである 負荷分散、スレッド同期、メモリアクセス局所性およびリソース弾力性を 解決することを目的としている。

ベースとなるアイデアは以下の2つに分けられる。

  1. メモリ上のデータをmorselと呼ばれる小さなバッチに分割し、バッチごとに処理を 実行したあとにそれぞれの処理結果をグローバルハッシュテーブルとしてまとめる。
    Figure 3: NUMA-aware processing of the build-phase
    Figure 3: NUMA-aware processing of the build-phase
  2. ディスパッチャと呼ばれる並行パイプライン制御を行ない、ワーカースレッドをタスクに割り当てる
    これによりクエリ実行中でも柔軟な並列度の変更を可能とした
    Figure 5: Dispatcher assigns pipeline-jobs on morsels to threads depending on the core
    Figure 5: Dispatcher assigns pipeline-jobs on morsels to threads depending on the core

まとめとして著者はきめ細かいスケジューリング、完全演算子並列化、低オーバーヘッド同期、 NUMA対応スケジューリングの原理を用いて、他のシステムでもメニーコアスケーリングを 改善できると示唆している。

作業時間

  • read
    • 28:36
    • 28:36
  • author
    • 32:45
    • 3:09
  • summary
    • 60:37
    • 27:52

感想

近現代のサーバアーキテクチャで主流になっているNUMAでのクエリパフォーマンス向上のための論文のため、 古典的なものに比べ概念が難しいものが多い。

もう少し理解を深めたい。