linux零页技术

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

概述

黄 晓晨, 软件工程师, IBM

黄晓晨,IBM system Z 自动化技术支持软件工程师。

冯 瑞, 软件工程师, IBM

冯瑞,IBM system Z 自动化技术支持软件工程师。

简介:?本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景。本文是本系列文章的第一部分,主要是介绍一些零拷贝技术的相关背景知识,简要概述了 Linux 为什么需要零拷贝技术以及 Linux 中都有哪几种零拷贝技术。

本文的标签:? 零拷贝

标记本文!

发布日期:?2011 年 1 月 27 日 级别:?初级 访问情况 :?11436 次浏览 评论:?0?(查看?|?添加评论 - 登录)

平均分 (22个评分)为本文评分

引言

传统的 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请求调页技术,linux零页技术.doc相关推荐

  1. linux 下 调笔记本亮度,Linux下如何保存笔记本屏幕亮度设置(背光亮度)

    本人使用的Linux桌面版是 Linux Mint 13 maya,每次开机发现屏幕亮度都是最亮的,可以通过Fn+F6/F7来调节背光亮度,但重启后还是 本人使用的Linux桌面版是 Linux Mi ...

  2. Linux怎么调oracle存储,Linux 环境下Oracle安装与调试(四)之视图、存储过程

    1.视图的介绍和使用 表和视图的区别,表是占用硬盘空间物理表,而视图可以理解为一个虚表,并不存储在硬盘上, 不占用硬盘空间,实际上就是一个查询语句,方便查询. 对视图里面的数据操作(增 删 改) 其实 ...

  3. Linux性能调优、Linux集群与存储等

    http://freeloda.blog.51cto.com/    51cto 转载于:https://www.cnblogs.com/shengs/p/4689903.html

  4. linux命令调ftp限速,Linux下操作设置ftp普通账号和vip账号限速

    ftp工作流程: ftp回话包含了两个通道,控制通道和数据通道,ftp的工作有两种模式,一种是主动模式,一种是被动模式,以ftpserver为参照物,主动模式,服务器主动连接客户端传输,被动模式,等待 ...

  5. Linux 中的零拷贝技术,第 2 部分

    技术实现 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.第一部分主要介绍了一些零拷贝技术的相关背景知识,简要概 ...

  6. Linux 中的零拷贝技术

    引言 传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输.这样做最大的好处是可以减 ...

  7. Linux 零拷贝技术

    文章目录 使用标准I/O的痛点 零拷贝技术介绍 直接I/O操作 mmap内存映射 sendfile 在文件描述符之间传递数据 使用标准I/O的痛点 在Linux中 标准I/O操作都是基于数据拷贝的缓冲 ...

  8. 大白话讲解 零拷贝技术

    数据的四次拷贝与四次上下文切换 很多应用程序在面临客户端请求时,可以等价为进行如下的系统调用: 1. File.read(file, buf, len); 2. Socket.send(socket, ...

  9. 重新深入理解零拷贝技术

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 注意事项:除了 ...

最新文章

  1. python描述器 触发事件_Python面向对象 - 描述器
  2. 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
  3. Bug本地接口不返回数据 线上返回数据
  4. 如何查看PublicKeyToken
  5. Swift:带有私有设置方法的公有属性
  6. 红警2突然崩溃思考—地图?(最短,最长节点/路径)
  7. pandas 批量修改列名_十分钟想搞定pandas?
  8. 一个简单的C#委托小例子
  9. 求高人指点此分页存储过程怎么样?
  10. 台式机双系统安装(windows10+ubuntu18.04)及ROS安装的坑点解决
  11. Burpsuite Professional安装及使用教程(抓包)
  12. 离散数学 —— 二元关系(恒等关系、关系图与关系矩阵、复合关系、自反与反自反、对称与反对称、传递性、闭包、等价类、商集、集合的划分、序关系、哈斯图、上下界函数)
  13. 《Java解惑》系列——02字符谜题——谜题11:最后的笑声(字符、字符串连接操作)
  14. python读取sql_如何从python读取sql
  15. [C/C++]宽字符与控制台程序
  16. 12月18日科技资讯|支付宝、微信回应3D面具破解人脸识别;ofo 否认「发币」;Kafka 2.4.0 发布
  17. 客户数据成为营销必备!成功关键是挖掘数据价值
  18. xshell6的安装和使用
  19. #define s(x) x*x 的计算方法
  20. 创建AccessToken工具类

热门文章

  1. golang中的gin框架学习
  2. scala java混合_Scala和Java混合项目搭建:(Eclipse)
  3. oracle导入dmp秒退,Oracle导入dmp遇到问题解决
  4. VCF文件中QUAL和GQ的区别
  5. iOS进阶 - pod install 与 pod update 读这一篇就够了
  6. Android 7.0拍照/相册/截取图片FileProvider使用
  7. 工业自动控制过程中最好用SCADA软件推荐
  8. 二、零基础入门微信小程序项目开发之页面跳转实现
  9. 十进制转化成二进制(C++)
  10. bootstarp js设置列隐藏_bootstraptable表格columns 隐藏方法