下载此文档

Linux中的零拷贝技术,第1部分.docx


文档分类:IT计算机 | 页数:约21页 举报非法文档有奖
1/21
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/21 下载此文档
文档列表 文档介绍
Linux中的零拷贝技术,第1部分.docxLinux中的零拷贝技术,第1部分概述黃晓晨,软件工程师,IBM冯瑞,软件工程师,TBM简介:本系列由两篇文章组成,介绍了当前用于Linux操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景。本文是本系列文章的第一部分,主要是介绍一些零拷贝技术的相关背景知识,简要概述了Linux为什么需要零拷贝技术以及Linux屮都有哪几种零拷贝技术。标记本文!发布日期:2011年1月27日级别:初级访问情况7129次浏览建议:0(添加评论)*****平均分(共15个评分)引言传统的Linux操作系统的标准I/O接口是基于数据拷贝操作的,即I/O操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘I/O的操作,因为如果所请求的数据己经存放在操作系统的高速缓冲存储器屮,那么就不需要再进行实际的物理磁盘I/O操作。但是数据传输过程屮的数据拷贝操作却导致了极大的CPU开销,限制了操作系统有效进行数据传输操作的能力。零拷贝(zero-copy)这种技术可以有效地改善数据传输的性能,在内核驱动程序(比如网络堆栈或者磁盘存储驱动程序)处理I/O数据的时候,零拷贝技术可以在某种程度上减少甚至完全避免不必要CPU数据拷贝操作。现代的CPU和存储体系结构提供了很多特征可以有效地实现零拷贝技术,但是因为存储体系结构非常复杂,而且网络协议栈有时需要对数据进行必要的处理,所以零拷贝技术有可能会产牛很多负面的影响,甚至会导致零拷贝技术自身的优点完全丧失。回页首为什么需要零拷贝技术如今,很多网络服务器都是基于客户端-服务器这一模型的。在这种模型屮,客户端向服务器端请求数据或者服务;服务器端则需要响应客户端发出的请求,并为客户端提供它所需要的数据。随着网络服务的逐渐普及,video这类应用程序发展迅速。半今的计算机系统已经具备足够的能力去处理video这类应用程序对客户端所造成的重负荷,但是对于服务器端來说,它应付由video这类应用程序引起的网络通信量就显得捉襟见肘了。血且,客户端的数量增长迅速,那么服务器端就更容易成为性能瓶颈。而对于负荷很重的服务器来说,操作系统通常都是引起性能瓶颈的罪魁祸首。举个例子来说,半数据“写”操作或者数据“发送”操作的系统调用发出吋,操作系统通常都会将数据从应用程序地址空间的缓冲区拷贝到操作系统内核的缓冲区屮去。操作系统这样做的好处是接口简单,但是却在很大程度上损失了系统性能,因为这种数据拷贝操作不单需要占用CPU时间片,同时也需要占用额外的内存带宽。一般来说,客户端通过网络接口卡向服务器端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求,请求处理完成以后,操作系统还需要将处理得到的结果通过网络适配器传递回去。下边这一小节会跟读者简单介绍一下传统的服务器是如何进行数据传输的,以及这种数据传输的处理过稈•存在哪些问题有可能会造成服务器的性能损失。Linux屮传统服务器进行数据传输的流程Linux中传统的I/O操作是一种缓冲I/O,I/O过程中产生的数据传输通常需要在缓冲区屮进行多次的拷贝操作。一•般来说,在传输数据的时候,用户应用程序需要分配一块大小合适的缓冲区用来存放需要传输的数据。应用程序从文件屮读取一块数据,然后把这块数据通过网络发送到接收端去。用户应用程序只是需要调用两个系统调用read()和write()就可以完成这个数据传输操作,应用程序并不知晓在这个数据传输的过程屮操作系统所做的数据拷贝操作。对于Linux操作系统来说,基于数据排序或者校验等各方面因素的考虑,操作系统内核会在处理数据传输的过程屮进行多次拷贝操作。在某些情况下,这些数据拷贝操作会极大地降低数据传输的性能。半应用程序需要访问某块数据的吋候,操作系统内核会先检查这块数据是不是因为前一次对相同文件的访问而已经被存放在操作系统内核地址空间的缓冲区内,如果在内核缓冲区屮找不到这块数据,Linux操作系统内核会先将这块数据从磁盘读出来放到操作系统内核的缓冲区里去。如果这个数据读取操作是由DMA完成的,那么在DMA进行数据读取的这一过程屮,CPU只是需要进行缓冲区管理,以及创建和处理DMA,除此之外,CPU不需要再做更多的事情,DMA执行完数据读取操作之后,会通知操作系统做进一步的处理。Linux操作系统会根据read()系统调用指定的应用程序地址空间的地址,把这块数据存放到请求这块数据的应用程序的地址空间屮去,在接下来的处理过程屮,操作系统需要将数据再一次从用户应用程序地址空间的缓冲区拷贝到与网络堆栈和关的内核缓冲区屮去,这个过程也是需要占用CPU的。数据拷贝操作结束以后,数据会被打包,然后发送到网络接口卡上去。在数据传输的过程屮,应用

Linux中的零拷贝技术,第1部分 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数21
  • 收藏数0 收藏
  • 顶次数0
  • 上传人pppccc8
  • 文件大小162 KB
  • 时间2020-09-29