00:04
Hello,大家好,我是小兵,这是我的第三个技术视频,今天给大家分享的主题是分布式存储系统,Dells的rdma通信框架,希望大家喜欢。大家好。我是小兵。今天给大家带来的技术分享是dells的RDMA网络通信架构。嗯。我们先打开项目DES。Dells的通信架构主要是在cut这个模块下面。我们看到这下面有个read me,我这里已经打开了,然后。他这里cut。就是说。集合和那个RPC传输,主要是用于那个普通的RPC,还有那种大块的数据。
01:06
呃,传输,然后我这边先做那个RDMA做一个基本的介绍,然后再深入这里面的大的这个流程里面来啊。请打开那个文案。呃,首先RDMA技术,技术的分享就简单过一下,因为网上的博客也比较多了。嗯。这之前做了一个分享啊,做了一个更新,然后我们开始。呃。首先我们会讲什么是RDMA,为什么需要rdma,以及RDMA通信过程,Rdma编程,还有参考的资料。什么是RDM?ID就是一种远程的直接内存访问。嗯,它主要的。呃,主要是。呃,能够绕过。
02:01
内存。那个内核。就是可帕。然后,基于本地的直接内存访问RDM提高了吞吐量和性能,因为它可以释放资源CPU,从而加快数据传输速率并降低延迟。rdma可以使网络和存储应用程序都受益。然后这边的话有一些概念,然后我就简单就扫一下就行了哈,就我们。经常会说到fabric,比如说MV me over fabric even fabric就指的是RDM的一个局域网。然后。C是通道适配器,然后webs就是RDM的一组标准动作,也就是他的那个编程API。然后zero copy by bypa the k sta内核旁路。还有就是memory register,呃,内存出册后,操作系统不能对数据所的内存进行置换。
03:02
物理地址和虚拟地址映射必须是固定不变的。它底层会有用那个拼住内存,防止换页。然后这边的服务类型,也就是我们创建那个的时候,会有一个服务类型,比如说我们创建reliable connection,可靠的连接或者不可靠的unreliable connection。还有其他的RD和UD,我们常用的一般是这种可靠的RC。啊,这里面有一些术语。再简单看一下就行了。我就不一一。嗯,我就不赘述了。就提几个比较可能。很容易混淆的吧。一个是那个。 SRq吧,就shell receive queen共享接入队列,多个QQ,共享一个RQ,这个它可以节约内存资源。降低那个QP之间的连接数。
04:02
然后我们dells的项目里面有用到那个Li fabric Li FA,呃。它的它里面就封了几层。这里面往下一层,它就会就是R叉MRM就是r dmo message,也就是上面这个RM是RD,就是可靠的数据包连接。然后这边的话,RCM是在这个RDM的基础上又做了一层封装。然后在这个R叉M的下面,就有我们的那个verb。Is。这个主要是他的一个通讯机制,这个其实网上广告很多,我就不不在这里赘述了。然后这边是什么是rdmard,主要的是它软件处理的是八本,而不是一个一个的包。然后它主要是异步通信,还有提高小包的一个吞吐量。
05:06
这都是在讲那个基础概念。就先过一下。使用场景主要是一些HTC金融服务。哪些网就是三大网支持。也是IB,还有rock rock现在基本用的是VR,还有那个I work iwa是一种通过TCP来。实现的一种。协议。为什么选阿妹?通信的过程。
06:01
包括编的基础。LRM的编程。四种语,准确说应该是有嗯五种,就是说send和receive,还有read,还有write。其中send和receive是要走内核的,Read和right是绕过内核的。内存棉拷贝的。这是剩的双边单边。这些都是网上摘抄的一些博客。这里我就不在这里详细介绍了。点过一下吧。这是他的一个。他的项目的一个关系。比如说我们会接触到o Fed是全能的open fabric企业的分分布式是一个开源的软件包,就包含了内核框架和这动用户框架和驱动,以及各种中间件的测试工具和API的文档。
07:03
一般我们用的是还。Rdma的那个SIM通信管理。年底管理connection manager模块。这里面主要就是有驱动,用户态和内核的驱动都在这个r Co里面。我们用的大部分可能是这个IB vbs是用pad有IBV下发线开始的,然后内核太的是。呃。那就是IB下划线没有V。就像我们看到这下面的一个内核框架里面就是IP下划线,对比上面的IPV做一个区分。然后。他的一个编程的一个。步骤吧。然后这是针对上一图的详细的讲解。
08:03
客户机的流程。RM的编程。这是。这是我们之前的一个项目里面的。一个2D通信的过程,可以简单了解一下就行了。主要是在一些UN completion事件里面去做一些业务的处理。嗯,说一下的吧。主要最上层是引擎。引擎。呃,用到了这个cut模块,Cut模块下面是HG,也就是me,这个HG的话,它其实是那个。化学元素汞就是也表示HG。也是,就是那个水银mercury。然后micro下面它用的是Li fabric,当然也支持ucx哈。然后这个下面再往下面就是RDV的verbs。包括它发它也支持TCP啊,还有那个she的方式。
09:05
然后我们看一下那个它Dis整个一个架构,它是这样的,这里有几张图,然后待会打开另外一个。一个框架的调用关系哈,他就讲的是那个。打开这个图。这里面就之前梳理了很多东西。主要是相关的,然后。就比如说我们看模块是吧,N井和N井之间一个连接。他愤怒。第一层就是cut层,第二层就是HG层。第三层就是。是fabric层,再往下面就是verbs层。再到下面就是驱动层RDMA-Co然后我们的上层应用,比如说我们要一个典型的使用的场景,就是说。
10:03
典型的使用场景。我们的通信。Thank you。Cut的一个典型场景就是说流程,在这里就包括日志的初始化,还有注册协议和操作码,就是cut need o型。或者下一步就是创建上下文。已是cut contact。还有就是第三步就是创建请求,他的re create,或者我们创建集合的请求是可以一对多基于塑形的传播。然后传输目标端点,就是也相当于是那个endpoint rank。然后第四步就是发送请求。发请求就是。这个DSS应该是服务端的那个RPC的,然后。
11:03
请求跟踪和取消跟踪,这里面会执行,然后第五步就是我们在一步的那个线程里面去progress。也trigger去触发,毁掉就是cut progress。然后当引擎收到。请求之后他做业务处理,做完业务处理之后,他会发送一个回复,Cut replace。客户端整个一个通讯过程就大致就是这样的。然后我们再切到图里面来。你说他的。初始化,传输层初始化,它会调HG的in,然后我们顺着这个虚线走下来,走到这个,它主要是设置子系统级别的,然后我当我们执行那个创建上下文的时候,包括就是心跳初始化的时候。他就会执行那个会把那个,呃,超时还有二进制的一个多。
12:01
还有一些哈希表给创建出来,然后这里面做网络初始化和注册RPC。调卡的HGCDX的,然后走到这个。下面的HG的op型和HG的context create,这里面会管理CQ,然后这上面呃,HGOPT主要是做网络抽象层初始化,包括地址。还有就是创建内存池啊,创建地址池啊,注册r p cid等。然后这个下面这一步context create的话是主要是po create,然后创建一些准备一些B,呃。然后做一些内存的注册。包括他会。有一个核心的post Co post,然后资源做了内存的话,它会掉到那个。IBV、瑞格ML。也就是我们的webs的注册内存。然后我们再看。
13:03
这边是创建RPC请求,就是封装那个RPC请求,然后剩的的话,它有一个设置缓成回调,然后这边创建一个请求,然后就调那个hg q send,然后我们请求看一下创请求,这边主分配一些na资源,还有buffer,然后我们剩的的时候就调forward。的时候会有一个接受期望消息。相当于类似于RDM的那种post receive就提前准备一个。嗯。准备一个接收的一个元素放到我的接收队列里面,然后,然后他紧接着会那个发送非预期的消息,甚至unexpected。关于这一块,之前是有一篇文章的。关于的话在这里。
14:01
为高性能计算启用远程工程条,这是的论文里面翻译过来的。这里面会讲到。在这里。意外消息传。预期消息传递。和远程的内存访问。这就展开了。今天主要是对这一块做一个简单的介绍。然后。然后飞去下雪。嗯,这。其预计消息就是说他会调Fi的receive,然后它会调到。这下面是调到I I receive这里面来,然后如果是发送的话,是走这边线下来,然后调到Fi的tag send tcent,然后再调到那个ivv的post send里面来发包。然后。发送完了之后就会IQ。大概的流程是这样的。
15:03
然后我们接着那个PPT。就是刚才讲的这几个关系。它主要是在R上面又封了RPC。主要支持那种点到点point,小消息RPC,包括大块数据是走那个绕过内核的。嗯,美颜拷贝的一个bug,传输就是bug data。然后它的插件R的插件只是WiFi还UC叉。包括其他的一些,我们常用的是Fi和U,它但de里面主要是用这个Fi加verbs,它配置就是Fi加verbs,这种博美玉啊,House name IP interface name,还有port。所以这种。然后针对那个live fabric,它抽象出来一些他的对象模型,主要就是说有一个domain,有fabric。Africa里面有那个positive points。
16:00
嗯,然后也有一个EQ,有等待级完整队列,也有完整的计数器。还有一些轮行节。这里面active point。嗯,这边是一个被动的断点,这边是一个主动的断点。也相当于是主动端点去连被动的端点,这里面有一个比较重要的就是victory,就是地址向量。嗯,它主要是一个URL的一个映射。妹妹,Re。再往下。这就是你发的一个它的一些组件。其实也就是我们刚才提到的那些东西。再往下。这里面主要是一些编程的工具,我们平时编程用的可能会是啊。嗯,还有f Fi拼封测试rdma的link,可D位就主要是查看RDM的一些状态,Ibv d device IV DS可以查看网卡上面的详情。
17:00
但我们的一个文件传输的话,有那个HP的example。还有RPC的那个DEMO都在这里面。其他的是一些。心灵上的笔记。然后。参考。可以简单讲一下这个live fabric的这个。它的一个guide吧。我看这边还有什么讲的,待会讲一下那个,然后这边是总结的一个,其实也就是刚才的那个,我看有没有没讲到的地方。这里面讲了他的send和receive机制。还有。读写内存语义的单边操作,上面是那个通道语义的双边操作。然后。包括总结了一个。三阶段的分层调研汇总。就比如说初始阶段和使用阶段,还有那个销毁阶段。
18:03
初试阶段就是创建一些创建Q啊。创建CQ啊,还有那个完成的通道啊。分配保护域注册内存,创建那个通信ID的。那个事件通道的。中间的话就比较多红利CQI。还有一些连接的就是CM的。没准注册的。嗯,传输的。提交的。Post receive和不信的。然后这边是销毁的。是结构关系。这里面。这都是在自于那个官方网站的,找到一些资料来摘,查出来一些比较重要的东西,这里面他讲了一个数据结构。这样。就暂时不展开了,这个东西比较多。大致讲一下吧,就是mid。就是保存IPV上下文的verb,就是时间通道。Root event。
19:01
SQRQSRQPDQB的类型的。还IBV的上下文,主要保存设备的信息,还有上下文操作的一些操作指针。传数指针,然后这里面OPS主要是post send post receive post cqify CQ的操作。然后。I device时所保存设备的内容名。因为是设备,设备类型的。传传输类型表达。呃,设备的路径,Ipdv的pass I IPV Mr,注册内存中保存了IP的上线文PD保护域地址长度。本地键还有远程键的。这里面。这里面主要是Fi这个联盟,开源的这个发布联盟。主要来开发这个,还有这个主要openric的话,主要是由这个Fi兴趣小组来开发的。
20:04
就是刚才讲到的,然后这边的一个。价格会翻于RDM的一个价格。呃,因它里面有这些概念哈,就是发doin end point。Provide里面可以支持这个verb。然后这边调的话就是调带tag的发送和带tag的接收,下面就调到驱用户T的驱动,用户他驱动。一其中一部分如果走快路径的话,就会绕过内,就比如说我们的RDMA的呃,Read和right啊,就绕过内核,然后这边是走一个慢路径。Receive,或者说是一些其他的一些控制类的。消费者这边的一个慢路径。你们刚才提到的。然后。
21:01
顺着这个讲一下这个。I流程。讲一个。你反复的一些基本概念,我看里面。这个lip主要是参考这个P的话。还有一个中文文档。就是翻译过来的,然后它主要里面有些概念就是说。你发。然后他对比的就是和传统的TCP的一个套,节制的一个对比。比如他。这里面东西比较多,简单过一下一些重点啊。
22:00
感兴趣的话可以。仔细研究一下这个。就是他的思想,就是说使用无连接或者连接更少的up。他有很多优点,首先的话就是说。容易编程。有些不足,包括高新网避免内存拷贝。一步中断和轮巡对比。那主要就是用那个轮询。然后他呈现出来的时间对立。我要pass,白pass。
23:01
记得有个那个刚里面提的被动断点。主动那里。更新模型。八点。共享上下文。小姐的传说。在他都没手机。两边的那个TID。通过他区分是否收到消息。方案班,然后带一个T01的,那么接入班是的也是T01的。小心。里面有个地址向量,这里面有个CPC,就是schedule andpoint弹性端点,我们一般没有启用。
24:03
AV。Victory地址向量。就是说第的主要的目标是允许应用程序。迁就是大量的那个通行时间,它减少那个存储对等节点寻址的信息。然后。表达是I address-T的是一个64位的值。用所谓的快速进行操作。这相当于是一个通信的一个地址。做一个映射成。因为。下面。好,我们顺着这个讲一下流程。一个典型的肾的。
25:04
以一个send为例往下讲。就比如说我们调用了一个send send之后。从这里开始。比如说我们的DOS里面把RPC封装好了,我们调了一个send,然后send里面肯定有个回调函数。就比如这个回调函数,然后这个是RP的请求,这个是回调的参数。然后这里面会去跟踪,比如对RPC进行设置超时,然后放队列,如果是用塞就进那个等待队列。
26:07
啊,否则就进那个飞行队列。Appoint。Inflate。然后然后就调那个的内部的一个发送,然后他会去查那个point。然后这边的如果查到的话就直接发送。半路上走到H基层这边,先创建一个。那个分配一个ID操作ID,然后这里面有一复用的ID。然后这边调到那个HG,每一层都有回调,这边又有回调。要机制,然后。这个回调是由那个吹果及吹果来。吊起来的,然后这边。设置机构就转发,转发之后定要转发。然后要判断是走网络na,就是网络抽象network attribute。
27:02
A。是抽象那个单词,然后这边是。如果是发本地的话,一般我们是。发网络就走这个,这个是发本地,然后走这边。可请求一个T生成一个T,然后先发一个,如果有。需要我客户端需要收到预期的回复的话,那就需要先post receive。然后就走到这边来,然后一般走这个发动的话,就是走这个send on it。然后那回调,然后就调这个调那个。Message。找到那个地址index,还有bit,通过偏移和未运算符计算出来地址。就是我们那个。黑下来,然后这边调fit的。然后他调到这边,就调到那个fabric项目里面来了,然后。项目里面调了RM的,Ept的,他的。
28:00
他首先去获取连接,如果第一次发包的话,肯定是没有连接的话。他就会去。建一个连接。叫复用连接,建了连接之后就就开始发送。发送完了,这边是调hg trigger键盘。那个回复给出出来。没有一些对战。他这个的话就是说这边的话。Engine里面一直一个循环里面去trigger。推讯这个RPC触发回调,然后比如说行progress。掉每一轮,比如256个,然后这边一层往下掉,掉到HG,然后这边。主要是去po下面去。
29:00
呃,读那个完整队列。其实下面就是去掉那个poq IV的Q。IQ之后它会放到那个完成对应里面,这边就可以读到。就到那个。读到。完成队列。然后他开始。也做了一些呃,Push和pop的动作。对风浪的一些事件,然后。同步回调函数。一步一步往上回调。这边的progress就是去。最终我开始走到这个。Q。一种是对。那这个trigger的话就会。
30:01
一直往上催个,就是调到那个业务的一个回调里面,大致的流程是这样的,就带钥匙到fabric。然后说一下怎么来调试这个rdma通信框架吧,就首先我们的卡这一层是有那个。自测的。Safe。工具我们搜一下。对,我们调test这个官方文档里面也有讲,就你要发哪个端点到哪个端点,它多大,是一个bug还是说一个RPC。它的一些最大的飞行数,这些都可以设置的。这是的一个流程,大概的一个流程。这个它就会模拟那个farm和rank和rank之间的通信过程啊,这是这一层的cut的一个支持,Cut里面的swim,还有那个。自测,然后它的HG这一层,重点说一下HG这一层,因为这些都是独立的,HG这一层的话,它主要是由于那个。
31:10
有那个。官方的DEMO,我们以那个B传说,也就是RDM的举例的话,比如说我们服务端这样去编译出来,去起一个这个服务端。配上那个网络。的通信地址服务端a server。然后这边起一个客户端,它这样。去用b data去b data就是一个提前生成好的一个,比如说100兆的一个文件,他就把这个文件传到服务端了,所。就通过拷贝的方式,这里面的源代码的话是在。这个里面。客服他的。那我们大概看一下。
32:07
我们的一个。So that。从慢进来的话,它。也是做一些初始化,然后。这边还是创建摄像文,然后注册数据,然后这边就开始那个trigger trigger之后。有一回调。这边就是客户端发过来的话就。调那个save save里面的话主要是就什么分配啊,还有bug,创建一个bug,然后去。去那个客户端那边去pulling,其实就是去调RD的read。从客户端那边把数据给读过来,那就是单边操作,嗯。免咖啡。这是服务端的逻辑,他客户端。看到的话就是说。还是出租啊。啊,这边他去查一个地址,然后。这边也是有一个华人。
33:01
啊,这边。他是在。查完了之后有一个回调,调这个路过半,然后。这里面去打开文件,然后创建一个请求,然后创建一个bug,然后调这个bug forward。就是往那个服务端发,发完了之后就保存。发完了。这个就是。服务端收到了数据报完了,完了他发一个响应过来,然后这边。客户端这边就销毁。看这边。这边先保存数据。创出了之后,这边会有一个。保存完成了之后,他会发一个response给客户端。看一下。客户端就收到消费资源,那这个我们看一下流程图。看有没有啊。
34:00
首先第一个是架构。每个函数单独的一个example。啊,这个是讲那个刚才我们说的是那个bug传输的一个流程。然后其实它它自带本来也有一个。呃,是example里面的src下面有RPC的一个传输的RPC的小消息的一个通信过程。比如说我们的服务端。S端其实也是类似的。不错。这是服务端的一个过程。说实话。注册视频。这是。
35:01
这个是引擎。这个就是讲这个。比如说我们。从哪里开始?这边是客户端,这边是服务端的RPC哈。就是服装这边它起一个。文件就是这个从面进去,然后初始化引擎。说实话引擎里面干啥,大概就是说创建一些上下文。他是被把暴雨会作业,然后。创建网站队列。再往下这边有一个。死循环。再出一个回调,然后他才会在这里。监听轮行,然后我们这边看那个客户。湾这边。再往下啊。那边。这边获取服务器的地址,就是把自己地址获取到,然后。
36:00
查到了这些地址。然后。记地址,然后。这边。没干啥啊。A cup就是查找地址向量。B的话,出产RPC这边。就是通过那个register一个红展开,然后来做注册。好,这边就是这个是一个等待那个现场结束,就是我们刚才代码里看到的那一部分。啊,这边的话主要是注册RPC。通过那个boss的一个API去注册。这样客户端、服务端都能感知,就是通过IRPCID就能够找到它的那个处理函数。然后他这边。把那个。确定还是不必注册进去。包括input output都是在这里面。
37:05
OK。然后。到。客户端这边客户端也是类似的,先去初始化,然后这边也是做一些初始化,初始化之后。也是注册RPD,然后。他这边便利四次去发这个RPC。然后这边开始查地址,查服务器的地址,然后。包括它的结构。的,他的那个数据是怎么放在这个里面的。这边去分配一个500B的内存,然后。放上去,然后这边创建一个handler内存handler,然后。获取信息。Buck c。二级的方式去创建,创建完之后。这边创建的话,其实这边的话它是去调那个内存注册了。
38:04
就这边我们看到是那个。然后提成的话是一个。内存注册。可调到这个这边来,这样掉下来,掉到那个。请注册里面IPV。这里面记得他发里面它有红黑数,就注册好了可以放,把注册好的内存通过一个K还有一个V的形式放到红黑数上面,后面如果要用的话,可以先去红位数里面查。但那个有个开关,我记得。然后这边转发,转发的话。转发就会触发这根线,这根虚线,然后过来。到服务器这边。转发这边的话主要是起了一个坡。Trigger for loop这边就主pulling trigger trigger。
39:03
就是progress它掉了一个HG的一个。这种。服务器这边收到了之后。它也是通过一个对立的机制,这样去把它催出来。推进RPC处理嘛,然后。水果掉到最下面了,刚才我们看到是这里。客户端发送消息,这边会有一个生成一个事件,从完成这里面处理事件,他也去读那个。完成时间。然。反正事件他是去这个里面去读的,去那个R。你在他这边有没有去读这边。回去读。
40:10
然后这边。就开始处理。处理之后他。非游戏事件,它会走到一个回调里面去,然后。这边。一个一个完成完成,然后。一层一层往上完成。完成之后会把它普及到一个完整的队列里面去。但是这里另外一端会pop出来,然后执行它的一些回调函数。最终是调到这边来的。也就调到这边来了,然后调到这边来之后,呃,然后。这边第一步,这边第二步我看。这个电脑。教育中心,然后这边的话。同样的,也就。这边在处理回调。找到那个register的回忆,然后执行。
41:04
其实里面回调是比较多的。可能回调,然后大概就是这样。有很多细节哈。还有什么?说一个ma这边的一个用法,还有。屏风包括那个。就是P的测试的话,主要是。那边的一些流程也可以用那个P包去去做一些调试,很方便就可以脱离业务。做那个当当的一个验证。OK。
42:01
看一下有没有漏掉的。刚才说到了,Michael说Africa。面。嗯,我们看有哪些测试出现一些项目。编译。这个项目测试都是用Fi拼乓去做一个测试其服务端。还有他的一个。客户端。无卵。左端子端了有炎症。他这边有个获取连接。就是我们发现就是首先判断连接有没有建立,没有建立的话。会在这边去做一个获取连接,如果没有建立的话,第一次会走一个r time connect。
43:03
实际上最终会调到会去初始化一些endpoint啊,什么en,然后做一个Fi connect。那个我记得有一个。会调到RNA的一个connect上面去。我们看一下这个前连接。
44:05
看,还有很多provider provider,我们一般看provider。可以通过C去建连接或者下载对。这就是今天。的全部内容。主要就是讲了一下Dis这个项目。他的。阿DM通信框架。
45:02
以及它下面用的H基层。以及发层。包括它的一些。简单介绍一下它的一些调试的。DEMO包括safe,还有micro bug传输RPC。发送、接收。P发的I ping乓,NG。他第一面其实内容还有很多哈,比如说我这里有个笔记。可以看一下。二弟妹的东西很多啊。我注册内存,还有这里面的笔记,就没有那个顺序和逻辑,做了P,做了一些笔记,其实可以看一下。啊,包括平时做一些总结。有兴趣的话可以找我这边拿。
46:04
后面有机会的话也。详细整理,分享给大家。包括提到的一些性能的一些优化方案。好了,以上就是本期的。全部。内容,希望大家喜欢。谢谢。咱们下期见,拜拜。
我来说两句