BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

PG-Storm:让PostgreSQL在GPU上跑得更快

| 作者 张天雷 关注 4 他的粉丝 发布于 2015年9月21日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

PostgreSQL的扩展PG-Storm允许用户自定义扫描方式,将CPU的密集型工作负载转移到GPU处理,从而利用GPU强大的并行执行能力完成数据任务。在处理器内核数量和RAM带宽上,GPU有得天独厚的优势。GPU通常有成百上千的处理器内核,RAM带宽也比CPU大几倍,可以并行处理大量数值计算,因此其运算十分高效。

PG-Storm基本基于两点思想:

  • 运行中本地GPU代码生成
  • 异步流水线执行模式

在查询优化阶段,PG-Storm检测给定查询是否完全或部分可以在GPU上执行,而后确定该查询是否可转移。如果该查询可以转移,那么PG-Storm则在运行中创建GPU本地二进制文件的源代码,在执行阶段前启动即时编译进程。接下来,PG-Storm将提取行集装载入DMA缓存(一个缓存区的大小默认为15MB),并异步启动DMA传输和GPU内核执行。CUDA平台允许这些任务在后台执行,因此PostgreSQL可以提前运行当前进程。通过GPU加速,这些异步相关切分也隐藏了一般延迟。

装载PG-Strom后,在GPU上运行SQL并不需要专门的指示。它允许允许用户自定义PostgreSQL的扫描方式,而且提供了可以在GPU上运行的扫描/联接逻辑的其他可行方案。如果预计费用合理可行,任务管理器则放入自定义扫描节点,而非内置查询执行逻辑。

下图是PG-Strom和PostgreSQL的基准测试结果,横坐标为表数量,纵坐标为查询执行时间。在此次测试中,所有相关的内部关系都可以一次性地加载到GPU RAM上,预聚集大大减小了CPU需要处理行数。测试代码详情可以查看这里

从上图中可以看出,PG-Strom比单纯PostgreSQL快很多。

以下是几种可以提高PostgreSQL性能的方法:

  • 同类纵向扩展
  • 异类纵向扩展
  • 横向扩展

PG-Strom使用的是异类纵向扩展方法,针对工作负载特性,最大限度地利用了硬件优势。换句话来说,PG-Strom在CPU内核上运行之前,在GPU设备上分配简单而大量的数值计算。

对于PG-Storm更多细节感兴趣的读者,可以参考NEC的专家KaiGai最近在PGCON 2015给出的Talk,文中详细解释了大数据所面临的挑战,为何引入GPU以及PG-Storm的原理和效率等内容。


感谢徐川对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT