00:02
Hello,大家好,我是小斌。这是我的第一个技术视频,今天给大家分享英特尔大师之项目简介,希望大家喜欢。先给大家介绍一下英特尔的高性能。分布式一步对象存储dells。嗯,这个咱们看到这个是一个官从官方付部出来的项目哈,这个里面,呃,当时翻译了一下那个他的简介。呃,比如说。它是一种。呃,开源的对象存储,嗯,它具备高性能,它主要是用了一些呃呃,下一代的m m me的技术。呃,包括。奥腾。安慰me。还有sbdk rdma。它提供一些数非阻塞性的IO等功能,具有自我修复、端到端数据完整性,还有细力度数据控制和弹性的存储的高级数据保护。它优化了性能和成本。
01:11
嗯,当然它它是也可以在云中部署哈,呃。我的这个版本的话,应该是呃,V2.5.1版。嗯。然后的话。呃,我们看,呃为什么要研究那个呢?呃,其实咱们都知道这个分布式存储。存储系统有safe,呃,但是safe里面有很多一些呃。由于历史的原因嘛,它的一些设计,比如说有很多的锁啊之类的。在。Dells中都得到了一些优化。除了锁,还有。呃,Complete的模型啊,还有一些携程啊,一些优化都会在下下一代的这种呃,分布式存储引擎中体现出来,然后呢,呃,看一下数据吧。
02:11
我们以I500的一个排名来看的话啊,我们可以看到。呃。排名第一的现在是鹏程的实验室。呃。然后英特尔DES的存储项目。呃,排在前十的应该是有一个。稍等,我搞你一下。一个两个。前十的有。歼十的之前,之前看的时候是有好几个,但是。最近的话。用dells系统的还是比较多的,我们看看的出来啊,然后。
03:04
我们。重点主要是学习弹药匙的一些先进的技术啊。然后我们其他项目。然后。今天。呃,今天给大家主要是。简单介绍一下戴钥匙。呃,项目。的组成。以及,呃。引擎服务器的启动流程。呃,我们打开项目看到呃。他有一个最主要的是src目录,A3C目录。哎,SC上面有一个Python的SC,这个SC它是一个,呃,编译项目主要是用来。方便我们做一些依赖的编译。
04:01
还有。的编译,呃,像我们如果是因为有的时候。呃,编译的时候如果下载那个依赖包不是很方便的话,可以用这个缓存的。一技术的缓存,然后需要结合去修改这个呃,SC的脚本。做一些缓存,嗯。在这个read me里面到时候都会有体现的,然后。AC我们点开,我们从呃,从第一个依次往下面说啊。嗯,首先第一个scc里面有个密。主要是讲讲的一些内部的。呃,设计。比如说它的存储模型。还有它的主见。他的客户端还有IO的中间件,还有代理。呃,包括它的通信机制GRPCDPC,还有它一个,呃,三大核心之一的一个cart car的话是底层是封装了mey。
05:05
啊,Micro下面用Li faric Li faric,呃,又封装了R叉M,还有呃,我们的RTM的。Verbs接口。用来做那个大块数据传输,还有一些点到点,或者说是呃,基于那种塑形的RPC传播,就是集合RPC请求等。呃。包括。接下来是那个大的一些分成和服务,包括它架构啊啊。呃,它的代码结构,嗯。基础基础的库的服务。关于这一块呢,网上有很多的一些博客可以参考,我这里就不赘述了,咱们直接进入那个呃,源码的目录的一个讲解吧。
06:01
然后这个。呃,我们拿到一个项目,其实嗯。其实最好的是从他的一个单元测试入手。因为这针对这种大型的项目,我们从单元测试就是可以更加详细的呃,观察到一个模块的内部结构,比如说最近在研究的VS。呃,它的一个单元测试,我们可以通过。嗯。我们可以通过。呃,A c VO OC tests,呃,这个进入到它的一个单元的一个测试里面来,我们看这这个其实就是当时的最核心的一块内容,就是版本化对象。
07:02
服务。然后我们从麦函数进去之后。哎。我们会发现它里面核心有哪些东西,他们可以做那种。可以测试全部or可以测试词相关的,呃,Container容器相关的,还有IO相关的呃,Discard的呃,这个嗯我也不太了解,然后还有聚合,呃,DD叉就是两阶段事务punch的。呃,是一个打孔模型还是什么的,然后呃。呃,Garbage就是GC。然后I log,还一去catch m macc,多版本wal,这个就是Meta on s SD。呃。主要依赖于这个预写日志。然后C。还有一些帮助过滤。
08:00
嗯,还有其他的等等。然后我们通过这个单元测试。往下走的话。就是如果你没有带参数的话,它可以说是呃。它就自动会运行所有的一个测试。也是。嗯,这里我们以那个。V举例。但VOS是在呃这个模块里面。
09:02
应该是最后一个模块里面,然后。然后从ma进去,然后。嗯,比如写了一个那个自动化测试脚本,然后他首先是去。呃,他他这个单元测试应该是我测过,他应该是不依赖于那个,呃,不依赖于引擎启动的,它可以直接这样跑,那个单元测试,首先是就是一个de钥匙的一个。第八个就是调试信息的一个初始化。我们先就是简单的过一下这个它的主要的一些。刘晨。然后他的这个原数据路径就是呃,MAT的deals。嗯,然后他会执行VS的。C的初始化,自己的一个初始化。会执行那个阿bos的初始化,然后会起一个。
10:03
呃,单立的一个。TS2。本地。县城本地的一个storage。主要的是他会执行这个MV的初始化,带这个DB pass。会注册一些DB的一些数。喝说,然后。再往下走的话。VB的一个初始化。
11:33
请问有笔初始化咋会?我记得是会走到PDK里面去。
12:21
A,这一块的话就呃,先简单讲解到这里吧,后面呃。他们把这一块调试通过之后,就说他有详细的一些。呃,调试记录了之后再给大家。做一期视频呢,专门来分享这个。VS里面每个细小的模块,因为它这块还是相对来说内容是比较多的。然后我们。就比如说拖到那种程度,我们可以看一下最近。大家可以浏览一下这里面一些调试记录。然后。呃。
13:05
T。对。呃。比如最近详细分析的一个。Tse模块就是task scheduleing。呃,任务调度引擎模块。比如它里面有一些API,还有一些结构体。嗯。比如它关键的结构有那个EQ,就是时间队列。嗯。它是每一个时间队列可以绑定一个调度器,关于这一块他是有详细的一些分析的。就比如说他在,呃。
14:00
Do。这一块是有详细的分析的。呃,这一块是TSE的内容,TSE的话是在这个地方。任务调度,这个我会单独出一期节目来和大家仔细分析一下他的这个任务调度引擎。你这一块是作为DOS项目最开始的一个比较重要的一个模块吧,它也是一个比较通用的一个模块。嗯。可以,就是他也可以。作为某一些。第三方项目来引入,因为他这个task和业务没有做一个深的绑定,相当于是解耦的一个设计,比如说他的那个,呃,Dtp就是任务,还有一个DSP,呃,Schedule就是。调度器,这就是deal,是schedule primary,呃,P私有的一个指针存结构,然后它里面有一些队列,嗯,这块后面。
15:07
专门出一期视频,给大家仔细分析一下这个流程,今天主要是讲解一下,大概是这个项目今天做一个技术杂谈的形式。然后的话。我们再切回DES项目。呃,说一下这个项目结构吧,然后。嗯。第一个是那个BL,呃。因为我这块我这块嗯,对戴钥的话,主要是熟悉cut模块。恩,还有。那个呃。我看是哪个地方。一个是看模块,另外一个就是刚才提到的TC模块,呃。是比较熟悉的。尤其是的模块里面的ID我是比较熟悉的,然后。
16:05
其他的话,因为有些没有深入研究,就简单给大家过一下吧,后面有机会的话,呃,还是非常值得研究一下这一块的。嗯,然后这个是bio。就基本上每一个小模块,它下面都有个密文件,我们可以打开来看一下啊,BL就是一个blog。应该是一个比较底层的一个和。呃,模块。呃,这个模块主要是为了通过那个MSSD发出那个,还有它主要是封装了议程。
17:01
在那个MV。通过SBDK的暴露出来的一些接口之上又封装一层,它支持呃。故障设备检测,设备的运行状况的监控,还有有热叉八的功能,以及使用那个SD的一些识别,比如说一些led的可能是相关的。然后之前通过那个BL的单元测试,大概了解一下。来看一下。标电。
18:17
啊,这个大概就是一个BL的一个。进去,然后。嗯,看看是我相对来说比较熟悉的一个模块。看的话其实就是那个。集合和那个RPC传输。关于这块,我之前是有些一些文章的。卡模块,这看模块里面包含了那个呃swim swim就类似于呃C里面的。呃,心跳机制。但是他这个呃有些概念完全不像是呃不一样。啊。
19:00
我先看了。这看的对。然后它的主要是一个。百万兆级别的hpc的开源的一个RP产生,它支持传统的那个p two p PC发送和集体RPC。那种集体RPC,它是一种具有数结构的,上面去做一些消息的传播。嗯,主要是项目主要使用的是那个RD和web接口,提供一个RPC点到点的。小的IPC传输和那个大块数据传输,二相当于这个是单呃双边的RDM的四种操作的。Send和receive,呃,是需要走内核的操作。然后bug传说是相当是的。外头瑞的不需要走,绕过内河。所以它具有高性能,然后他的模块下面还有一个那个协议,就是基于现在要检测的。
20:00
然后cut被其他一些组件使用,用来做一些rap组件的管理啊,还有IV结构的一些功能。就是的一个主流程。主要流程的话,一个是它的初始化啊,主要是日志初始,还有注册协议和操作码。第二个就是创建上下文,嗯。那我们看到它是把一些,呃,CQ就是。呃,完整队列comp给创建出来,然后。第三个是创建请求,创建RPC请求。可以创建那个IPC请求和那个呃。集合请求QRPZ。然后第四步是发送请求。A。然后第五个是呃,查看请求的进度回调。它这种都是一些一步通信的接口,还有。
21:01
第六个是当服务端收到了之后,它会。呃,解析那个注册RPC的操作函数,然后来执行,执行完之后他要发送回复给。给发送端对。大概是。在后面,后面可以可以单独出一出一期节目来,呃,仔细介绍这里面的一些东西。这个就是看模块,但看模块嗯,它里面的新调的话。呃。心跳的话子。但它那个心跳里面主要类似于safe的模。之间的那种饱和,然后。嗯。新检健康检测的话是。翻译过来是可扩展的未知感染史的过程。除成员协议。比较奥格哈。
22:00
然后。有一些术语。比如往返啊。大概今天大概先浏览一下,主要是它里面有一个图,然后主要是。故障检测的话,它是有一个间接片的一个机制,比如说呃,这个I拼接。那么接有了A,那么就认为J是活着的。然后如果。哦。哎呀,这个后面单独给大家出一期节目。呃,理一下这个。就他这里面有一个间接拼的一个机制在里面。
23:07
比如说IP,然后接这边告诉他。呃。失败的。然后。他这边会。他这边会通过。给key发消息给reine。然后来让K给J发拼消息,这就是K给J拼消息,然后如果J是网络是通畅的,他会给。K回复消息,当K收到回复消息之后,他因为LK之间网络也是通的。他然后给。I回复A就说明,呃。哎。J之间仍然是通信的,仍然是可以通信的,对。这种就是间接拼的一个机制,但它里面引入了一些概念,比如说一些质疑啊。
24:01
啊,一些超时的一些时间啊之类的,这个后面会单独仔细给大家分析一下这块流程。我们在切回项目,然后继续往下。然后这边cut已经介绍了,然后。像的话里面。这里面我们看到是有一些更新的。Client。把这个脱下来。P里面主要是一些。对外支持的一些库,比如说Li Dis,还有Python的一些绑定,还有go的一些绑定。嗯,S,呃,这个对象存储的。这个DFS是大文件系统。这块主啊,之前有接触过。呃。你这个可以通过。这个图来。
25:00
比较直观的。看一下它这个乘积关系好。客户端的是在这个地方。这些从底层往上存,然后底层主要是引擎,就是我们现在的PM,就是以后的那个Meta SSD那就。全部是那个CD了。然后这边是小,这边是大的。然后。就通过一个Li Dis就有点类似于LIS那种感觉。然后再往上就是。内部DFS雷称。加上有一个拦截库,这个拦截库的话。他可以帮我们将这个拦截库与DP一起使用的话,会。呃。会帮我们做一些绕开的操作系统的一些。打开它内核的一些性能瓶颈。
26:02
我们都知道内核。它的。上下文切换啊有一些。东西比较多,然后它可以通过这个拦截库来绕开。然后解决一些的性能瓶颈。那比如说我们上层用那个,呃。把一个容器给放到一个分区之后。通过会掉下来。然后再调到接口,然后。他的再调到DFS的一个right,最终调到一个DFS的一个error right,这是客户端的一个主要的一个逻辑文件系统DP的一个。大概的一个逻辑。后面都会想去分析这些油程。嗯,里面。康康里面的话。
27:07
你看T1在里面吗,T1。TC对TC我们看到它就是在那个里面。这也是在康里面。可以看到TC。这块的。TE。呃,他们下面有一些公用的一些,比如说。一些比较。别墅。还有一些DPC的一些接口。还有内存相关的。然后主要就是说。这里面。比如哈希和教练的。哈希和教练克萨姆的一些。
28:02
历程。还有事件和事件队列支持非主材场所,就是呃,还有那个EQ。日志调试的技术组件。锁。网络的网络传输。呃,任务调度引擎就属于这个。它可以用来创建。带有。函数回家的通用任务。调的API,他是个API。还有这里面容器。
29:06
环境主要是对室内的。此类的对象地址空间。表示的是。那要访问容器的时候,应用程序必须首先连接到此,然后窗帘打开容器。判断攻击的一些元数据。接下来是那个控制面,控制面。这应该是。工作面我看一下。主要是go浪,控制面主要是go浪,然后控制面与数据面主要是通过C6。呃。还有一些DPC。来做一些。这是控制平面的一个。第一差两级到失误,然后我们呃。快速的把这个过一遍,然后待会说一下那个项目的启动流程。
30:04
然后引擎。你这东西比较多的。然后JRT一些有用的一些库。那困是?文件。这里面是MGMT是管理。里面的一些东西。然后这个是。一层封章。里面也有个op。就那一存往下一点就有,但是他们的概念是。
31:01
他们是,呃,完全。不一样的设计。在里面,Placement里面是一些。上次算法。这是相关的。的话是。传统buff是谷歌的那个。协议缓图区的一些定义。用来做那个编码解码的,然后。RDBRDB说就是在RO接口之上。C out之上封装了一层。呃,类似于KV的一个。存储,比如说存在改查之类的red red就就相当于是一个重建,嗯。
32:00
RSVC。I we。就待会我有一个图可以,那那个它是一个副本服务。对。我们看到它这里有一个,呃架构。就是底,最底层的是SS。然后上面是ruft r DB,这下面有一个。不断的。副本服务。然后持相关的。让我去见我的红福。安全相关的。控制表的测试,这里面主要是一些单元测试。呃。但测试那边对。一些,下面是UU一些工具相关的东西。A,最开始我们的时候已经接触过了,这个是vava的话。那是那个版本。
33:00
版本化的一个。快分配block allocate。然后我们讲一下那个。当时的一个启动吧。主要戴它有那个,嗯。Serve主要是go浪写的,然后还有engine主要是C写的。呃,启动我这边因为是一个开发调试环境,有我这边有两种方式启动,一种是基于多的启动,另外一种是,嗯。直接基于。虚拟出来的,因为Q可以虚拟那个密盘。做一个开发调整环境的一个启动。最终的效果,其实之前我也有,好像启动之后的效果。在这个地方是有的。这东西。但这个是以那个。
34:01
作为一个。启动方式呢?直接拉取这个项目,然后是。呃,下载爱包。这个下载一半主要是自己做了一个缓存吧,相当于。这个。是一个对象存储里面。到时候如果下不了的话,可以。就是可以联系我,然后来做一个解冻,然后。这边把金像。或要么自己编这个rock的八的一个。镜像或者说是。用以编好的镜像来启动。就直接lo一下这个经验。后之后。多个一米几的话,可以查看这个当时的一个。包括然后给数字机配置大业。那是8GB,然后。
35:00
启动音像,启动音像的话要注意一下,这里面有有个音圈音色,相当于把这两个目录给打通。这是我们的源码目录,然后这个是do里面的一个源码目录,到时候我们在do里面编译的话。呃。就相当于是变速机的这个目录下面的源码。就是我们可以做到呃,随时改,随时编译,随时调试的这么一种效果。然后我们进入镜像。之后。就可以重新编译,所以我碰到的这个脚本,或者说是通过SC这个脚本来编译就可以了。编译完了之后它。可以查一下我们编译的那个,呃。就是多达通过make那种安装的位置,比如是我们指定的前缀式OPT的话。那么它就在那个周末下面的冰下面会有。204。啊,拷贝证书,然后我们,呃。
36:00
呃,一个配置文件。样配置文件。这是一个参考的样配置文件啊,这个名字要改一下。应该是用de叠压吗?后面直接投票,然后。这里面,呃,就我们因为多,所以只有一个他的。然后再往下。呃,我们用那个内存,四个GB内存模拟,呃,持有内存。然后。这里。呃,我们用16GB的文件来模拟NB盘,那如果模用Q的话就不用。嗯。用文件来模拟,呃。模拟那个MV盘,模拟MV盘这一块主要是可以调到SDK的那一块的逻辑。PBDK的初始化,主说会走到DBDK的一些环境的初始化。然后的话,我们启动集群的话。
37:02
他会先去A,然后再骑C。然后去。启动之后啊,先起N级,然后再启车。然后启动之后会让我们做一个格式化。格式化的最快的话。这个可以单独出一期节目,专门介绍一下,详细介绍他流程,主要大概我记得就是说一些文件系统的。还有一些。因为密盘相关的一些检查的。然后我们做测试的话,创建池容器,然后挂载DB文件系统,我们创建一个。是GB的词。然后我们查看它详情,然后我们在创建一个容器。类型是perfect的。然后我们把这个区查回来。我们可以获取他的一些呃,Proper一些参数,然后新建一个目录,然后。
38:06
把这个给。磁和容器给挂在到这个分区上,然后这个。我们就相当于是看到这么一个。分区,然后我们可以对这个分区进行一些FL的测试,或者文件的读写操作。他就是先通过DFS,然后走下去。第二,后端的存储引擎。比如说我们查看那个词相关的详情。我看到有很多,就是就是那个最新的master分析的话,它会多一些一些。一。参数对。比如这是查池、查容器的一些。相亲。然后我们。这是语言数据。
39:04
其实通过这些元数据,我其实我复杂的元数据,我们。个。容住。然后我们挂了起来,它就是一个。系统,它就是一个分区。你的十几?讲一下那个。大的项目的一个。启动流程。啊,服务器启动流程,启动流程可以参考一下这个。
40:04
老爷。这个是紫车。做一些做一些笔记,看他的。对。给大家简单过一下吧。我便宜。不启动。是。应急启动服务端的启动。是服务端的一个启动。引擎的启动。还有其实比较复杂的一些网络的,再往下的一些流程。
41:00
挺多了。过来。启动服务器,首先走到那个勾语言的main函数,然后进行参数加载配置,然后它会走到那个执行。资金的话是。如果是这个文件,比如说看一下。然后我们。系统里面做的是这些配置,然后。我去做网络的出手啊。主要是CP托福。相关的。你玩那个去。是比较好的。然后它会初始化存储,存储的话它会检查IMU。
42:01
这里面做一些的准备工作。工作主要是。他会。会调一下这个。谁他汗水?啊,大一检查。通过这个获取。It same。的一些状态,然后。那你听。You out。这个走到那个眼睛的。到里面来,然后。更新系统吧。启动的话。
43:00
行。新系统。刚才我们看到的是勾浪,它传过来引起,它其实就是调那个二进制,二进制的话会传一参数,比如杠T杠叉杠七。港地。这些参数我们都可以看到。然后。有一些关键产品,比如看T是24个。更替对。Target的数量。然后。刚叉就是黑那个。福州县城。P是绑定的哪个另外几点。我一打开这个启动。那首先它是一个。这里面其实已经走到那个C语言了,C语言。跟说到水院来了。
44:02
我们是ND下面的这个函数。这里面是说一说实话。HLC,还有那个。日子级别说实话。把之前做了一个客户端动态。开始只是一个功能的。然后这边有指标,要这个初始化。这里面主要有个数的结构,我记得然后时间戳,然后DPC客户端。嗯,注册一些书的类型,比如别墅。哎,说实话,网络图谱。然后阿伯的初始化。然服务端的模块初始化,这模块初始化它。冒牌五是吧。然后cut的三个总数,然后网出使网络层。出差还是表?
45:09
安慰的说实话。然后。就是有个模块的加载,加载模块信息,加载模块信息它就会。按顺序做。很多的初始化,比如说VIVO s r DB s VC、安全MGTD、滴叉po containergd。到下面。那么快的加载。它这个是一个用了一个。Open动态打开的一个技术。这边是。My name。呃,这边可以做那个。之前一位同事可以做那个内存。内存检测的。
46:00
原来中西有检测。有红黑素来G,无内存。LHLC的回复。然后。模块出出。刚才我们因为呃,动态加载了那些模块,然后它可以。第二,它的一个回调函数就是。呃,模块的一个初始化,比如说VS模块的初始化,然后初始化服务,当然我们做这一块啊,然后。创建本地县城。这是。不得去,出去吧。DB。这个然后。检查是否配置了指定的些维设备。VSDB,说实话。也在这个地方。和全局的MV出来说话。打开的那个配置,这配置我们可以简单看一下里面。
47:09
这里面配置大概就是这些东西。It is a subsys。David。那我们就要做。走到那那个SBDK的环境的初始化,默认的初始化。包括他的。尹志。呃,CPU源码哈。再往下。差吧。
48:06
出一些环境。这个。这个我记得是HDBDK的那一层的。就是。和环境抽象。城市里面。是一些驱动的一些用户,它驱动的一些初始化。然后这个戏。移出信息,然后。这边注册一些。大块。咔的煮成一大块,然后。他虽初始化。说什么?我把所有模块。CAD注册回调。写计数器。刚才我们讲到有一个。VS的一些VS的初始化,STEM的初始化。
49:03
服务控制企业。还有出装VS本地线程。最强的是一个模块的初始化程序。每一个都会走到他们的。到抽脂房里面去,抽脂房回调里面去。保持的说实话。什么第2P监听。
50:00
今天是带着大家,就是有一个大致对大要下面一个大致的一个了解,其实我们看到大致通过。简单的分析一下,里面有很多的一些技术。包括一些概念啊什么之类的,都还是比较新的。相对she来说。这里就先发一条信息,然后我们看一下。我这边随时会开两个项目。一个style是。大家可以看到我这里有个QC,它其实是一个模拟出来的,这是我们看到我是用的那个。
51:05
弄的一个问题。那接着做一个单元测试的一个断点。是GDP。这里配置的是目前是就是这个在我们看来是一个launch文件里面,然后。他执行的是这个EQ test,我们现在因为我现在在精读这个实验,对应这一块代码,呃。所以是从一个可以锻炼。然后这里有一些单薄调升。你看他这个实际上它是不依赖于那个。不依赖于那个启动,就是引擎启动就可以做单元测试,比如说我们M。我们看到没有前景,但是也可以。
52:05
把这个单元给跑,单元测试给跑通。打那个。就是关于这一块,我后面梳理完之后,会给大家做一个分享。这一块我看一下从哪里开始。借口。对,包括他EQ,他的一些,比如说EQ的创建啊,还有EQ的。创建里面也包含了一个的分配。怎么分配出来的?我管你那个黄上文呢。还有这个事件的初始化。所以说他这个。Tse结合EQEV的这个设计。呃,与业务接。这个设计非常做的非常好,结合一些对立和状态机,可以对一个任务做异步的一个调度和管理,包括复制。呃,事件的管理还有任务和依赖任务。
53:02
之间的,呃,对应关系。比如说他的,呃。多对一或者一对多的一个关系之类的。然后。好了,呃,今天是关于那个。Inteldes项目的简介。
54:03
就到此为止了,希望大家喜欢啊。这也是我的第一个技术视频。后面也会对这里面的某些一些模块进行一些精读,然后从里面得到一些启发。然后。把些好的东西传播给大家。嗯。这个技术更好的服务于咱们大众。
55:05
好的,那我们。下次见,拜拜。
我来说两句