计算存储的建模分析 维罗妮卡拉格朗日 内存解决方案实验室三星半导体有限公司美国圣何塞veronica.l@samsung.com 哈里(欢)李 内存解决方案实验室三星半导体公司美国圣何塞harry.li@samsung.com AnahitaShayesteh 内存解决方案实验室三星半导体公司美国圣何塞 Abstract 下一代闪存将配备大量的计算能力。在本文中,我们研究了利用这种计算能力来优化联机分析处理(OLAP)应用程序的机会。我们已经针对使用ApacheHadoop集群和两个数据库引擎ApacheSPARK-SQL和Presto1的TPC-DS查询子集的性能进行了分析。我们通过卸载在大多数SQL计划中首先执行的一些操作来模拟预期的加速。卸载这些操作需要数据库引擎的最少合作,并且不需要对现有计划进行更改。我们表明,实现的速度差异很大。 查询和引擎之间的查询,并且最受益的查询是I/O重,具有“大海捞针”品种的高选择性。我们的主要贡献是估计预期的加速 使用读取优化的列式ApacheParquet格式文件时,将几个关键SQL构建块(扫描、筛选和项目操作)的执行推送到计算存储2。 CCS概念 •计算方法→建模和仿真→模型开发和分析→模型验证和验证; •硬件→通信硬件、接口和存储→外部存储; •信息系统→数据管理系统→数据库管理系统引擎→数据库查询处理→查询计划; •信息系统→数据管理系统→数据库管理系统引擎→联机分析处理引擎; 1Presto是Facebook,Inc.的注册商标。 2本报告的早期版本将出现在2020年ICPE会议录中。 计算存储的建模分析2 关键词 ColumnarDatabase,Parquet,SQL,SmartStorage,加速,卸载,TPC-DS,Spark,Presto,OLAP 1Introduction “大数据”存储解决方案的当前发展旨在使数据处理更接近数据所在的位置,从而减少不必要的移动并大大加快数据处理速度。计算存储是一种新兴趋势,其中在存储层内发生相对大量的数据处理。暴露闪存内部计算能力的新设备的例子包括三星的SmartSSD[1]、NGD系统[2]和ScaleFlx[3]。这项新功能为I/O繁重的工作负载提供了性能改进的机会,这些工作负载包含易于在存储源附近完成的操作。最关键的数据库分析类型之一——OLAP——很好地说明了这种机会。它通常是非常I/O密集的,并且包含相当多的构建块,这些构建块可以无缝地移动到计算存储设备或由计算存储设备执行。 卸载并不是一个新概念。网络处理器,GPU和最近的机器学习专用处理器被广泛用于加速特定的计算内核,同时释放CPU资源。我们将证明,将更多耗时的操作从主机CPU卸载到存储可以提高工作负载性能和系统效率。当然,直接的好处是I/O体积的大幅减少。I/O的这种减少导致主机资源利用率降低,这不仅提高了单个查询的性能,而且增加了服务器容量。除了数据库操作之外,可以在存储设备附近执行的其他频繁操作包括加密和压缩 。 数据库分析工作负载尤其是读取密集型。I/O读取占用总执行时间的90%或更多的情况并不少见。将其中一些卸载到存储会减少I/O带宽以及其他主机资源的使用,并且可能会大大提高性能。此外,SSD具有比通过现有信道(SAS、SATA、PCI-E等)暴露给主机的带宽高得多的内部带宽。)[4],这意味着计算存储具有大量未开发的潜力。 本文讨论了将一些重要的基本数据库操作(即Scan,Filter和Project)卸载到计算存储的预期性能优势。我们使用TPC-DS工作负载和在Hadoop集群上运行的两个数据库引擎:SPARK-SQL和Presto来评估性能估计模型。 Thepaperisorganizedasfollows:Aftercoveringpreviouscomputationalstoragedatabaseoffloadingwork,weexplaintheOLAPworkloadselection,andtheconfigurationofourtwocluster.InSection IV我们深入研究TPC-DS特性,并检查在两个Hadoop集群上运行的整体性能,这一直是我们实验的重点。在第五节中,我们解释了我们的建模方法,在第六节中,我们描述和分析了建模的结果。具体来说,我们展示了计算存储优化的实质性加速如何取决于多个因素。最后,我们简要讨论了适用于计算存储下推的其他SQL构建块 ,并得出结论。 计算存储的建模分析3 2以前的工作 以前关于将SQL函数下推到计算存储的大多数工作都集中在特定数据库引擎的特定功能上。Smmarizer[5]修改了现有的NVMe命令接口,以实现四个操作:初始化变量或设置查询;读取数据并执行计算;读取数据并过滤-选择案例;以及将输出结果传输到主机。从他们的案例研究中,使用3个TPC-H查询和一个非常小的尺度因子 (100MB-0.1SF),我们确定他们也可以进行相似性连接。他们比较了这三个查询的不同程度的计算卸载。作者表明,可以在接近存储的地方进行一些复杂的计算,并简要讨论了数据集成问题:如何组合来自不同格式和来源的数据。 他们专注于一个特定的集成问题:相似性连接,并描述他们使用的启发式方法。未解决的是如何集成真正不同格式的更大问题。 YorSQL[6]基于MariaDB。YorSQL允许以ISC任务的形式将复杂的查询操作卸载到智能SSD。这篇论文花费了大量的时间来讨论优化器启发式方法。从作者的性能分析中,一个非常有趣的观察是,虽然您的典型SQL应用程序 -OLTP或OLAP-无法耗尽NVMe带宽,但其接近存储的实现可以。 饼干[7]是YorSQL用来实现其计算存储操作的工具。它为用户应用程序提供C++API。用户的带有饼干API的SSD端C++程序,称为SSDlet,被加载到设备中。主机端程序使用libsisc调用和协调SSDlet任务的执行;通信是通过将输入和输出端口链接到特定任务来完成的。在这里,他们还声称用于访问文件的API几乎与标准库相同。 ExtraV[8]是IBM在基于CAPRI[9]的图形处理计算存储方面的努力。本文介绍了一个FPGA原型,该原型在设备附近执行公共图遍历函数。它的工作原理类似于图形应用程序的虚拟内存,因为它为主机提供了整个图形都存在于内存中的错觉,而实际上它是部分存储和压缩在SSD中的。作者指出,图形处理主要是在内存中完成的,无论是在单个服务器还是在集群中,当图超出可用内存时,它不能有效地完成。 PG-Strom[10]是PostgreSQL的加速器,可将部分SQL工作负载卸载到GPU。支持Joins和Aggregates。但是,到发布[10]时,所有馈送到GPU的数据都来自主存储器(不是存储)。 Neteeza是第一个使用FPGA作为分析数据引擎的计算存储计算加速器的成功产品。它不需要任何软件安装或调整。只需即插即用即可。 Neteeza数据库引擎基于Postgres[11],并在其FPGA引擎中实现四个功能:压缩,项目,限制和可见性。Fracisco[12]声称Neteeza的引擎以线速解压缩数据。Project和Restrict操作分别根据查询的SELECT和WHERE子句中的参数筛选列和行。NeteezaVisibility引擎专注于数据库完整性,并在其中过滤掉查询不应该看到的行 ,例如由尚未提交的事务插入的任何行。 计算存储的建模分析4 计算存储也吸引了除SQL和数据库应用程序之外的兴趣。例如,REGISTOR[24]是一个FPGA平台,对从SSD传输到主机的任何文件应用正则表达式搜索;INSIDER[25],也是一个基于FPGA的驱动器控制器,展示了一个嵌入可编程的虚拟文件系统,允许程序员根据应用程序的特定需求推送定制的操作。 3工作负载和设置 在这里,我们解释了TPC-DS基准,以及在所描述的经验中使用的两个集群配置。此外,我们描述了两个数据库引擎(SPARK-SQL和Presto),并解释了使用Parquet文件格式将SQL操作卸载到计算存储的基本原理。 3.1TPC-DS “TPC基准DS(TPC-DS)是一个决策支持基准,它对决策支持系统的几个普遍应用方面进行建模”[13]。 TPC-DS包含24个表,组织为雪花模式。它包含6个非常大的FACT表和许多小尺寸表。此外,TPC-DS由99个查询组成,每个查询代表不同的商业问题。因此,即使这是一个人为的基准,它也试图反映现实生活中的应用程序。架构是可扩展的,最小的是1GB,最大的是100TB。1GB数据集仅用于QA。性能以每小时查询@比例因子(QphDS@SF)来衡量,并且必须包括多个测试(与功率、吞吐量和数据维护有关)。在这项研究中,我们考虑了功率测试的一个子集。有关TPC-DS基准的更详细说明,我们请读者参阅[14]。 TPC-DS自2007年以来一直存在,但直到最近和一次重大重写之后才迎头赶上,第一份官方报告日期为2018年3月(思科)[15]。截至2020年1月,仅发布了六份官方报告。尽管如此,TPC-DS的子集被业界大量非正式使用,以展示未来的趋势[16][17]。TPC-DS是众多交易处理绩效委员会(TPC)基准之一[18],因此涵盖了足够多的通用OLAP案例,对执业者有用。 由于FACT表比DIMENSION表的数量级大,因此我们将倾向于“FACT表扫描重”的查询,而不是“DIMENSION 表扫描重”的查询。 计算存储的建模分析5 3.2测试配置 本文使用了两个集群,由于它们被配置为运行SPARK-SQL和Presto,因此我们将它们简单地称为SPARK-SQL集群和Presto集群。每个集群都有八个不同硬件的数据节点。表I中列出了详细的配置。两个引擎都使用ApacheHiveMetadata和Parquet文件格式。 SPARK-SQL是ApacheSpark用于结构化数据处理的高级工具[19]。它是一种内存中的分布式RDBMS,可以理解SQL和DatasetAPI(在Java和Scala中可用)。用户应用程序通过命令行模块,JDBC或ODBC与SPARK-SQL接口。SPARK-SQL还支持读取和写入存储在现有ApacheHive安装中的数据。 Spark-SQL Presto 数据节点硬件 CPU Intel(R)Xeon(R)Gold6152CPU@2.10GHz Intel(R)Xeon(R)CPUE5-2699v4@2.20 GHz 记忆 256GB 256GB到1024GB 本地存储 2xNVMeSSD3.2TB 3xNVMeSSD1.6TB 软件堆栈 操作系统 Linux内核4.13.0 Linux内核4.x.x SPARK-SQL/Presto 2.3.0 0.205 Hadoop 2.7.3 2.9.0 蜂巢 1.2.1000 1.2.2 HDFS复制 1 TPC-DS 比例因子 10000 存储格式 Paquet 表1-群集配置 Presto是一个分布式SQL查询引擎,旨在查询分布在一个或多个异构数据源上的大型数据集[20]。Presto提供CLI接口和查询处理(解析器,计划器,调度程序),但将使用其他软件组件(ApacheHBase,ApacheHive,MySQL等)提供的数据和元数据。).Presto通过连接器与这些其他组件进行交互,这是它的名声,因为它可以将多个不同的数据源无缝地组合到一个查询中。 不需要非常昂贵的ETL(Export-Transform-Load)数据集来分析它们。类似于经典的大规模并行处理(MPP)DBMS[21],Presto是一个在集群上运行的分布式系统。Presto客户端将SQL语句提交给主守护进程协调器。使用元数据 计算存储的建模分析6 从连接器中,协调器解析查询,生成计划,然后安排和协调工作器的执行方式。工作器从连接器获取数