00:00
休息。呃,大家好,呃非常感谢有这个机会能给大家分享一下我们呃基于这个英特尔often t做了一个呃大数据的一个加速方案,那今天的话主要我和魏建老师讲,然后我可能会负责讲一下那个大数据这一块,然后把呃硬件部分的呃主要是交给魏建老师来去cover,然后今天的这个议题大概是说我们会讲一下我们的一个内部的英特尔一个产品叫OVP,然后呃针对于这个持久化内存,我们其实在VP里面引入了一些新的feature,主要就是这个叫m cash的一个功能,然后展开对于这个m cash们会进一步的做一下他的一些呃特性的一些介绍,呃包括他的一些主要的一些功能的一些介绍,然后以及是我们后续的一些工作。那在我们展开之前,可能大家会有一个疑问,就是英特尔一直是一个硬件公司的一个面貌展现给大家的,但其实我们这个呃,就我所在的这个部门,其实是一直深耕在大数据这个领域之中的,早在很早之前,我们其实有一个叫idh的一个产品,就是英特尔的呃海度发行版,从那个时候开始,我们就开始在大数据里面做一些呃工作。那最近的话,其实大家也看到,就像国内的话,Link以及国外像SPA其实都已经是一个非常呃热门的一个框架,所以我们现在目前的一些专注点也是围绕这两个引擎做展开的。那现在我们回到这个OAP产品,OA产品的一个呃全称叫optimize and一个package,所以它的一个定位更像是一个package,就是说我们可以用这样一个软件包,呃,里面其实提提供了很多不同方面的一些,呃,性能扩展啊,或者是功能的一个补习。
01:48
那这个产品它本身是个开源的,就是在下面这个其实是我们的一个rap的一个地址,那这个rap如果大家打开的话,其实可以看到有很多的子项目,每个项目可能针对不同的点做一些优化,那这个项目整体都是有开源的,然后跟一些相关的社区做一个共同的一个维护,那目标其实刚刚也提了,就是只在去扩展和呃提高现有的SPA的一些性能和功能,那大家可能刚才也听各位呃专家也讲过,就是说像SPA它的性能其实各方面都表现的很卓越,但其实我们如果进一步的去呃pro艾琳或者说去呃去调优它的一个性能,会发现它在很多地方呃还是有一个进一步提升的空间,但是现有的SPA它其实本身它的一个框架层面上会有很多的限制,比如说它是一个纯Java,一个实现或一个实现,所以JVM它现有的一个实现,比如说它现在是支持或构件,但是它的一个呃,基于行内个引擎,它其实没有办法像让SPA能够。
02:48
充分利用上现在这种现呃modern hello威它的一些特性,比如说像呃S的F512,或者说GPU ipg等等这些功能,其实它是没有办法直接利用上的,然后他的一些内存管理,其实也是基本都是依托于Java的一些内存管理,所以说像我们一些新的呃持有化,今天会讲到的这个持有化内存啊,或者说呃,其实不光光是持有化内存啊,有很多的一些不同特性的一些内存方案,比如说像一些high ban这些都是一些内存的管理方案,呃内存的一些呃介质,那其实SPA现有的一个设计其实还是比较传统的,就是内存和STORAGE2块,那这块的话也是没有办法做一个扩展,那我们其实可以看到SPA在很多场景下,比如说我们一些呃对容量,内存容量有很大需求的一些场景,那我们Spark确实他有他的解决方案,比如说它可以呃,Ste对吧,但是其实我们是可以更好的用上这些。
03:48
内存啊,或者说他的一些下Le,比如说特别是一些IO很敏感的情况,我们是没有办法进一步提高他的一些IO问题,那这些其实都是可以通过呃,我们这个OAP软件包做一些提升,或者说补齐一些相关性,呃功能,比如说我们支持这个remote销售等等方案。
04:10
然后除此之外的话,我们也跟很多客户呃做一些沟通和交流,他们也提到就是说批数里在很在他们的一些业务场景下,其实他们的性能还是无法满足这个需求,所以针对这各个方面的一些,我们其实推出了这样一个OPP的一个软件包,那今天的话,我因为时间限制,我只会讲一下我们其中呃关于P漫的一个呃,一个feature,那其实这边其实我们可以看到这边有很多个不同的组件,比如说针对于stop,呃,CQL这块,那我们有执行引擎层面上的一个扩展,呃,比如说我们有个native cql engine,这个其实有点像,如果大家关注于breaks,或者说其他一些业绩的一些,呃,公司的一些最新动态,其实会发现很多公司都在做一些native的back end,那这边呢,我们这个native s engine其实也是对标类似的一个产品,呃,模块,那这边的话,我们主要是用上了英特尔的一些S的指令来加速。
05:10
这块的一些功能,那像还有一些我们跟客户啊聊到他们其实有一些CQ index的一些诉求啊,比如说他们想要在一些极查的环境下能够得到一些更好的性能提升,那这个我们会有个C口index的功能,然后那个像c data source cash这边其实呃社区本身它是提供了这个对source v望v two的API,那v two还在进一步完善之中,那这块我们是基于这套API做了一个扩展,然后能够让我们的一些像持久化的内存,包括我们的一些新的呃可呃加速器能够在这个层层面上能够用上,那这边我们有个叫cql data source cash的一个功能,那今天我们其实主要可能是围绕这块展开,因为这块跟持久管理层可能关系比较大一点,那呃还有我们是呃还有一个叫unified data source这块主要是被那个native s engine用上,因为呃我们整个native s engine很大一块都是基于AR的一个data板上来实现的。然后。
06:10
后针对于machine生learning令这块,我们有呃呃OAP的ML力这个呃这个扩展,呃不叫扩展包,其实是说我们基于一些新的one呃英特尔的光API做了一些重新实现,来解决传统模生learning力呃基本性能不可用的一个问题,比如说它的一个driver要做一个性能同呃数据收集,那其实driver很容易就是同为一个瓶颈,那像呃我们像看到腾讯他们其实就做一个perter s一个实现,那我们这边其实是基于那个one c就是做了一个呃connect的呃的一个扩展来提升他一个整体性能,那我们其实可以看到很多单一的算法上我能提高显著的提高它一个性能,然后Spark Co这块,我们刚刚其实也讲到了,像一些memory的一个扩展,呃呃,我们应用上持有化内存能够引入一个新的内存形态,能够扩展原有的这个两两层那个,呃,Memory storage的一个结构,那这块其实是。
07:10
我们也是跟持久化内存有关,在这今天可能主要是讲上面一块,然后还有瞎,刚才我们提到的这个remote效果,以及这个基于销的一个扩,持久化内存一个扩展。然后呃,这边可以简单讲一下这个feature,然后后面时间可能先交给魏建老师讲一下持有化内存,给大家科普一下一些一些硬件的一些背景知识,那这边是我们现下的这个呃,这个呃VP cash的一个架构,那现在我们支持了两呃,主要是围绕着呃盖作业我们做了一些提升,因为我们看到这块的一个IO诉求其实是比较高的,那目前的话我们支持两个主流的框架,一个是SPA,一个是link。呃,然后这两块的话,我们其实不单单是解决一个cash功能,我们其实还是把一些呃算子下放到这块,然后在早期帮你把算子做掉,那这个其实有点像pres里面叫一个叫SC的一个project,那他们其实也是支持类似这样一个功,那除除了这一块的一个我们叫他in贝的模,就是说你的这个cash跟呃就计算和存储节点是在一起的时候,我们是可以在呃通过GI的扣,然后把这个呃计算能够行量下来,那其实我们也看到像呃M总上面他们有这个AWS的一个shift,他们有个阿cash,它其实是一个三重结构,那我们其实这块也是是实我是实现了一个基于native的一个ated cash,那这个地方我们其实是也可以直接是push到一到远端,然后能够在一个de的一个cash的一个class上面,能够帮你把这些计算给呃早期能做掉,那这样的话,其实我们后面可以看到,呃早期做掉其实有很多好处,那证明我们后面可以进一步的展开。
08:52
介绍一下,然后最底下我们是目前比如说像K的话,我们支持了呃英特尔K这边呢,我们的一些呃附加价值是说我们基于这个英特尔的一些硬件,比如说像一些加速器,我们在这块做了一些支持,然后整个这个项目其实重度的依赖了APP的一些组件,包括了像他的一个lady,但我们这边进就做了一些增强,还有这个他们的一个pass组件,Pass组件如果大家对呃瑞这个项目就是瑞其实是一个新的一个计算引擎了,嗯,这块其实是瑞社区贡献给的一个组件,那我们这边其实是用了它的一些特性,比如说他能够支持这个share memory,这样的话,我们在单机上面它的一个呃,其实就可以共享整个一个cash的一个数据,它的一个DEP会降少降低很多,包括它的一个CMMR的一个机制,其实我们只要返回到一个呃,FD那上面的一个计算进呃进程直接可以real copy去访问你这样一个数据块。结合我。
09:52
的这样一个持久化内存,它其实在文件系统上我们支持了一个叫FX de的一个模式,这样的话你其实直接可以跳过这个配cash,那其实整整体的个性能其实是非常提升是非常可观的,呃,那整体做一个总结的话,就是说我们在对于这个新的硬件也做了一些比较大的一个支持,以及我们针对于不同的场景我们做了一些支持,那后面的话,我们可以先把这个视野会回到这个硬件部分,然后我们再看一下,如果呃,这个整个这个项目是如何结合这个持久化内存让SPA性能能够进一步提升的,那我先把这个时间交给一天老师。
10:33
那个呃,大家下午好,呃,我想呢,就是帮助大家更好的理解这个OAP模块的运作的基础,那么他是他的这个很多设计呢,实际上是基于我们系统里面有一个更大的内存。啊,有这样一个大的内存之后呢,我们才能够展开更多的这个进一步的这个优化的这个机会,那么我们在这个。这个。这个内存的这个优化的在这个点上面呢,往往往我们很多做软件的这个开发的人员呢,往往就面临着这个硬件上面,其实是资源是有限的,并不能够给我提供无限的这样一个扩展可能性。
11:11
那么在英特尔在规划我们的硬件产品的时候呢,我们也是看到这样一个一个问题,所以呢,我们通常在,呃,在我们的这个存储分层的结构上面呢,我们设计了这样一个分层的体系啊,就在我们的核心端呢,我们顶顶端是我们的处理器里面有比较有限的我们的LEVEL123的开始资源,然后呢,才是我们的我们讲的这个DM的这个这个资源空间,如果说这段空间如果能够做到无限大,那我们很多程序设计上面,其实呃,很多优化可能可以直接借助硬件来解决掉了,我们的软件开发就会变得简化很多。但实际上呢,这段呢是呃,从目前的这个条件来说是不可能的,因为D这个介质呢,它的密度目前来说是比较有限的,实际上在我们呃运维那边或者平台那边能给我们的硬件里面,他都通常这个内存空间是是限定死的,或者说不可能给你无限大的空间,因为这个成本相当高,那么我们提出来的一个方案的,呃,这个分层设计呢,是希望说诶我们DM它很好,性能很好,然后呢,可惜呢,就是贵了,然后呢,密度也比较低,我无法做到很大的空间,那如果说我能引入一个。
12:19
呃,跟他比较接近的,但是成本低的多的,这样一个新型的硬件介质,能够同样是来做内存,那么我们在软件体系上面,我们相当于可以给我们的开发人员提供足够多的内存空间,让他的这个资源能够变得更加容易获取。那正是因为基于这样的一个设计思路,那我们提出来这样一个硬件底层的方案,也就是说我们的基于呃,英特尔奥腾这种介质技术的创新设计的内存产品,这个呢称为自久化的内存,这样一个自久化内存呢,可以和我们的主机平台和DM共存在一个体系里面。那么在这个体系上面,我们就可以引入到更多的软件的设计里面,去,利用这个更大的内存空间来完成很多工作,设想一下就是说我们原来如果因为你内存不足啊。
13:04
经常你的系统里面产生这个这个pitch或缺页对吧,然后你这这这个对系统是一个,其实是一个很大的资源消耗,你就会转转这个系统可能会帮你转移到这个,呃,这个磁盘层,然后呢,去调这个数据,重新调回到内存,解决你这个缺页的问题,但是如果说我今天内存空间我突然很大了,足够的啊,我就不需要触发这些机制,我就能够全部在内存里面进行计算啊,这样的话呢,我的问很多问题就改善了。那么下面我们来看就是说这个基于这个介质的,呃。这个几个特点,那这个介质呢,它是第一它的延时非常的漂亮,就这个低,它是一个非常低延时的,低延时的这个存储介质,这个介质的延时的水平和目前我们用的。呃,可以说最好DRA它处在一个数量级啊,但是这一个数量级大家听得懂啊,就是说呃,有个几倍的差距,但是呢,已经很接近他了啊,就是说比如说我们正常的DM大概是在80~120个纳秒。
14:10
我们这个介质大概是在180~500个纳秒之间,呃,基本上就是处在一个水位上面,所以呢,这是他能够拿来做内存的一个性能基础啊,普通的我们讲外面的这种,呃,基于这个ne的这种存储啊,或者哪怕已经是很快了,它都是这个new秒或者到微秒级啊,这个就是每一档就是1000倍啊,就是这个差很远。第二个它本身也是自接寻址,这一点上面和目前的DM的这个方案,它是基于三级管的技术实现的,它也是直接训这个也是一样的。原地插写,大家知道就是说很多持久化的介质呢,特别是我们拿来做固态盘的这个。他是不能够写完一个数据,然后呢,我能不能就地再写一个数据上去,还是不行的,他必须要旁边再去找一个新的块啊,然后再写新的数据,那么过去数据作废了之后,他等段时间内部它有一个垃圾回收的机制,慢慢把它清理掉,所以呢,盘的性能通常就是你看第一次用它还不错,用一段时间啊,你盘的数据很多了之后,他就渐渐慢下来了。
15:13
啊,就是因为他要花很多精力去做垃圾回收啊,整理啊这些工作,但是这个戒指没有,他和DRA是一样的,你今天这里这个位数据改掉,下次再来再把它改回去,不用做任何处理,可以原地插写,那么最后这一点呢,是他所不具备的,也就是D所不具备的,它是持久化,你今天写的这个数据,你今天关了店。嗯。你再开机,理论上这个数据还在那里,就意味着咱们的内存,你在内存里面布局的一个数据结构,理论上啊,我觉得讲的是理论上你重新开启之后,你还能再把它找。啊,所以呢,你这里面就存在着说我今天我在程序里面布局的数据结构,我可以不用动了,下一次啊,特别是那种做数据分析的,我每次从这个其他层19层取来的数据结构部署到内存里面,如果是很大的TP级别,你可能这个数据要几十分钟几个小时才能完全恢复过来。
16:07
啊,但但是这个就不需要他有这样的一个特性,只不过我们今天的K还不具备。管理这样的内存的能力,需要用我们的软件来管理,因为科乐他不知道,他总觉得世界上的内存关了机都没有了,再开机重新来过,对吧,他认为世界上内存都是这个样子,现在目前可能对于这种所谓持久化的内存的这种数据管理恐怕是要比较多的年头来嘛,把它彻底改变。这个才能够改变目前的这个框架结构,但是呢,我们硬件就在前面,硬件已经具备了这样的能力,这就是我们这个能做这些的他的几个物理特征,虽呢我们呃这个比较多的,拿它这个利用我们这个产品的这几个关键的特性来说,这个首先我们的容量啊非常的大。我们本来就是要来解决这个容量不够的问题,就是我们容量当然做的很大,大家看到我们的一个内存条。外观一模一样的多一个散热片,它的大小呢,是起步128GB,三种规格,128GB 256,五百一十二一一根就是512,那你前一台服务器,你要是呃24根长,其中至少有一半可以插我们,我们目前当前的主流平台里面最少可以做到六个TB啊小小一点的话,可以从512个GB到一个T到1.5个T,就一。
17:23
呃,1536的GB啊,这些都可以做,这是我们的这个在大容量上面的优势啊,然后我们还可以做到持久化啊,在这个呢,需要软件的突破啊,当然我们呃有很多软件已经可以具备这样的能力了啊,然后呢,我们的成本目前大致来讲是现在DM的大概一半。啊,目前M的整个今年的行情都在不断的涨价,我们目前的这个差价优势还还在扩大啊,这是我们的在给用户在TCU上面带来的很大的好处,这也是为什么我们今天,呃,刚才讲这个徐晨老师讲这个OAP这个模块,这个模块用在我们这个上面,从成本上面啊,如果说你用d develop成本很高,但是用我们这个用户觉得诶这个成本感觉就能承受了,对吧,然后呢,就是同时呢,我们还是一个加密的一个设备,也就是说我过去的D它是不加密的,但是他的他总认为呢,就是说我写进的数据,反正我掉了电之后数据就没了,我也不怕别人偷取,对吧,但我们这个写进去呢,他不会掉,但是呢,我们是给他加密的,所以呢,对于其他人,就是即使你得到了这个东西,你也拿不到这里面的数据。
18:30
啊,所以这是我们这个这个呃的设计。嗯,那么稍微看一下它内部的价格啊,因为我知道在座可能很多都是搞软件的,看硬件的这个东西肯定跟,但是呢,实际上总体来说,我们把这三片去掉以后,大家看一下中间呢,有有一个控制器啊,这样一个控制器呢,它负责了很多的工作,包括我刚才讲的加密的这些工作都在他这里面,但是它更多核心的功能呢,是说第一我要向向上跟CPU之间,在PC总监上面做这个协议转化和交互,包括做这个C的控制管理,这些都是由他来完成,那么对内和我们这个奥腾介质啊,做这个介质迷列这个管理,这些都是由这个控制器来完成。
19:12
那么除此以外呢,我们这上面当然还有Pak啊,还有这个ati地址的这个控制QDQ的这个buffer上面的一些控制所有的内存的,目前内存条上面所具备的所有的特征,在我们这上面都有啊,你放上去之后,目前你有的OS下的内存管理的所有的工具,它所读取的信息,我们这上面全都一模一样给你提供的。所以这是一个高度和目前的D很兼容的,但是有一条啊,我不能够拿着这个放到我们其他友商的这个主板上面啊,他呢需要配套我们的处理器啊,这两者之间是配套的关系。在这里面有一个协议的控制的问题啊,所以只有我们的内存控制器能够管理它,那么这样的话呢,就实际上也就涉及到这个设备的使用模式,还说你居然是个内存,我是不是拿进来了就能用啊,可以拿进来就能用,我们这种这种模式呢,就称为内存模式啊,就是这个内存模式,就是说所有的它的这个硬硬件上面的差异,全都是由我们的硬件的服务器,就是你从OEM厂家买到的这个服务器里面,他就已经具备了这个能力。
20:17
你拿到手之后,如果说我们的运维的同学啊,在这上面他去安装一个操作系统,装好了之后交给你来使用,你在上面做开发,你感觉到的就是一个很大的内存,你根本不觉得这个下面硬件有什么不同,你也不需要装驱动,也不需要有做任何的变化,你只觉得这个机器内存比其他机器大大好几倍啊,对吧,这个就是我们所谓的内存模式啊,所谓的这个差异呢,是由我们的内存控制器帮你去实现了,刚才我们金字塔结构里面的性能层和。我们的容量层这样一个管理模型,这个模型是由我们内存控制器来完成硬件,硬件实现,不需要你做软件上的任何调整,这个是一个最佳的兼容性上面的这个这个特性,当然这个方案有这么多的好处,但是他其实也有也有代价,因为你的可控性比较低。
21:05
你管理不了你的这个cash层和数据层之间的这个关系。那如果你想要管理的话呢,我们就需要用到我们今天讲的这个ad这个模式,咱们这个这个刚才这个OPP这个模块呢,实际上也是基于我们这个ad这个方案来实现的,那么ad很简单,我们的概念就是说今天我想要把我们的。的管理交给Linux的来管理,而后面的这个数据布局,你的程序上面怎么控制,全部由你的应用软件来完成,在这个上面来实现。这样的话呢,你的所有的控制权全都回到了我们开发人员的手上啊,你只要知道这个硬件在我这里,我拿到了指针之后,我开始在这上面布局空间,然后呢,我把这段地址的空间拿来做内存分配,我来用就行。那么你你需要理解的就是系统中有两种资源,一种呢是由可控制的标准的RA的内存资源,就是我们常说的传统内存,第二层就是我们这个持久环内存,这个持久环内存是由你来自行自行控制,所以我觉得这段数据比较适合它的这个特性,比如说他读多写少,性能更好,对吧?它的写性能,因为大家知道持久化是需要时间的,所以它的写性能要比比rap弱得多。
22:19
但是呢,它的毒性能就很比较接近,相对来说做很多图的工作呢,比较适合他,还有呢,空间很大啊,比较适合处理一些,比如说我们做人工识别的这个AI里面的特征库的存放就很典型的适合放在我们这个上,你放D很贵,他一定没那么大空间给你用,但是放我这里就可以。那么同样刚才我们今天我们要谈的这个OAP这个模块也是这个原因,我提前从分布式这个存储里面预取数据上来,如果我搁在比较珍贵的DM空间里面,那一定成本很高,对吧?我一上来可能要几百个GB,甚至要到一个TB上,但是我放在这个上面,我觉得这个就是可以负担,而且这段空间我正常拿来去使用,我能够搭成性能的提升,所这是我们这两种使用模式的这个选择,我们给你提供了一种完全内存兼容的方案啊,但是呢,就是说你的控制权就没有啊,你你只能看他的性能表现,如果性能表现很好,不错,那么性能表现不好,你也没办法改,改变你的结构,因为底层一年控制。
23:19
但是如果说我们想完全自己开发,那就走我们的ad这个方案,那么我们ad在开发上面的话呢。呃,这一块的话呢,其实也是完完全全是一个标准化的结构,这里面呢,就是有一个这样一个组织叫实念,实念呢实际上是对于这个整个目前在呃,持有化存储这个方向上面的一个标准的一个委员会啊,他目前控制整个这样一个结构,那么这个结构呢,实际上是实际上提出来的一个标准,不仅仅是英特尔的直化理。可能大家如果呃对硬件比较有点了解的话,可能好好几年前有一个叫做ND叫非式内存的方案,曾经也曾经流行过一段时间,但是呢,它容量比较小,而且成本也很高,但是呢,同样我们也兼容这样一套框架,但在这个框架里面呢,核心层呢,就是我们的驱动,目前主流的Linux Windows,它都具备了支持M或者是叫叫per memory这种持久化内存的这个驱动程序,所以我们不需要装外驱的,你只要kind升到升到位就可以了,他就可以用。
24:20
Windows也是一样,那么V这些虚拟机也是一样,它也能够支持这种这种类型的硬件,那么这里面呢,接下来我们驱动有了,我怎么用它,那么我们可以把它把这个设备定义成快设备,也可以把它定成字符设备,这个这个模型的选择是在于我们的系统管理员,或者是咱们开发给他提要求,我要这个方案,我说我要那个都可以。那么如果说我们把它做成快设备,咱们就可以借助已有的文件系统的接口来看到这个事。啊,我们就可以对他进行在上面加载文件系统。呃,这个这个在它上面存,存放文件都可以,当然我们也可以对它进行开发。
25:00
那么这里面呢,就牵扯到一个叫做perci memory where system,实际上就是我们kind里面所提供的像EXB4啊,XFS啊这类的文件系统,它就可以支持数据管理锁,他虽然用了快设备的这些通用的管理接口,但是呢,他依然会按照字符,就是这个字节可寻址的这种方式来管理我这个硬件啊,利用到我这个优势,那刚才呃,可能呃,有没有听到许晨老师在讲的时候,他用到了,他说我要跳掉,可以直接跳过page CA,可的pitch CA。为什么可以这么做呢?就是因为这个。Preci memory的这个file system具备这个能力,你在want这个设备的时候,可以加一个de e就加一个option。系统就知道你不需要我来为我的这个上面的文件做任何的在内存里的。缓存我可以直接访问,因为它就是一个内存,我不需要再去到再去给他做一个缓存,然后再分一步再跳下来,那个方案里面有时候好,有时候实际上是拖累。
26:03
那么这个就是在这个框架里面都已经定义好了,那么那么如果说我传统的我就借着这个文件,我说我用pass接口来管它可以吧,也可以的,那么我怎么才能更高效的使用这个设备呢?咱们这里呢,就要用到一个mm map的函数,这个是C和Linux提供的一个标准功能,我就把它映射进来,映射进我的程序空间。完了之后你就可以拿到一个空间的这个起始的这个指针地址,完了之后你愿意用什么样的,呃,空间分配方法你自己决定,你自己开发环境决定,你就可以去用。啊,然后你怎么布局这个数据都可以,我相信待会那个徐老师也会在分享我们OA在设计和开发的时候的一些一些心得。那么这一套框架呢,就是引用了这样一个结构,那在这个结构上面呢,呃,我我们讲有的时候呢,还是有一点点复杂对吧,我们觉得特别是不愿意搞底层的这个东西啊,我全部用这个底层的当然固然好啊,那么我也可以说我们假设我不太愿意,那我们也提供了一套叫做PMBK的这业一套开发部。
27:08
那么这套开发库呢,完全开源,他就是他的思路是其实一样也是基于map的这种概念,只不过说我帮你都封装好了一个个的library,一个个的函数,你照着我这个library来走,然后相对你的解开发工作就比较简化。但是呢,就是说目前来说呢,我们提供了比较底层的像PM这种库,然后呢,中间具有事务性的库呢,叫labor PM oppg啊,当然还有其他的一些功能的库,像你做log的库,做这个快存快存储的库啊,就大块数据存储的库都可以,甚至你可以做这种远程的基于RDV的访问对端的内存的这种方案,呃,我们的库也能提供,只不过上层呢,我们比较推荐用C的C加加,大家也都知道啊,因为操纵这种硬件资源的C的效率更高啊。Java呢,我们有一部分,因为我们提供了一些Java的这个转接的库。然后Python就更少了,他本身不太具备这个能力。
28:04
那么这个呢是呃,就是我们目前开发的这个整体的这个结构啊,大家有兴趣的话呢,可以去到咱们的这个共享的这个资源网站啊,就com上面还有呢,我们有一个叫做Li p man的一个一个官网,里面有大量的这个资料,叫PM.i感兴趣的这个同学可以去。啊去看一下,甚至我们提供了一个模拟器,你都不用有持有化内存,就可以在你的笔记本上面尝试说我们这个库的开发的一些特征啊,然后我们也有一些这个推荐,推荐的在这个官网上面也有一些,呃这个这个呃开发的这个输入的电子版的都在我们这个官网上面可以去了解一下,国内也已经我们的一些同事已经写了一些书啊,就是介绍说我们整个开发工程的做法啊,其实其中的就是说徐生老师也上面也也有这个写一些章节,关于我们在大数据上面的这个应用的这个例子,所以我想呢,今天呢,就是说在开始更多的细节讨论之前呢,我给大家呢,先介绍一下我们硬件了解一下说诶他这个开发的基础啊,就是说我们这个上城软件的这个硬件基础是怎么样一个逻辑啊,那我就给大家分享到这里,谢谢。
29:20
好,谢谢魏建老师,然后我们回到那个op,那个cash,然后刚才其实我们大概给大家做了一个初步的印象,然后我觉得可能先展开讲一下这个硬件,然后我们可能会有更多的呃了解,是说我们这样一个设计是如何产生的,那呃刚才其实提到我们这个功能其实跟这个硬件是紧密。是呃,是跟硬件紧密相关的,如果说从一个软件站的一个角度来看的话,我们最下面这个是如果我们要采用这个cash功能的话,最下面其实我们需要一个只有化内存的一个硬件模块,然后在这个之上是我们刚刚说的要一些呃,并ma world system,然后在这个之上我们是构建了我们这样一个方案,所以我们的这个方案是在SPAC和呃,但但这个你写的这些C其实更上层了,就是说在呃,SPAC口这个原生的这个option的Spark和这个持久化内存这个fire中间的一个方案。那具体来说,其实我们充分利用了上这样一个硬件的一个特质,呃,比如说他的一个real copy,比如说他可以直接通过字节可寻值,特别是说你可以设想一下,当我们去访问做一些呃过滤操作或者做一些的时候,你有一个自己可寻值的一个数据已经在那里ready了,那其实你的整体的一个软件,一站的一个效,呃,不管是效率方面,包括你的一个性能,其实得到都可以得到一个比较到好的。
30:45
一个提升,那这块我们刚刚其实提到了,我们其实是充分的用了这个阿帕奇A的一个很多组件,阿帕A它本身是一个,呃,最早的时候他单纯是一个呃,Memory那个format,呃主要是说像SPA里面,它可以做一些udf拍送的DF和这个SPA之间数据传输的一个功能,那除此,除此之外其实有很多场景其实都会用到up时,呃,比如说我们在做一些GPU的一些计算,其实都会用到这样一个up时,在不同的这个control之间做一个切换,比如CPU和GPU之间,那这边的话,我们主要是用的它的一个native k的一个功能,当然native本身它的一个鲁棒性呢,其实还是有一定的提升空间的,所以我们在这个基础上做了一些提升,然后更重要是说,我们让他能够在这个的reader这个层面上,能够围绕到我们的一个cash,因为本质上我们的一个cash在内存中的一个形态,其实是跟它是呃非常对标的,呃基本上是说我们的力度是在呃呃。
31:46
Trump这个level,那像OC里面可能就是strip这个level,然后我们的一个内存form ma,呃基本上就是这样一个对标关系,然后当我们发现这样一个开始能够命中的时候,我们可以去呃自动的从我们整体的一个呃,现有的这个持有化内存里面直接去废这样一个呃开始数据块,然后直接去根据他的一个地址来选址,然后直接为后续的一个计算做准备,包括我们后面会提到这个project或或者说是一些field功能,然后passa这个组件,刚刚我们简单介绍了一下,那更像是说我们用了这个pass server做一个呃共享内存池化的一个管理,但是它不是一个分布式的,它是一个单机的,那像RA里面,他们是通过来做了一个分布式的一个服务,那我们这边主要是用了一个,呃,单机版的,那它的一个分布式的一个呃,Cash的一个分布式,或者说他的一个的awareness是我们通过扩展SPA现有的这个scale来实现的,那呃,大家可能会问,就是单纯。
32:46
替换这个那一个效果怎么样,那我们其实试了一下,像TCH上面,呃呃,Spark这边提升其实还是比较明显,那flink提升比较一般,这个原因可能有多方面,第一个是说他本身这个他可能用的是这个比较旧的一个HDFS的,呃,Library,然后这边的overhead比较大,第二个是说本身那个性能会比弗Li要差一些,所以它的一个整体提升比例会差些。
33:12
所以这边是我们的也呃第一个呃L模块,那进一步看一下,我们结合持有化内存,如果我们再回顾一下刚刚这些老师提到的这个持有化内存的一些特点,那脑海里面脑补一下,可能是说第一个它是个大容量的东西,然后很便宜相米D对吧,第二是说它的访问的一个late或者他的一个ban位,会带宽会比较的高性的,然后集合这些,其实我们在详细回顾一下我们SPA里面它的一个呃数据访问的一个呃诉求呃同样也是比较契合,第一个是说我们需要有大吞吐的一个呃介质,第二是说我们的这个访问力度呃足够细,不像是一个fire,呃文件呃比如说我们读一个ER file,那其实你就是一个整个文件块,或者说我们要去,呃,或者其中的一个比较大的一个数据块,然后再通过一些软件的方式来做,那这边的话,如果说我们直接利用上这样一个新的特性,那你其实直接就可以跳过很多的一些中间这个read pass上面的一些成本。
34:12
这些成本意味着什么?第一个是说,比如说我们的page cash,它需要涉及到clean not这边你要去做一些location啊,或者是page for,这些代价其实都是要去承担的,然后包括你的这个memory copy,那我们现在有的这样一个持久化内存,其实直接跳过这些过程,呃,你的一个数据的一个呈现形态,就是你最终要用的这个哦,Off的一个column隆victor,那通过这种方式我们可以享受到,比如说它的一个高分组,大容量,呃,吸力度,对吧,这些其实都是我们刚才讲的,那最重要的是说,我们是把它用作一个内存。对。然后我们再看一下,刚才我们提到了pass本身它是个单机版的,那我们怎么让SPA能够用上这样一个cash呢?我们是提供了多种呃策略的第一种,呃主要有两类,第一个是说它是基于一个report机制的,那如果对大大家对SPA内核比较了解的话,呃其实是说SPA本身它会有不同的不停的在不同Twitter会通过它的RPC的一个机制能够report back到它的一个driver端,Driver端其实它的主要功能呃有很多了,当然呃一个重要的功能就是说它的一个schedule了,那我们通过这种report机制,呃第一个是说我可以把我的一些cash的一些update的信息告诉你,那你的在schedule的时候能够更好的利用这样个开,那这样的话,你能够respect这样一个cash的一个local信息,那我们在呃,整个机群的一个场景下面,能够有更好的一个看势的命中率。
35:43
那这边我们有两套实现,第一个是说我们实现了一个,呃如果你是一个长驻的一个方案,比如说你用一个Switch server,那这边我们是支持一个,呃比较简单的一个实现是通过这个memory,一个has map,那更重要的是说我们实现了基于这个RA的一种方式,那在云上的话,呃更多的是说,因为本身它其实呃不存在说我的cash,呃就是它本身不是一个数据,跟这个计算不是一个color k的,呃因为你数据大部分都是remote storage,所以说这块我们也是支持一个,呃,一支哈机,一支哈机的一个实现,那这呃如果说调度层面上解决它,呃就开在哪的一个问题,那这边他更多的就是解决我怎么去用的问题了,那这边其实我们刚才已经提到了,我们整体的一个呃优化方案,其实就是尽量的去用上这样一个呃,是有化内存,大容量,高吞图,以及它的一个字节可云值的一个能力。
36:41
然后现有的支持方案的话,嗯,我们不光是star这边,Link这边也做了一些呃支持,然后这这边这两个方案都是可以使用的,然后性能的提升,呃呃比例的话,这个其实就要看不懂,影响因素就比较多了,然后其实是很难去量化的,比如说你的一个呃热数据的一个比例,对吧,还有你的呃现有的这个集群的一个。
37:08
吞吐,比如说我们看到一些客户他们的一个数据,大部分都是利用HTP这种非常低呃低性能的一些L介值,那这块他因为更多他强调它的一个呃稳定性,第二是说它的一个容量,那这边的话,如果说用这套方案的话,它可以有更大的提升,对。然后刚才我们也提到了,我们会发现,特别是云上的一些客户,或者说是一些呃,不管是public club或者public club,他们更多是走存算分离的一个方案,那存上分离的一个特点就是说你的很多数据都是走远端,那远端的话,呃它有个好处就是说呃我们有大量集群,比如说有呃现有机群可能有几千台,都是一些比较低端的HTD或者怎么样,但是有了这样一个呃存在分类之后,其实我们可以更容易的去扩展现有层级,那传统的扩展方式是说我有计算层的一个扩展,存储层的一个很向扩展,但是我们会发现其实呃计算层它其实也是个有很大的一个规模的,而且他的很多的这种底层,底层的这个计算框架都是,呃,存储介质都是这样HDD的,所以我们会发现很多客户他们有这种很强的需求,是说能不能让你这个态实化,然后能这样的话,我们加速我们的一个计算层,那这样一个mode,我们也是这样应运而生的,那像。
38:28
刚刚我们早期的时候其实提到了像red shift,就是Amazon上面的shift,他们也提供了一个阿跨的一个cash,就是这样一个类似的一个介质,那这边其实我们如果想要享受到这样一个提升,有几个重要的因素,第一个是说你的网络不能成为进一步成为瓶颈,当然我们也发现客户其实那边呃很多时候不会再用10GB这种比较呃网速比较差的一些网,呃网卡更多时候会可能是说采生一种采纳一种100GB啊这种更高的一种网网络机制,所以这块呃逐渐这这部分限制可能会逐渐的降低。那另外一个是说我们要进一步的降低这个网络上面数据传输的一个呃量,呃这样的话其实可以进一步放大我们的缓存的一个效果,那举个例子,比如说我们这边网络传输的是实际的一个数据,呃数据,那如果说呃,放到所谓的放大,就是说比如说我们通过更高的一个压缩比的压缩比是三倍,那对于这边的一个缓存内介质的一个吞吐压力,可能就是一个成三倍的效果。
39:28
比如说你这边网络是10GB10G大B,那你这边缓存层的一个压力是是30GB,那结合我们后面的一个特质,比如说我们能支持一些filter,或者说all的一些下放这些特点,这些特质的一个特点就是说它能够进一步的减少你要会给后面计算层的一个数据量,所以你比如说你的selectivity的是只有1/10,那意味着什么呢?意味着是说你网络这边是10GB,那乘以你的selectiv,除了除以的IV,可能你这边的带宽就是要求有100GB,那很显然很多这种传统的m me可能都已经无法满足你这个需求,那持有化内存它的一个高深度的这个特质其实会在这边进一步展现出来,而更好的是说你能够更好的扩展这样的功能,因为你跟你现有的这个架构没有太多的绑定性,其实可以单独有一个,呃,单独的一个机群,它是一个缓存层,能够去匹配这样一个呃高性能的硬件。
40:24
所以整体的一个设计细节是说我们通过媒体这样一个阿来实现他的一个RPC呃通信,当然我们这边也做了一些调研,比如说像呃阿尔若里面,他们有一个叫呃planner的一个功能,但是这呃调研下来,其实发现他跟我们需要的一些稳定性啊,包括是它的一些性能性其实都差的比较多,所以我们最终采用了雷体这样一个加va框架,然后刚才提到了我们压缩比是一个重要的一个呃,就是最终你提升效果的一个重要影响因子,所以我们这边用了T的一个加速卡在这边,那我们可以用QT这样一个加速卡,能够有个很高的压缩比,同时你的吞吐也不会降呃,而且你的吞吐很高。然后另外就是说我们支持这个呃算子下放和这个呃来减少你的一个传输总量,那后面我们可以看看,除了这个呃缓存本身的一个数据减的总量的一个减少,它其实呃算子下放或者说提前计算它的一个优势,其实还有更多那整体的一个性能,其实跟cash的整体性。
41:25
其实差不多就是它的影响效果,其实有很多的影响因呃因素,但是我们在本地就内部测试,其实会观察到,相比于传统的这种呃计算存储分离,然后你的这个介质是大容量,但是是低存储的一个配置上面,硬件配置上面,加上我们这样一个持有化内存的一个缓存存呃提升效果是非常明显的。然后我们再看一下另外一个特性,就是field projection projection的一个下放,然后这个东西其实如果说大家对呃整个数据发展历史有一定了解的话,其实这个东西不是一个新有的呃玩意儿,然后呃我们先可以看一下现状,就是说如果是引用的开源的Spark,那per本身它是支持这个呃下放的,但是如果你仔细看一下,它的下放其实是力度是非常粗的,粗到什么程度呢?就是说是一个road group,因为它的一个践机制是说我其实本质上可是一个呃落盘的结果,对吧,所以说他还是遵循说我少干一些数据,但他不能达达到一个过滤的效果,是行级的。然后这块我们其实是说我们因为结合刚才我们数据其实已经是一个内进内存的一个形态了,所以说我们其实可以在这个层面上直接帮你做一些计算,那好处是说,呃,刚才说我们的cash的一个效果,这边其实是呃,这个可能扣的比较的模糊了,这边是。
42:47
SPA的构件的一个代码的一个截图,然后这边的构件其实它是呃,把我们把这个do consumer这些都合并在一起,然后这边有一个do,那do本身我们这个实现很简单,就是做一个sum的一个操作,但是你会发现他扣建之后,它的一个实现逻辑是非常复杂的,这边是他扣建的一个代码行数。
43:09
所以你会发现它的一个分支判断非常多,但是如果说我们在早期,特别是呃读完了,我就立马做一个field或者ion,它的效果是说我第一个我不需要去再做这么多的一个分支判断,我可能很早就帮你做了一个过滤,第二个特点是说我们可以回呃想一个场景是说呃我在某一列上做一个filter,然后把这个filter派到另外一个列,但是我最终结果可能只要刚才说的第二列,那这个事情的话,如果说我们在早期做的话,你甚至不需要把这样一个呃第刚才说的第一列传呃号传到下一列,因为你可能直接得到一个掩码,然后基于这个掩码再获滤把第二列,那你可能直接就得到你的一个结果,这样的话,你的前面的一个pass的AJ直接就可以过滤掉,所以我们呃结合TPCH的一个呃呃效果,我们可以看到像特别是Q1跟Q6这两个,其实因为他们主要是一个单表的一个过滤,它的一个提升效果是非常明。
44:09
可了,应该是说有大约两两三倍的提升,都是都是可以看到的,然后具体的实现方式的话,呃可以,呃需要先说一下,就是这个不是一个非常干净的实现,因为他需要改你的一个plan,呃因为我们不想说你前面做的过滤,然后再把再让SPA在后面再做一个过滤,所我们在呃,特别是link这边我们做了一些的rewrite,因为Li本身它没有太多呃像SPA那么好的一些extension point,所以这边的话我们是客的一些SPA扣的,但SPA因为它有个有很多这个extenion point,它可以支持你的一个呃plan,所以说这块SPA边的一个这个我们这个plug还是一非常干净的一个plug,然后另外一个特点是说,我们这些实现是在native层面上实现的,呃,相比于刚才我们说一早先说了Java,它其实有很多ahead,然后我们在native实现,呃,就可以规避到一些这些问题,特别是我们可以用上一些指定级的一些优。
45:09
化,这个我们后面可以简单举一个例子,什么样的什么样的,呃,指令级的我们可以引enjoy,这个后面我们可以看有我们在后续也会进一步的去提升这边的一些装探的一些性的提升效果。然后刚才提到的另外一块就是呃有更多的加速器,这边我们其实只讲了一个QT,其实应该有很多呃黑客技了,然后QT其实是一种加速卡,它可以做这种加密加解密,还有可以做一些呃压缩解压缩的一些提升,那我们这个场景的话,我们没有对这个呃SPA的这个CU做一些呃增强,更多是做它的一个压缩跟解压缩,因为我们对我们来说可能压缩的一个呃ii可能更高,因为他比如说涉及到我们刚才说的cash的一个效果,第二是说那个我们整体的一个memory for可能都可以降的很低,然后呃这个特性的一个特点就是说KT它是个硬件实现的,所以说它的一个吞吐可以很高,同时呢,我可以享受像defl这种高压缩比,那最终我达到一个效果是说呃高压缩比,而而且并且是一个高分度,那传统的你的一个设计师思路,比如说你是一个大量的HDD的一个呃机群,那你可能就选用这种。
46:23
GZ,但是它好处是说我压缩比很高,但是问题就在于说你的这个吞吐上不去,那你拖累的整个计算最后变成你的RO,变成了一个瓶颈,那其实也是得不偿失的。然后这边的话,我们的一个加速点其实很多,然后包括了我们这边提到了这个数落盘的数据,比如说跑KORC,它的一个数据的一个呃,扩展,然后除此之外,比如说shuffle shuffle,它的一个呃,呃,Compression data over the while对吧,包括他的一个落盘rest这块我们都是做了一些QT加速卡的一个呃,支持。然后当然除了这几个点之外的话,我们在刚才说的这个dised cash,它的一个远端数据传输,我们也是同样的这样一个功能。
47:08
所以我们后来呃内部测试其实也看到它的一个网络带宽,确实呃压力减减缓很多。所以以上是我们的一些呃,大概讲的一些功能,然后我们的一些后续工作,第一个是说我们会做一些K8S的支持,那主要还是说我们特别是持久化内存这块,我们想进一步在K8S上面做一些提升,因为PM在这个这块上面还是需要做一些额外工作,让他能够在访问的时候更有更小的一些危害。第二是第二个主要工作,比如说他的一个计算run换的一些提升,呃,这块我们会换一个更更强的一个计算,呃,呃引擎或者说它的一个次kind,它能够支持比如说GPU或者说CPU,然后同时它每一个上面都能有更好的一个,呃,类似于比如说像LVM的一些code的一些呃支持,因为现在我们是个纯的火山模型,但是它是一个native,并且是一个微的一个实现,然后呃,第三块是说我们可能会进一步的优化一些,像SIM,更更多用一下SIM的一些,呃尝试吧,呃比如说这边呃这个代码。
48:16
有也是不是很清晰,然后左边这个code的是一个传统的这个native的,他他要做的事情他可能分两步,第一个是说我先要把数据读出来,然后在做一个抵扣的,然后在这之上我们做一个future,一个评估,然后但是呢,其实硬件上面,其实他已经或者说指定级层面上其实已经做到这一点,它可以说我直接在一个enco的数据上面,直接做一个field,它意味着什么?意味是说你这个数据不需要去把它得到原来原始的值,我直接得到一个bit ma的,那回到我刚才讲的一个讲过了一个例子,就是说你直接就可以不要把这个数据material话,然后直接就为给另外一个列做一个呃,做一个掩码的ma操作,最终就可以得到我们最终的一个结果,这些其实我们其实直接在指定级层这个层面上就可以帮你解决掉,那这些其实是一个直观的一个例子,那这这部分的优化其实还有很多,包括你的一个呃,512的一个操作,对吧,你可能一个指定周期就可以解决原来。
49:16
但可能你分了多个bash才能做完的一个事情,那我们可能一个指令就会帮你做掉,然后第二个是呃,另外一块是说我们可能会支持更多的这种呃,Storage介质,比如说SSPDKDDKDDK的一些支持,这样的话我们可以在一些传统的SSD上面也能看到一些相应的收益。然后另外一块是说我们会支持更多的pre,呃引擎,呃,目前正在开发是说支持preto DB这样一个引擎,然后本身这个项目是一个完全开源的,所以欢迎大家做,呃呃。提交一些PR,或者说如果是你尝试使用的话,有些英雄欢迎大家去往这个呃呃微上面做一些提交,对呃,然后最终是呃,以上是我今天的学,看看大家有什么问题。
我来说两句