传统IO拷贝与零拷贝技术比较
1. 传统IO

由上面图知,传统io需要经过4次copy, 3次状态切换
第一次: 从硬盘 经过 DMA 拷贝 到 kernel buffer (内核buferr)
第二次: 从kernel buffer 经过cpu 拷贝到 user buffer ,比如拷贝到应用程序
第三次: 从user buffer 拷贝到 socket buffer
第四次: 从socket buffer 拷贝到 protocol engine 协议栈
第一次状态切换: 用户态---》 内核状 (或者叫着 用户上下文----》 内核上下文)
第二次状态切换: 内核状---》 用户状
第三次状态切换: 用户状---》 内核状
DMA : direct memory access 直接内存拷贝
2. mmap优化

mmap : 通过内存映射 ,将文件映射到内核缓冲区,同时用户空间可以共享内核空间的数据。这样在网络传输时就减少了内核空间到用户空间的拷贝次数
第一次拷贝: DMA拷贝,从硬件拷贝到内核空间
因为user buffer 与kernel buffer共享数据 ,所以不需要将数据从kernel buffer 拷贝到 user buffer , 数据可以直接在内核空间修改
第二次拷贝: kernel buffer 中的数据经过 cpu 拷贝到 socket buffer
第三次拷贝: socket buffer 过DMA拷贝到protocol engine
所以 mmp优化之后,拷贝共需要3次, 但是状态 切换还是3次
3. sendFile优化
Linux2.4 提供的sendFile实现了真正的零拷贝

第一次拷贝: DMA拷贝,将数据从硬盘拷贝到kernel buffer
第二次拷贝: DMA拷贝,将数据从kernel buffer拷贝到protocol engine
没有经过cpu拷贝,也就是操作系统级别的拷贝,实现了真正的零拷贝
注意: sendFile技术还是有少量的数据(例如数据的大小,偏移量等)使用了cpu拷贝,从kernel buffer 拷贝到 socket buffer ,但是数据量很少,可忽略
传统IO拷贝与零拷贝技术比较的更多相关文章
- 【Netty技术专题】「原理分析系列」Netty强大特性之ByteBuf零拷贝技术原理分析
零拷贝Zero-Copy 我们先来看下它的定义: "Zero-copy" describes computer operations in which the CPU does n ...
- Linux 中的零拷贝技术,第 1 部分
概述 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.本文是本系列文章的第一部分,主要是介绍一些零拷贝技术的相关 ...
- [转帖]Linux 中的零拷贝技术,第 1 部分
Linux 中的零拷贝技术,第 1 部分 https://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy1/index.html 引言 传统的 ...
- 零拷贝-zero copy
Efficient data transfer through zero copy Zero Copy I: User-Mode Perspective 0. 前言 在阅读RocketMQ的官方文档时 ...
- Netty 零拷贝(一)Linux 零拷贝
Netty 零拷贝(一)Linux 零拷贝 本文探讨 Linux 中主要的几种零拷贝技术以及零拷贝技术适用的场景. 一.几个重要的概念 1.1 用户空间与内核空间 操作系统的核心是内核,独立于普通的应 ...
- Linux、JDK、Netty中的NIO与零拷贝
一.先理解内核空间与用户空间 Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级分为4个,Linux 使用 Ring 0 和 Ring 3. 内核空 ...
- sendfile函数--零拷贝(转)
零拷贝:零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除通信数据在存储器之间不必要的中间拷贝过程,有效地提高通信效率,是设计高速接口通道.实现高速服务器和路由器的关键技术之一. sendfile ...
- Netty 零拷贝(三)Netty 对零拷贝的改进
Netty 零拷贝(三)Netty 对零拷贝的改进 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) Netty 的&quo ...
- Linux下的零拷贝
Reference: https://segmentfault.com/a/1190000011989008 零拷贝是什么? 维基百科对“零拷贝”是这样描述的: "Zero-copy&qu ...
随机推荐
- malloc(50) 内存泄露 内存溢出 memory leak会最终会导致out of memory
https://en.wikipedia.org/wiki/Memory_leak In computer science, a memory leak is a type of resource l ...
- 十、补充数据类型set
set:无顺序的不重复的集合 list---允许重复,修改tuple--允许重复,不能修改 set----不允许重复的集合例子: s=set()print s l1=[11,22,33,22,11]l ...
- oracle系统调优
在Oracle数据库系统中,起到调节作用的参数叫初始化参数,在Oracle 8i及以前的版本中,这些初始化参数记录在INITsid.ora文件中:而Oracle 9i/10g/11g中将这些参数记录在 ...
- 内置函数zip,map,even
内置函数的补充:1.zip:l1 = ['a','b','c','e','f','g']l2 = [1,2,3]l3=['A','B','C']L4=['牛','牛','niu']#zip,就是把俩l ...
- Jmeter之正则表达式提取器
在很多情况下,我们需要提取响应结果中的一些信息,供后续功能使用.可以使用后置处理器中的正则表达式提取器. 一.正则表达式提取器 二.配置说明 1.姓名:标识 2.注释:备注 3.Apply to:正则 ...
- MFC下一个通用非阻塞的等待执行结束的对话框类
头文件:CPictureEx用于显示一个等待动画 #pragma once #include "afxwin.h" #include "resource.h" ...
- Ngix 配置与部署(wsgi,uwsgi,uWSGI)
1. WSGI 是一种协议接口,他是描述web服务器如何与web应用程序(Django ,Flask ) 通讯的规范. 2. uwsgi 与WSGI协议一样,是uWSGI服务器的独占协议,用于定义传输 ...
- Selfishness is not living as one wishes to live. it is asking others to live as wishes to live.
regin: n. 统治; 任期 lap:n. 大腿部. procession: n. 行列,游行 lessen: n. 减少 wade: v. 跋涉 patriotic: adj. 爱国的 Medi ...
- Mac019--Ubuntu上安装Rancher
首先安装:VisualBox虚拟机. 下载:ubuntu镜像 (ubuntu基于linux的免费开源桌面PC操作系统) ======================================== ...
- Java基础/利用fastjson反序列化json为对象和对象数组
利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...