【重难点总结】DMA与kafka零拷贝机制之间的关系
一、DMA介绍
1、概念
DMA(Direct Memory Access,直接存储器访问) 是一种内存访问技术,独立于CPU, 直接读、写系统存储器、外设等
主存与I/0设备之间使用DMA控制器控制一个数据通路(专用数据总线)进行数据传输,无需依赖于CPU进行中断
I/O设备(字符设备和块设备):硬盘、USB、打印机
CPU除了在数据传输开始和结束时做一点处理外(开始和结束时候要做中断处理),在传输过程中CPU可以进行其他的工作。
2、不使用DMA方式时
CPU:将数据复制到CPU的暂存器,再写回到新位置,此时CPU无法使用
3、应用场景
主存与I/O设备之间进行数据交互
例如:运行一个程序,调用一段数据
二、零拷贝机制
1、解决的问题
从磁盘读取一个文件通过网络输出到一个客户端
步骤:从磁盘读取文件,将文件写入到socket(套接字,网卡驱动)
2、传统的传输方式-也需要经过DMA传输
(1)过程描述-4次拷贝
数据从磁盘复制到内核缓冲区
从内核缓冲区复制到用户空间缓冲区【内存】(需要切换到用户态空间)
从用户缓冲区复制到内核的socket缓冲区
从socket缓冲区复制到协议引擎(这里是网卡驱动)
(2)kafka图解
硬盘-内存-socket缓冲区-网卡驱动

2、零拷贝方式-使用Linux内核中sendfile的系统调用(合并缓冲区-内存-socket)
(1)过程描述
从磁盘读取文件内容到内核缓冲区
直接从内核缓冲区复制数据到socket缓冲区(原来:缓冲区-内存/用户空间,内存-socket)
从socket缓冲区复制到协议引擎(这里是网卡驱动)
(2)kafka过程图解

3、零拷贝机制与DMA的关系
无需经过CPU拷贝数据到内存中,直接将读缓冲区的地址写入socket
网卡根据 Socket 的描述符信息,直接从读缓冲区,写入到网卡驱动
应用程序通过调用mmap(),将不同的虚拟地址映射到了同一物理地址,即内核缓冲区,使程序在用户态可以直接读取并操作内核空间的数据
使用DMA方式将磁盘数据读取到内核缓冲区,通过内存映射,使用户缓冲区和内核读缓冲区的内存地址为同一内存地址
【重难点总结】DMA与kafka零拷贝机制之间的关系的更多相关文章
- kafka零拷贝机制
kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不会kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝. 传统IO kafka的数据是要落入磁 ...
- kafka 零拷贝
kafka通过零拷贝实现高效的数据传输 https://blog.csdn.net/lxlmycsdnfree/article/details/78973864 Kafka零拷贝 https://bl ...
- 深入剖析Linux IO原理和几种零拷贝机制的实现
深入剖析Linux IO原理和几种零拷贝机制的实现 来源 https://zhuanlan.zhihu.com/p/83398714 零壹技术栈 公众号[零壹技术栈] 前言 零拷贝(Zero ...
- 框架篇:Linux零拷贝机制和FileChannel
前言 大白话解释,零拷贝就是没有把数据从一个存储区域拷贝到另一个存储区域.但是没有数据的复制,怎么可能实现数据的传输呢?其实我们在java NIO.netty.kafka遇到的零拷贝,并不是不复制数据 ...
- Netty源码解析 -- 零拷贝机制与ByteBuf
本文来分享Netty中的零拷贝机制以及内存缓冲区ByteBuf的实现. 源码分析基于Netty 4.1.52 Netty中的零拷贝 Netty中零拷贝机制主要有以下几种 1.文件传输类DefaultF ...
- 转载一篇关于kafka零拷贝(zero-copy)通俗易懂的好文
原文地址 https://www.cnblogs.com/yizhou35/p/12026263.html 零拷贝就是一种避免CPU 将数据从一块存储拷贝到另外一块存储的技术. DMA技术是Direc ...
- kafka零拷贝
Kafka之所以那么快的另外一个原因就是零拷贝(zero-copy)技术.本文我们就来了解Kafka中使用的零拷贝技术为什么那么快. 传统的文件拷贝 传统的文件拷贝通常需要从用户态去转到核心态,经过r ...
- java的零拷贝机制
转:https://blog.csdn.net/zhouhao88410234/article/details/77574689?fps=1&locationNum=9 为何要懂零拷贝原理?因 ...
- Java后端进阶-网络编程(Netty零拷贝机制)
package com.study.hc.net.netty.demo; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled ...
- 零拷贝详解 Java NIO学习笔记四(零拷贝详解)
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...
随机推荐
- Elasticsearch:正确使用regexp搜索
- Filebeat 调试
默认情况下,Filebeat将其所有输出发送到syslog. 在前台运行Filebeat时,可以使用-e命令行标志将输出重定向到标准错误. 例如: filebeat -e 默认配置文件是filebea ...
- 「产品运营」研发效能之DevOps平台如何运营?
有人常说「酒香不怕巷子深」.不是的,如果这个巷子是酒吧街,那最深的那家酒吧肯定是租金最便宜的.酒吧的地段好坏已经在租金价格上体现出来了.现在已经不是那个工具缺乏.有个工具就拍手称快.欣然去试用的时代了 ...
- TWS耳机蓝牙建连过程_HCI版本
TWS耳机信息:Enco Air2 手机信息:onePlus8 ColorOS V12.1 其他准备工作:手机进入开发者模式,打开本地日志开关.可参考上一篇文章 https://www.cnblog ...
- 关于history.back()、history.go()回退但无法刷新页面的问题
window.history.back(); 这样确实可以做到后退的功能,但是项目中,常常并不只是后退就能完成需求,往往需要在后退的同时,刷新后退的页面信息,比如后退到首页同时刷新首页的最新数据,这样 ...
- 规则引擎深度对比,LiteFlow vs Drools!
前言 Drools是一款老牌的java规则引擎框架,早在十几年前,我刚工作的时候,曾在一家第三方支付企业工作.在核心的支付路由层面我记得就是用Drools来做的. 难能可贵的是,Drools这个项目在 ...
- java.lang.ClassNotFoundException:(新建的servlet无法找到class文件)的报错
该问题有可能是IDEA的部署没有更新的问题 将out中的 删除,然后重新导入即可
- 17.MongoDB系列之了解应用程序动态
1. 查看当前操作 mongos> db.currentOp() { "inprog" : [ { "shard" : "study" ...
- JSP中使用response对象实现定时跳转网页
5秒后跳转到登录页面 <% response.setHeader("refresh","5;URL="login.jsp"); %>
- 齐博x1换服务器如何转移网站?
如果你要把网站从本机传到服务器,又或者要更换服务器,请按下面的操作处理 第一步,必须要在原网站后台备份数据. 第二步,把备份好的网站所有文件,传到新服务器或空间 特别要注意 \cache\ 目录下建议 ...