传统内核协议栈为什么不使用零拷贝,也就是内存映射来提升性能?

问题描述

传统内核协议栈为什么不使用零拷贝,也就是内存映射来提升性能?

如题,传统内核协议栈为什么不使用零拷贝,也就是内存映射来提升性能?

内核TCP/IP协议在中断处理阶段将网卡中数据拷贝到内核缓冲区,协议处理完后再将其拷贝到用户态,第一次拷贝很快,第二次拷贝很慢,大约占了整个处理流程的一半时间以上;
现在的零拷贝技术不再进行内核到用户的拷贝,而是直接进行一次内存映射,以此来提升网络性能。

那么,我想问的是:内核协议栈是否可以使用零拷贝技术?若不能,主要原因是什么?

在此,我的一个想法是:是不是因为用户处理的是纯data,即不包括协议头,如果映射,用户无法识别数据区。但是不是很确定,请各位大神指点。

解决方案

协议除了考虑性能还要考虑扩展性。而且是否优化,优化到什么程度要看什么协议。

解决方案二:

这个就好比tcpdump和netsniff-ng实现上的区别,内核空间是所有进程共享的区域,传统的方式,将数据放在这个区,方便所有的应用去使用。

但是如果有的应用,强调性能,那么就会使用零拷贝技术,将数据直接从网卡拷贝到用户空间。

这也就是netsniff-ng不丢帧,而tcpdump在流量稍大的情况下有丢帧的原因。

解决方案三:

零拷贝是内存映射还是拷贝到用户?

传统内核如果直接映射,数据如何解析?

解决方案四:

零拷贝是内存映射还是拷贝到用户?

传统内核如果直接映射,数据如何解析?

解决方案五:

更多的细节,我推荐你看篇文章。
http://blog.chinaunix.net/uid-20279362-id-3763236.html

时间: 2024-12-02 15:12:02

传统内核协议栈为什么不使用零拷贝,也就是内存映射来提升性能?的相关文章

对于Netty ByteBuf的零拷贝(Zero Copy) 的理解

根据 Wiki 对 Zero-copy 的定义: "Zero-copy" describes computer operations in which the CPU does not perform the task of copying data from one memory area to another. This is frequently used to save CPU cycles and memory bandwidth when transmitting a fi

Linux内核协议栈-从BSD socket接口层到传输层1

本文接上一篇Linux内核协议栈-初始化流程分析,在上一篇中主要分析了了Linux内核协议栈涉及到的关键初始化函数,在这一篇文章中将分析协议栈的BSD socket和到传输层的流程.采取的方式是分析socket相关的主要系统调用.针对不同的系统调用,其到达的协议层深度可能不同,有的基本只到sock层就够了,但是有些可能需要会涉及到比如tcp的具体细节和更底层的细节.本文基本追溯到传输层的开始,再深入的细节后续文章分析. 1.准备 协议的基本分层: (A代表socket的某个系统调用) BSD s

Linux内核协议栈-初始化流程分析

本文主要针对Linux-3.19.3版本的内核简单分析内核协议栈初始化涉及到的主要步骤和关键函数,不针对协议的解析以及数据包的处理流程做具体分析,后续有机会再详细分析 1.准备 Linux内核协议栈本身构建在虚拟文件系统之上,所以对Linux VFS不太了解的可以参考内核源码根目录下Documentation/filesystems/vfs.txt,另外,socket接口层,协议层,设备层的许多数据结构涉及到内存管理,所以对基本虚拟内存管理,slab缓存,页高速缓存不太了解的也可以查阅相关文档.

unix-如何将linux用户空间的一段已分配内存映射到内核空间

问题描述 如何将linux用户空间的一段已分配内存映射到内核空间 如何将linux用户空间的一段内存(已分配)映射到内核空间,使得在内核访问用户时不用复制数据而直接访问数据 请问能不能给出具体的代码演示功能的实现呢? 万分感谢大家!!!! 解决方案 mmap 你可以百度一下 Linux mmap. http://blog.csdn.net/angelbosj/article/details/8272887

网络子系统47_ip内核协议栈蓝图

//参考 深入理解linux网络内幕                                   

linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁【转】

转自:http://blog.csdn.net/goodluckwhh/article/details/9005585 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 一每CPU变量 二原子操作 三优化和内存屏障 四自旋锁 自旋锁 自旋锁的数据结构和宏函数 读写自旋锁 读写自旋锁的相关函数   linux内核中的各种"任务"都能看到内核地址空间,因而它们之间也需要同步和互斥.linux内核支持的同步/互斥手段包括:   技术 功能 作用范围 每CPU变量 为

通用平台下突破时延短板 XSKY利用DPDK增强Ceph网络效能

业界共识,网络层是分布式存储 "性能木桶的最短板".在存储领域的概念中,一般有两张网络--用户应用与存储对接的"接入网络"和存储系统内部交换数据的"数据分布网络".传统存储的"数据分布网络"通常用SAS总线或Infiniband网络实现,牺牲的是水平扩展能力和通用硬件特性,换来较低的时延和相对较少的中央处理器负担.而在主流的分布式存储系统中,为了整个集群的硬件通用一致性,和接入部分一样,通常采用基于TCP/IP的以太网进行数据

Java I/O 操作及优化建议

Java I/O I/O,即 Input/Output(输入/输出) 的简称.就 I/O 而言,概念上有 5 种模型:blocking I/O,nonblocking I/O,I/O multiplexing (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX aio_functions).不同的操作系统对上述模型支持不同,UNIX 支持 IO 多路复用.不同系统叫法不同,freebsd 里面叫 kque

Android 2017面试题整理

似乎自去年下半年以来,大家跳槽的少了,还有有些公司裁员了,前几年火热的移动端.前端岗位也越来越少,回归理性.现在各大公司对移动Android/ios的需求基本要求都是三年以上相关经验,有过大型互联网项目经验,基础扎实.那么对于我们从事Android开发的程序员,我们究竟需要掌握哪些技术呢?面试官究竟会问什么呢?今天,结合我的面试经验,给大家整理一下. Android常见面试题整理 以我的经验,面试基本都是简单到原理循序渐进的过程,所以这里整理的时候也遵循这个思路. 1,Activity的启动模式