Morsel-Driven Parallelism:面向多核时代的 NUMA 感知查询执行框架
原文:Viktor Leis, Peter Boncz, Alfons Kemper, Thomas Neumann. Morsel-Driven Parallelism: A NUMA-Aware Query Evaluation Framework for the Many-Core Age. SIGMOD 2014, pp. 743–754.
本文是原文的中文翻译,保留了原 paper 的章节编号、图、表与脚注。原文作者单位:Technische Universität München(慕尼黑工业大学)与 CWI(荷兰数学与计算机科学研究基础研究所)。
摘要
随着现代计算机架构的演进,两个问题共同阻碍了并行查询执行的前沿方法:(i) 为了利用多核,所有查询工作必须均匀地分配到(很快会是)数百个线程上才能获得好的加速比,然而 (ii) 即使拥有准确的数据统计信息,由于现代乱序执行核心的复杂性,把工作均匀地划分也依然很困难。结果是,现有的"plan-driven(计划驱动)“并行方法撞上了负载均衡和上下文切换的瓶颈,因此不再具备可扩展性。多核架构面临的第三个问题是内存控制器的去中心化,这导致了非一致性内存访问(NUMA)。
对此,我们提出"morsel-driven(小块驱动)“查询执行框架,其中调度成为一个细粒度的、NUMA 感知的运行时任务。Morsel-driven 查询处理取输入数据的小片段(“morsels”),把它们调度给 worker 线程,由 worker 线程执行完整的算子流水线直到下一个 pipeline breaker。并行度不是被烘焙进计划里,而是在查询执行过程中可以弹性地改变,因此 dispatcher(调度器)能够对不同 morsel 的执行速度做出反应,也能根据工作负载中新到达的查询动态调整资源。此外,dispatcher 还感知 NUMA 本地 morsel 和算子状态的数据局部性,使得绝大部分执行都发生在 NUMA 本地内存上。我们在 TPC-H 和 SSB 基准上的评估显示出极高的绝对性能,以及在 32 核上超过 30 的平均加速比。
关键词:Morsel-driven parallelism;NUMA-awareness




