端节点算法学课件

上传人:hloru****lorv6 文档编号:243125599 上传时间:2024-09-16 格式:PPT 页数:80 大小:2.47MB
返回 下载 相关 举报
端节点算法学课件_第1页
第1页 / 共80页
端节点算法学课件_第2页
第2页 / 共80页
端节点算法学课件_第3页
第3页 / 共80页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二部分 端节点算法学,端节点算法学,端节点算法学:,网络算法学在端节点(尤其是服务器)上的运用,是建立高速服务器的一组系统性技术,随着网络功能虚拟化的提出,将来数据中心中绝大部分的网络设备都会在通用服务器上实现,端节点算法学研究如何减少以下开销:,数据拷贝(,chapter 5,),控制转移(,chapter 6,),定时器(,chapter 7,),解复用(,chapter 8,),其它一般性协议处理任务 (,chapter 9,),第五章 拷贝数据,消除不必要的拷贝(,P1,),网络报文在收发和处理的过程中,通常会被拷贝多次,计算机中的数据拷贝消耗两个宝贵的资源:,内存带宽,:如果处理一个报文涉及,k,次拷贝,系统吞吐量可能降至,1/k,内存,:如果一个报文在内存中被保存,k,份,有效内存容量降至,1/k,本章关注如何消除不必要的拷贝:,一个拷贝如果不是由硬件要求的,该拷贝是不必要的,本章还将讨论其,它需要对数据包载荷进行的操作,5.1,为什么要拷贝数据,应用场景:,用户向,web,服务器请求一个静态文件,服务器从磁盘读出文件,发送到网络上,两个内核子系统:,文件子系统,网络子系统,一个简单的故事,直观上,这是一个简单的故事:,web,应用程序,通过,一个系统调用,(读文件),,将文件从磁盘读入到,它的,缓冲区,中,构造一个,HTTP,响应头,通过一个系统调用,(写套接字),,将响应头和缓冲区内容交给网络子系统,网络子系统将,数据,划分成适当大小的块,加上各层协议头,,,交给网络,驱动程序,一个真实的故事,Copy 1,:,硬盘,文件缓冲区(内核空间),Copy 2,:,文件缓冲区,应用缓冲区 (用户空间),Copy 3,:,应用缓冲区,套接字缓冲区(内核空间),Copy 4,:,套接字缓冲区,网卡,TCP,程序,还需要,扫描一遍数据,,计算,TCP,检查和,资源消耗情况,拷贝和,TCP,检查和计算:每个字需要穿过内存总线,79,次!,不同内存区域之间的拷贝,(,copy 2,,,copy 3,):,每个字都要通过内存总线读一次和写一次,计算,TCP,检查和:,每个字都要通过内存总线读一次,涉及外设的拷贝,(,copy 1,,,copy 4,):,如果由,CPU,做拷贝(,PIO,):每个字都要通过内存总线读一次和写一次,如果由设备做拷贝(,DMA,):每个字只需通过内存总线读一次或写一次,涉及外设的拷贝都需要消耗,I/O,总线带宽,对服务器吞吐量的影响,在上面的例子中:,Web,服务器吞吐量不超过,T/7,,,T,为内存速度和内存总线速度中的较小值,有效的文件缓冲区大小仅为总容量的,1/3,多余的拷贝在两个方面损害了服务器的性能:,由于使用了过多的总线和内存带宽,服务器的运行速度远远低于总线速度,由于使用了过多的内存,服务器不得不大量地从磁盘而不是主存读文件,如果请求动态内容,还要增加一次拷贝(,CGI,程序,web,服务器,),请求动态内容,Step 6,:,CGI,程序将构造好的网页文件,通过进程间通信机制传给,web,服务器程序,涉及一次拷贝,5.2,消除,copy 4,为什么需要,copy 4,?,简单的解释:,适配器内存,和内核存储空间不在同一个硬件上,但是,这个理由不充分!,消除,Copy 4,在一个内存映射的体系结构中,,,设备寄存器被映射到一块内存区域,,CPU,通过读写这块内存区域与设备通信,理论上,,内存可以位于总线上的任何地方,,包括在适配器中,解决方案:,利用网络适配器中已有的存储空间(,P4,,利用系统组件,),,以及,内核存储空间放置的自由度(,P13,,利用自由度,),将,套接字缓冲区,放在网络适配器中,应用缓冲区的内容直接拷贝到网络适配器的内存中,如何计算,TCP,检查和?,如何计算检查和?,Witless,方法(,P2c,,共享开销,),:,CPU,执行拷贝,当读,入每个字时,捎带计算检查和,致命的问题:,接收的时候,当发现检查和出错时数据包已被写入应用缓冲区,与,TCP,语义不符(所以该方法从未被实施),Afterburner,适配器(,TCP offloading engine,),:,数据传输由网卡通过,DMA,完成,检查和也由网卡计算,TCP,连接的管理(建立、关闭等)仍由主,CPU,完成,,仅,将建立好的,TCP,连接移交给网络适配器,问题:网络适配器需要很大的内存空间和较强的处理器来支持大量的,TCP,连接,网卡成本可能较高,5.3,消除,Copy 3,为什么需要,copy 3?,应用和内核使用不同的虚拟地址空间(不是必要的),应用和内核之间需要通过数据拷贝解除耦合(必要的),如果拷贝不能避免,,那么,能够减小拷贝的开销吗?,写时拷贝(,copy-on-write,),当应用程序对内核执行一个写时拷贝时,,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,写时拷贝的实现(续),对于不提供写时拷贝功能的操作系统(如,UNIX,和,Windows,),也可以基于虚拟内存实现类似的功能:,可以通过修改页表避免物理拷贝,需要找到一种替代,COW,位的保护机制,5.4,优化页面重映射,对页面重映射过于简单的看法:,只需修改,P2,的页表(一次写操作),令,VP 8,指向存放包的物理页 ,所有工作就结束了,(,X,),页面重映射的开销,修改多级页表:,实际映射可能要求修改多级页表,当页表不在内存中时要调入,并修改目录页,要求锁操作:,修改页表前后要有请求锁和释放锁的开销,刷新,TLB,:,新的地址映射写入页表时,相关,TLB,表项要清除或修正,在目标域中分配虚拟内存:,系统要在目标进程中找到一个空闲的页表表项,锁住物理页:,为防止页被换出,必须锁住物理页,以上开销在多处理器系统中会被放大,页面重映射,虽然,只需常数时间,但这个常数因子,非常大,结论:如果只是简单地使用页表重映射来避免拷贝,结果可能不像预期的那么好,Fbufs,(,fast buffers,),基本观察:,如果一个应用正在发送大量的数据包,那么一个包缓冲区可能会被重用多次,方法一:,提前分配好需要的包缓冲区,并计算好所有的页面映射信息(,P2a,),发送时重复使用这些包缓冲区,方法二:,数据传输开始时分配包缓冲区并计算页面映射,然后将其缓存起来(,P11a,),消除后续包的页面映射开销,基本思想:映射一次,重复使用,为应用分配一组固定的物理页,为避免内核空间和用户空间之间的拷贝,将一组物理页,P1,、,P2,、,、,Pk,同时映射给内核和应用来使用,数据包经过的一系列处理程序构成一个,有序的安全域序列,,定义为一条路径,为每一条路径预留固定的一组物理页,数据包到达时立即确定其所属的路径(,提前解复用,),在路径上传递包缓冲区描述符,对于每条路径,适配器有一个空闲缓冲区链表:,适配器把数据包写入一个空闲缓冲区,将,缓冲区描述符,传给接收路径上的下一个进程,最后一个进程将用完的缓冲区交还给第一个进程,缓冲区重新回到空闲缓冲区链表,实现单向路径,有序的安全域序列是一条单向路径:,规定第一个进程是,writer,,其余进程是,reader(为了,提供一定的保护级别),给第一个进程的页表表项设置写允许位,给其它进程的页表表项设置只读位,映射到同一个物理页的虚拟页号应相同,在进程间传递缓冲区描述符,的问题:,理,论上,各个进程映射到同一个物理页上的虚拟页号可能不同,解决方法:,规定:映,射到同一个物理页的虚拟页号必须相同,实现:所有进程的虚拟内存中一定数量的起始页预留为,fbuf,页,收包处理过程,P1,从,free fbufs,队列取一个空闲缓冲区,写入数据包,将缓冲区的描述符写入,written fbufs,队列,P2,从,written fbufs,队列取包缓冲区描述符,读相应的包缓冲区,P2,将释放的包缓冲区描述符写回,free fbufs,队列,如何添加包头?,在发送路径上,每一个安全域都要给数据包加上一个包头,然而,,为了实现保护,每条路径只允许一个,writer,,其余为,reader,问题:怎,么允许其它,安全域,添加包头呢?,定义数据包为聚合数据结构,将数据包定义为一个带有指针的聚合数据结构,每个指针指向一个,fbuf,给数据包添加包头,就是将一个,fbuf,添加到聚合数据结构中,Fbufs,总结,Fbufs,运用,了,虚拟内存映射的思想,通过,在大量数据包之间,分摊页面映射开销而做得更高效,:,包缓冲区映射一次,重复使用很多次,消除了一般情形中的页表更新,有人扩展了,Fbufs,思想,并实现在,Sun Solaris,操作系统中,Intel DPDK,也运用了“一次映射,重复使用”的思想,应用如何使用,Fbufs,?,大量已有的应用软件是,根据,拷贝语义的,socket API,写的,:,应用执行了,write(),系统调用后,就可以重用包缓冲区,,,甚至释放,包缓冲区了,采用,fbufs,后:,在包缓冲区被其它进程使用完之前,应用不允许写或释放包缓冲区,解决方案:修改应用,API,解决方法:,API,不再保持拷贝语义,应用在写缓冲区之前必须进行判断,安全的实现方法:,当一个,fbuf,从应用传递到内核后,内核翻转一个,写允许比特,,归还,fbuf,时再重新设置该位,若,应用在不允许写的情况下做写操作,,会,产生一个异常,应用崩溃,但不影响其它进程,已有的网络应用软件必须重写吗?,方法一:,给已有的,API,增加新的系统调用,要求高性能的应用使用新的系统调用进行重写,方法二:,用新的扩展实现一个公共的,I/O,库,链接到该库的应用不需要修改,就可以得到性能提升,实践表明,,将应用移植到类,fbuf,的,API,,对应用所做的修改不大,且是局部的,5.5,使用,RDMA,避免拷贝,在,web,服务器,的例子,中,:,Web,服务器接收请求,将文件传输到网络上,Web,服务器作为接收端并不需要保存请求消息,现考虑在两个计算机之间传输,一个大,文件,接收端采用以下方式之一收包:,采用,fbufs,采用,TOE,网卡,采用,fbufs收包,包到达网卡后,被拷贝到一个包缓冲区中,包缓冲区描述符在路径上传递,各安全域处理包,应用程序将包数据拷贝到应用缓冲区,释放包缓冲区,采用,TOE,网卡收包,包到达网卡后,被送入套接字缓冲区进行协议处理和重组,DMA控制器将数据送入应用缓冲区,向CPU发出中断,驱动程序处理中断,,通知内核模块接收数据,交给应用,应用拷贝数据到文件缓冲区,应用,缓冲区返回给网卡,直接内存访问(,DMA),在上述两种方法中,数据到达目的计算机的内存后还需拷贝一次,,CPU,参与的拷贝是开销最大的,使用,DMA,在,外设,和内存之间传输数据,,不需要,CPU,的参与:,CPU,设置,DMA,(给出数据的存放,地址,、长度等),DMA,控制器完成数据传输,DMA,控制器,通过中断通知,CPU传输完成,受,DMA,的启发,能否在两台计算机的内存之间直接传,输数据,,,而不需要CPU参与?,远程直接内存访问(,RDMA),RDMA,的愿景:,数据在两台计算机的主存之间直接传输,不需要,CPU参与到,数据,传输的过程中,两个网络适配器协作,地,从一个主存读数据,然后写入另一个主存,RDMA需要解决的问题,除了需要网卡执行,TCP/IP协议外,RDMA还,需解决两个问题:,接收端适配器如何知道应将数据放在哪儿?,(不能求助,CPU),如何保证安全,?(发送进程不能随意写目标终端的内存),VAX,集群,的,RDMA,RDMA,在,VAX,集群中已经被使用,,VAX,集群,为可伸缩应用(如数据库应用)提供计算平台,:,系统核心是一个,140Mb/s,的网络,(称,Computer Interconnect,,,CL,),,使用一个以太网风格的协议,用户可以将许多,VAX,计算机和网络硬盘连接到,CL,RDMA,的需求背景:,在远,程硬盘和,VAX,机,的,内存之间,有效,传输大量数据,要求,包含文件数据的包在进入目的适配器之后,,,直接到达它的存放位置,传统网络的接收端,接收端应用,提前,将,一些映射好的页,放,入,一个队列,,,交给,网络,适配器,使用,到达网卡的数据包被依次放入这些页中(数据包可能乱序到达),接收完数据包后,,CPU,做一个重映射,(使得在应用看来,数据按顺序存放在一个地址连续的缓冲区中)。若文件很大,重映射的开销很大,。,VAX,的,RDMA,解决方案,接收端,应用锁住一些物理页,,,用作文件传输的目,标,存储区域,(其,呈现出来的逻辑视图是由地址连续的虚拟页组成的一个缓冲区,),,缓冲区,ID,被发,送,给,发送,端,应用,发送,端,应用将,缓冲区,ID,及包存放的偏移量,,,随,同数据包一起发送,到接收端,接收端适配器,根据缓冲区,ID,和偏移量,将数据包内容存放到指定的位置,(不需要页面重映射),如何保证安全?,允许将一个携带缓冲区,ID的网络包直接写入内存,是一个明显的安全隐患,为降低安全风险,,缓冲区,ID,中包含一个难以猜测的随机串,(防止伪造),VAX,集群,只在本集群,内部,可信,的计算机,之间使用,RDMA,传递数据,RDMA,的应用,存储区域网(,Storage Area Network,,,SAN,),:,一种后端网络,将大量计算机和网络硬盘连接在一起,目前有好几种这样的技术,都使用了,RDMA的思想,,如,Fiber Channel,(,FC,)、,iSCSI,、,Infiniband,等,数据中心支持高性能分布式计算:,大数据分析(,MapReduce,框架),深度学习(,TensorFlow,、,Caffe,等),5.6,把避免拷贝技术扩展到文件系统,为提高响应速度,,Copy 1是必要的,考虑消除,copy 2,5.6.1,共享内存方法,类,UNIX,操作系统提供一个系统调用,mmap(),,,允许应用(如,web,服务器)将一个文件映射到,自己,的虚拟地址空间,。,概念上,当一个文件被映射到一个应用的地址空间,这个应用就好像在,自己,的内存中缓存了这份文件。,当然,这个缓存的文件只是一组映射。,如果,Web程序,将文件映射到自己的地址空间,则它和文件,cache,访问的是同,一组物理页(免除了拷贝),。,Flash Web,服务器,Web,应用程序,将经常用到的文件映射到,自己的,内存,空间,受到可分配给文件页的物理页数量及页表映射的限制,,Flash Web,服务器只能,缓存和映射最近常用的文件,事实上,,Flash Web,服务器,只是,缓存了一些文件分片,(通常是文件的头几个分片),,并使用,LRU,策略将,最近,一段时间未用的文件,unmap,尚未解决的问题,Flash Web,不能避免,web,服务器与,CGI,进程之间的拷贝,文件缓存只能缓存静态内容,,,动态网页,要,由,CGI,程序生成,CGI,程序生成,的,动态内容通过,UNIX,管道传给,web,服务器,;典型地,,管道,要在,两个地址空间之间拷贝内,容,到目前为止,,,我们的方案都没有涉及,TCP,检查和,一个被访问多次的文件,文件分片都相同,但,TCP,检查和未被缓存,需要一个,从包内容映射到检查和的高速缓存,,即,数组,,a,为包内容,,f(a),为检查和,;由于,a,太大,采用,传统缓存方案很低效,由,fbufs 和 mmap() 想到的,问题,fbufs,可以消除,copy 3,mmap(),可以,消除,copy 2,Q:,能否将,fbufs,和,mmap() 结合,起来,使用,同时,消除,copy2,和,copy3,?,可以结合,fbufs,和,mmap,吗?,如果采用,fbufs,:,所有进程的虚拟内存中一定数量的起始页预留为,fbuf,页,应用进程的应用缓冲区不能被映射到这些物理页上,如果应用,将文件映射到,其虚拟地址空间的一个缓冲区,:,这个缓冲区不能用,fbuf,发送,必须要有一次物理拷贝,!,当消除,copy 2,时,,copy 3,不能避免,!,5.6.2 IO-Lite,IO-Lite,将,fbufs,推广,至包含文件系统,,从而,不必使用,mmap,IO-Lite,可以一揽子解决前面所有的问题:,同时消除,copy 2,和,copy 3,消除,CGI,程序和,web,服务器之间的拷贝,缓存传送过的数据包的检查和,IO-Lite,的主要思想,IO-Lite,借用了,fbufs,的主要思想:,为同一条路径上的进程映射相同的物理页,实现,只读共享,推迟创建路径的缓冲区,使用缓冲区聚合,以允许添加包头,IO-Lite,响应,Get,请求,IO-Lite,响应,Get,请求的步骤,当文件第一次从磁盘读入文件系统的高速缓存时,文件页被保存为,IO-Lite buffer,当应用通过一个,系统,调用读文件时,创建一个缓冲区聚合体,指针指向,IO-Lite buffer,当应用发送文件给,TCP,时,,网络,子,系统得到一个指向相同,IO-Lite,页的指针,应用将常用文件的,HTTP,响应,头,维护在一个高速缓存中,IO-Lite,给每个缓冲区分配一个编号,,TCP,模块维护一个以缓冲区编号为索引的检查和,高速缓存,实现零拷贝的管道,IO-Lite,也可以用来实现一个消除了拷贝的改良型管道程序,(传递,IO-Lite buffer的指针而不是拷贝),将,改良后的管道,应用到,CGI,程序和,web,服务器之间,可,以,消除,冗余的,拷贝,实现,IO-Lite,IO-Lite,必须处理复杂的共享模式,:,应用,程序,、,TCP,程序,和文件服务器,等,均可能有指向,IO-Lite buffer,的缓冲区,IO-Lite,必须实现一个复杂的替换策略,:,IO-Lite,页既可能是虚拟内存页,又,可能是文件页,需,将标准的页替换规则和文件缓存替换策略集成在一起,找到一种干净的方法将,IO-Lite,集成到,OS,中,IO-Lite,已经在,UNIX,中实现了,5.6.3,使用,I/O,拼接避免文件系统拷贝,I/O,拼接,的,基本思想,:,引入一个新的系统调用,sendfile(),,,允许内核,将读文件的调用和向网络发送消息的调用合并,文件到,socket,传输的传统方法需两次系统调用:,read (file, tem_buf, len);,write (socket, tmp_buf, len);,使用,sendfile(),传输文件到,socket,:,sendfile (socket, file, len);,内核,2.1,版本的,sendfile,实现,调用,sendfile(),时:,文件数据,先,被,拷贝到内核中的文件,缓冲区,(,copy 1,),然后,从,文件,缓冲区,拷贝到,内核中,的,socket,缓冲区,(合并,copy 2,和,copy 3,),最,后,从,socket,缓,冲区,拷贝,到适配器,(,copy 4,),与,read/write,方式相比,减少了一次拷贝,内核版本,2.4,之后的,sendfile,实现,调用,sendfile(),时:,文件数据,先,被,拷贝到内核中的文件,缓冲区,(,copy 1,),将记录数据位置和长度的信息保存到,socket,缓冲区,数据通过,DMA,通道直接发送到适配器(,copy 4,),消除了,copy 2,和,copy 3,基于,sendfile,的机制不能推广到与,CGI,程序通信,Sendfile(),已用于,Apache,、,Nginx,、,Lighttpd,等,web,服务器中,5.7,扩展到拷贝之外,除数据拷贝外,其它涉及所有数据的操作也是高开销操作,如检查和计算、格式转换等:,需要,CPU,参与,需要使用内存总线,计算开销与数据长度成正比,将,拷贝循环扩展到,包括,检查和计算,:,利用,load,和,store,之间的,空周期做,累加,计算,不增加任何额外的开销,Integrated Layer Processing,(,ILP,),除检查和之外,其它数据密集的操作能否都集成到拷贝循环中?,整合层次处理,(,ILP,)的,主要,思想:,对同一个数据包进行,多,种数据操作时,,将这些操作整合在一个循环中,,避免对包中的数据进行多次的读和写(,P1,)。,整合层次处理会有什么问题?,ILP,面临的问题,问题一:,不同操作需要的信息一般来自不同的层次,,,将不同层次的代码整合在一起而不牺牲模块化,特性,极其困难,问题二:,不同操作可能需要在不同长度的数据块上,以及,数据包的不同部位进行,问题三:,有些操作可能是相互依赖的。比如,如果数据包的,TCP,检查和验证失败,就不应当对包进行解密操作,ILP,面临的问题(续),问题四:,过分提高整合度可能降低代码的局部性,增大,指令,cache,的,miss,率,,,反而产生不良的后果,结论:,ILP,很难实现(问题,1,问题,3,),ILP,可能性能不佳(问题,4,),ILP,可能完全没有必要(若包数据需要被处理几次,则数据很可能驻留在,cache,中),目前只有检查和计算被整合在数据拷贝过程中,5.8,扩展到数据操作之外,消除数据拷贝和整合数据操作,其技术共同点都,是避免冗余的读,/,写,操作,以,减少对内存总线的压力,还有哪些因素会影响内存总线的使用呢?,Cache,的使用效率,DMA,或,PIO,的选择,5.8.1,有效使用,I-cache,处理器包含一个或多个数据,cache,,以及一个或多个指令,cache,:,一般而言,,包数据几乎不能从,d-cache,获得好处,处理数据包需要的状态可以从,d-cache,获益,处理数据包的程序代码可以从,I-cache,获益,代码和状态都,可能竞争内存带宽,,相比而言,,代码对内存带宽的竞争更严重,:,处理一个包需要的状态一般较小,比如一个连接表项,协议栈处理的代码大得多,而,I-cache的容量一般很小,高效地利用,I-cache,是提高性能的一个关键,I-Cache,的实现特点(,1,),大多数处理器使用直接映射的,I-cache,:,内存地址的低位比特用来检索,I-cache,条目,如果高位比特匹配,直接从,I-cache,返回内容,若不匹配,,进行一个主存访问,,用新的内容,替换原来的条目,问题:,被映射到,I-cache,同一位置,的代码,会被,轮流,替换出去,即使它们都是经常使用的代码,。,I-Cache,的实现特点(,2,),每一条,I-cache,包含多条指令:,当取一条指令时,,同一个代码块中的全部,指令都会被读入,(基于空间局部性假设做的优化),问题:,不常用的代码会被读入,I-cache,,如果它与常用代码在一个块中。,举例,许多网络代码包含错误检查,比如,:,if error E do X, else do Z,虽然,Z,几乎从不被执行,但是编译器通常会将,Z,的代码紧,跟在,X,的后面,如,果,X,和,Z,位于同一个指令块中,取经常使用的代码,X,,会把不经常使用的代码,Z,也取进来,,浪费了内存带宽,和,cache,空间,问题与解决方案,指令,cache没有很好地反映时间局部性:,经常使用的代码不一定在,cache中,:,由一个不完美的映射函数引起,不常使用的代码可能被经常调入,cache,:由cache对空间局部性的优化引起,如何解决以上问题?,重新组织代码,,将经常使用的代码连续放置,重新组织代码,如果工作集超过了,I-cache的大小,第一个问题仍会出现,但,会减少,而,第二个问题能够得到,很大程度的缓解,代码布局的基本思想:,通过优化代码在内存中的位置,使得经常使用的代码驻留在,I-cache,中,新的问题,处理包的协议代码肯定无法全部装入指令,cache,:,I-cache,的容量非常有限,计算机上的所有程序都要竞争,I-cache,问题:,如果每处理一个包,就要将全部的协议代码装入,I-cache一次,,效率太低!,拷贝数据包的开销和将代码装入,I-cache的开销比起来,简直就是微不足道,!,局部性驱动的协议层处理,基本,思想,(,若每一层协议代码可以装入,I-cache,),每个协议层,一次处理多个包,分摊装载,I-cache,的开销,每一批,处理的,包数量越,多,,,I-cache,的使用越高效,具体实现时,应能,动态调整批处理的大小,软件工程方面的考虑,代码重新组织可以让编译器来做,:,程序员对,不常使用的,代码,分支,进行标注,,由,编译器为,I-cache,重新组织代码,。,局部性驱动的协议,层,处理,需修改,层间通信方法,:,如果,协议,代码使用一个过程调用将数据包传递给上,(下),一层,,则,代码修改为将数据包加入上,(下),一层的一个包队列中,当一个协议层被调用时,从自己的读队列中取数据包,处理,,直至队列取空,当,包缓冲区可以在不同层重用时,,该策略工作很好,5.8.2 DMA,还是,PIO,?,PIO:,需要,CPU,参与,完成内存,-,外设之间的数据传输需要使用内存总线两次,DMA:,不需要,CPU,参与,且内存,-,外设之间的数据传输只需要使用内存总线一次,DMA一定好于PIO 吗?,DMA or PIO?,如果将数据传输和数据处理结合起来看,,DMA,的优势并不是那么明显!,PIO,需要,CPU,参与,内存,-,外设的数据传输需要使用两次内存总线,但,易于整合其它功能,(如检查和计算),DMA,不需要,CPU,参与,,内存,-,外设的数据传输仅使用内存总线一次,但不易于,整合其它功能,(如,CPU需要读入数据计算检查和),DMA,和,PIO,都要关注,d-cache,PIO,和,DMA,都存在,d-Cache,失效的问题:,当使用,PIO,或,DMA,时,数据都会进入,d-cache,如果数据马上被处理,,d-cache,的使用很高效,如果数据到来很久后,才,被使用,,则是,对,d-cache,的一种浪费,并且会降低,cache,命中率,使用,DMA,还是,PIO,,,应,视具体情况而定,5.9,小结,本章以,web,应用为例介绍了优化内存和总线带宽使用的技术,,主要包括:,使用适配器内存消除,copy 4,使用,fbufs,消除,copy 3,使用,mmap,消除,copy 2,使用,IO-Lite,、,sendfile,消除,copy2,和,copy 3,整合拷贝和检查和计算到,一个循环中,通过代码重新布局、局部性驱动的协议层处理优化,I-cache,的使用,本章使用的技术以及主要的原则,P1,原则的运用,本章反复运用,原则,P1,(避免显而易见的浪费),来消除不必要的读、写操作,运用这个原则的困难在于,,如果不把视野尽可能放宽到整个系统,浪费并不是显而易见的,运用,P1,原则要求对整个系统有一个概要的了解,使用简单的模型(硬件、体系结构、操作系统、协议)就可以做到这一点,系统技术的复杂性并不在于深度,而在于广度,(涉及多领域的知识),作业,阅读论文“,Network Stack Specialization for Performance,”,介绍其中,Sandstorm web server,的要点。包括以下内容:,该论文做了什么,为什么做:背景,现状,怎么做:主要思路,关键措施,评估方法与效果:实验怎么做,与谁比,效果怎样,你的思考:启发,评论,,作业提交:,11月28日,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!