端节点算法学课件.ppt
《端节点算法学课件.ppt》由会员分享,可在线阅读,更多相关《端节点算法学课件.ppt(80页珍藏版)》请在三一办公上搜索。
1、第二部分 端节点算法学,端节点算法学,端节点算法学:网络算法学在端节点(尤其是服务器)上的运用,是建立高速服务器的一组系统性技术随着网络功能虚拟化的提出,将来数据中心中绝大部分的网络设备都会在通用服务器上实现端节点算法学研究如何减少以下开销:数据拷贝(chapter 5)控制转移(chapter 6)定时器(chapter 7)解复用(chapter 8)其它一般性协议处理任务(chapter 9),第五章 拷贝数据,消除不必要的拷贝(P1),网络报文在收发和处理的过程中,通常会被拷贝多次计算机中的数据拷贝消耗两个宝贵的资源:内存带宽:如果处理一个报文涉及k次拷贝,系统吞吐量可能降至1/k内存
2、:如果一个报文在内存中被保存k份,有效内存容量降至1/k本章关注如何消除不必要的拷贝:一个拷贝如果不是由硬件要求的,该拷贝是不必要的本章还将讨论其它需要对数据包载荷进行的操作,5.1 为什么要拷贝数据,应用场景:用户向web服务器请求一个静态文件服务器从磁盘读出文件,发送到网络上两个内核子系统:文件子系统网络子系统,一个简单的故事,直观上,这是一个简单的故事:web应用程序通过一个系统调用(读文件),将文件从磁盘读入到它的缓冲区中构造一个HTTP响应头,通过一个系统调用(写套接字),将响应头和缓冲区内容交给网络子系统网络子系统将数据划分成适当大小的块,加上各层协议头,交给网络驱动程序,一个真实
3、的故事,Copy 1:硬盘文件缓冲区(内核空间)Copy 2:文件缓冲区应用缓冲区(用户空间)Copy 3:应用缓冲区套接字缓冲区(内核空间)Copy 4:套接字缓冲区网卡TCP程序还需要扫描一遍数据,计算TCP检查和,资源消耗情况,拷贝和TCP检查和计算:每个字需要穿过内存总线79次!不同内存区域之间的拷贝(copy 2,copy 3):每个字都要通过内存总线读一次和写一次计算TCP检查和:每个字都要通过内存总线读一次涉及外设的拷贝(copy 1,copy 4):如果由CPU做拷贝(PIO):每个字都要通过内存总线读一次和写一次如果由设备做拷贝(DMA):每个字只需通过内存总线读一次或写一次
4、涉及外设的拷贝都需要消耗I/O总线带宽,对服务器吞吐量的影响,在上面的例子中:Web服务器吞吐量不超过T/7,T为内存速度和内存总线速度中的较小值有效的文件缓冲区大小仅为总容量的1/3多余的拷贝在两个方面损害了服务器的性能:由于使用了过多的总线和内存带宽,服务器的运行速度远远低于总线速度由于使用了过多的内存,服务器不得不大量地从磁盘而不是主存读文件如果请求动态内容,还要增加一次拷贝(CGI程序web服务器),请求动态内容,Step 6:CGI 程序将构造好的网页文件,通过进程间通信机制传给web服务器程序,涉及一次拷贝,5.2 消除copy 4,为什么需要copy 4?简单的解释:适配器内存和
5、内核存储空间不在同一个硬件上但是,这个理由不充分!,消除 Copy 4,在一个内存映射的体系结构中,设备寄存器被映射到一块内存区域,CPU通过读写这块内存区域与设备通信理论上,内存可以位于总线上的任何地方,包括在适配器中解决方案:利用网络适配器中已有的存储空间(P4,利用系统组件),以及内核存储空间放置的自由度(P13,利用自由度),将套接字缓冲区放在网络适配器中应用缓冲区的内容直接拷贝到网络适配器的内存中,如何计算TCP检查和?,如何计算检查和?,Witless方法(P2c,共享开销):CPU执行拷贝,当读入每个字时,捎带计算检查和致命的问题:接收的时候,当发现检查和出错时数据包已被写入应用
6、缓冲区,与TCP语义不符(所以该方法从未被实施)Afterburner适配器(TCP offloading engine):数据传输由网卡通过DMA完成,检查和也由网卡计算TCP连接的管理(建立、关闭等)仍由主CPU完成,仅将建立好的TCP连接移交给网络适配器问题:网络适配器需要很大的内存空间和较强的处理器来支持大量的TCP连接,网卡成本可能较高,5.3 消除 Copy 3,为什么需要copy 3?应用和内核使用不同的虚拟地址空间(不是必要的)应用和内核之间需要通过数据拷贝解除耦合(必要的)如果拷贝不能避免,那么能够减小拷贝的开销吗?,写时拷贝(copy-on-write),当应用程序对内核执
7、行一个写时拷贝时,OS将内核缓冲区映射到应用缓冲区的物理内存页上当应用程序试图修改其缓冲区时,内核进行真正的拷贝有些操作系统提供写时拷贝,很多情况下可以避免真正的拷贝,写时拷贝的实现,举例:假定进程 P1 的虚拟页 X 映射到物理页 L上,需要复制 X的内容到进程 P2 的虚拟页 Y当P1对 X 进行写时拷贝时:内核修改页表,令 Y 指向物理页 L将 X 表项的COW保护位置位当P1试图写页X时:硬件读X的COW位,发现置位,产生一个异常操作系统将物理页 L拷贝到物理页 L,清除 X 的COW位,令 X 指向 L,Y 继续指向 L,写时拷贝的实现(续),对于不提供写时拷贝功能的操作系统(如UN
8、IX和Windows),也可以基于虚拟内存实现类似的功能:可以通过修改页表避免物理拷贝需要找到一种替代COW位的保护机制,5.4 优化页面重映射,对页面重映射过于简单的看法:只需修改P2的页表(一次写操作),令VP 8指向存放包的物理页,所有工作就结束了,(X),页面重映射的开销,修改多级页表:实际映射可能要求修改多级页表,当页表不在内存中时要调入,并修改目录页要求锁操作:修改页表前后要有请求锁和释放锁的开销刷新TLB:新的地址映射写入页表时,相关TLB表项要清除或修正,在目标域中分配虚拟内存:系统要在目标进程中找到一个空闲的页表表项锁住物理页:为防止页被换出,必须锁住物理页以上开销在多处理器
9、系统中会被放大页面重映射虽然只需常数时间,但这个常数因子非常大,结论:如果只是简单地使用页表重映射来避免拷贝,结果可能不像预期的那么好,Fbufs(fast buffers),基本观察:如果一个应用正在发送大量的数据包,那么一个包缓冲区可能会被重用多次方法一:提前分配好需要的包缓冲区,并计算好所有的页面映射信息(P2a),发送时重复使用这些包缓冲区方法二:数据传输开始时分配包缓冲区并计算页面映射,然后将其缓存起来(P11a),消除后续包的页面映射开销基本思想:映射一次,重复使用,为应用分配一组固定的物理页,为避免内核空间和用户空间之间的拷贝,将一组物理页P1、P2、Pk 同时映射给内核和应用来
10、使用数据包经过的一系列处理程序构成一个有序的安全域序列,定义为一条路径为每一条路径预留固定的一组物理页,数据包到达时立即确定其所属的路径(提前解复用),在路径上传递包缓冲区描述符,对于每条路径,适配器有一个空闲缓冲区链表:适配器把数据包写入一个空闲缓冲区,将缓冲区描述符传给接收路径上的下一个进程最后一个进程将用完的缓冲区交还给第一个进程,缓冲区重新回到空闲缓冲区链表,实现单向路径,有序的安全域序列是一条单向路径:规定第一个进程是writer,其余进程是reader(为了提供一定的保护级别)给第一个进程的页表表项设置写允许位,给其它进程的页表表项设置只读位,映射到同一个物理页的虚拟页号应相同,在
11、进程间传递缓冲区描述符的问题:理论上,各个进程映射到同一个物理页上的虚拟页号可能不同解决方法:规定:映射到同一个物理页的虚拟页号必须相同实现:所有进程的虚拟内存中一定数量的起始页预留为 fbuf 页,收包处理过程,P1从free fbufs队列取一个空闲缓冲区,写入数据包,将缓冲区的描述符写入written fbufs队列P2从written fbufs队列取包缓冲区描述符,读相应的包缓冲区P2将释放的包缓冲区描述符写回free fbufs队列,如何添加包头?,在发送路径上,每一个安全域都要给数据包加上一个包头然而,为了实现保护,每条路径只允许一个writer,其余为reader问题:怎么允许
12、其它安全域添加包头呢?,定义数据包为聚合数据结构,将数据包定义为一个带有指针的聚合数据结构,每个指针指向一个fbuf给数据包添加包头,就是将一个fbuf添加到聚合数据结构中,Fbufs总结,Fbufs运用了虚拟内存映射的思想,通过在大量数据包之间分摊页面映射开销而做得更高效:包缓冲区映射一次,重复使用很多次消除了一般情形中的页表更新有人扩展了Fbufs思想,并实现在Sun Solaris操作系统中Intel DPDK也运用了“一次映射,重复使用”的思想,应用如何使用Fbufs?,大量已有的应用软件是根据拷贝语义的socket API写的:应用执行了write()系统调用后,就可以重用包缓冲区,
13、甚至释放包缓冲区了采用fbufs后:在包缓冲区被其它进程使用完之前,应用不允许写或释放包缓冲区,解决方案:修改应用API,解决方法:API 不再保持拷贝语义应用在写缓冲区之前必须进行判断安全的实现方法:当一个fbuf从应用传递到内核后,内核翻转一个写允许比特,归还fbuf时再重新设置该位若应用在不允许写的情况下做写操作,会产生一个异常,应用崩溃,但不影响其它进程,已有的网络应用软件必须重写吗?,方法一:给已有的 API 增加新的系统调用,要求高性能的应用使用新的系统调用进行重写方法二:用新的扩展实现一个公共的I/O库,链接到该库的应用不需要修改,就可以得到性能提升 实践表明,将应用移植到类fb
14、uf的API,对应用所做的修改不大,且是局部的,5.5 使用RDMA避免拷贝,在web服务器的例子中:Web服务器接收请求,将文件传输到网络上Web服务器作为接收端并不需要保存请求消息现考虑在两个计算机之间传输一个大文件,接收端采用以下方式之一收包:采用fbufs采用TOE网卡,采用fbufs收包,包到达网卡后,被拷贝到一个包缓冲区中包缓冲区描述符在路径上传递,各安全域处理包应用程序将包数据拷贝到应用缓冲区,释放包缓冲区,采用TOE网卡收包,包到达网卡后,被送入套接字缓冲区进行协议处理和重组DMA控制器将数据送入应用缓冲区,向CPU发出中断驱动程序处理中断,通知内核模块接收数据,交给应用应用拷
15、贝数据到文件缓冲区,应用缓冲区返回给网卡,直接内存访问(DMA),在上述两种方法中,数据到达目的计算机的内存后还需拷贝一次,CPU参与的拷贝是开销最大的使用DMA在外设和内存之间传输数据,不需要CPU的参与:CPU设置DMA(给出数据的存放地址、长度等)DMA控制器完成数据传输DMA控制器通过中断通知CPU传输完成受DMA的启发,能否在两台计算机的内存之间直接传输数据,而不需要CPU参与?,远程直接内存访问(RDMA),RDMA的愿景:数据在两台计算机的主存之间直接传输,不需要CPU参与到数据传输的过程中两个网络适配器协作地从一个主存读数据,然后写入另一个主存,RDMA需要解决的问题,除了需要
16、网卡执行TCP/IP协议外,RDMA还需解决两个问题:接收端适配器如何知道应将数据放在哪儿?(不能求助CPU)如何保证安全?(发送进程不能随意写目标终端的内存),VAX集群 的RDMA,RDMA在VAX集群中已经被使用,VAX集群为可伸缩应用(如数据库应用)提供计算平台:系统核心是一个140Mb/s的网络(称Computer Interconnect,CL),使用一个以太网风格的协议用户可以将许多VAX计算机和网络硬盘连接到CLRDMA的需求背景:在远程硬盘和VAX机的内存之间有效传输大量数据要求包含文件数据的包在进入目的适配器之后,直接到达它的存放位置,传统网络的接收端,接收端应用提前将一些
17、映射好的页放入一个队列,交给网络适配器使用到达网卡的数据包被依次放入这些页中(数据包可能乱序到达)接收完数据包后,CPU做一个重映射(使得在应用看来,数据按顺序存放在一个地址连续的缓冲区中)。若文件很大,重映射的开销很大。,VAX 的 RDMA 解决方案,接收端应用锁住一些物理页,用作文件传输的目标存储区域(其呈现出来的逻辑视图是由地址连续的虚拟页组成的一个缓冲区),缓冲区ID被发送给发送端应用发送端应用将缓冲区ID及包存放的偏移量,随同数据包一起发送到接收端接收端适配器根据缓冲区ID和偏移量,将数据包内容存放到指定的位置(不需要页面重映射),如何保证安全?,允许将一个携带缓冲区ID的网络包直
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 端节 算法 课件

链接地址:https://www.31ppt.com/p-3957919.html