Kafka零拷贝技术与传统数据复制次数比较

news2024/11/18 3:42:07

读Kafka技术书遇到困惑:

"对比传统的数据复制和“零拷贝技术”这两种方案。假设有10个消费者,传统复制方式的数据复制次数是4×10=40次,而“零拷贝技术”只需1+10= 11次(一次表示从磁盘复制到页面缓存,另外10次表示10个消费者各自读取一次页面缓存)。显然,“零拷贝技术”比传统复制方式需要的复制次数更少。 "


困惑我的有两个问题:

1. 传统一次数据传输为什么需要4次拷贝

2. 为什么零拷贝下10个消费者只需要11次


第一个问题:传统一次数据传输为什么需要4次拷贝?

传统数据传输在实现上包含两个操作, read 和write,都是由用户程序来发起, 其中read和write中各有两次复制操作.  read负责将数据从磁盘加载到内存空间中, 由于用户程序没有直接读取磁盘或写入网卡等操作系统资源的的权限, 因此每次调用时, 上下文都需要从用户态切换到内核态.

在read中, 首先由系统交由DMA(direct memory access)做第一次复制, 将数据从磁盘搬运到内核空间的文件系统的页面缓存中; 然后再交由CPU执行数据的第二次复制, 将数据从页面缓存拷贝到用户内存空间中. 

在write时, 首先cpu会将数据将用户空间拷贝到内核空间(文件系统缓冲区,pagecache), 放在socket缓存区中,完成第一次复制; 然后再由DMA将数据从socket缓存区搬运到网卡接口, 由网卡将数据传输到到网络中.  

在此过程中发生了4次用户态与内核态的上下文切换(一次系统调用会发生两次上下文切换)、4次拷贝, 其中CPU复制两次、 DMA复制两次, 在其中很多复制步骤是非必要的, 如何进行优化? 

常见优化手段有两种: 

  1. mmap + write
  2. sendfile

mmap是个共享缓存方案, 即把内核空间缓存去中的数据映射到用户空间中, 可被用户程序直接使用, 进行共享, 就不用将数据从内核空间搬到用户空间了, 在write时还是需要由CPU将数据从共享区复制到socket缓存区中.

这种做法还是会有4次上下文切换, 但少了一次数据拷贝. 做了优化, 但不多. 

再看另外一种sendfile, sendfile可以看成是对mmap + write操作的一种封装, 只需要指定下文件描述符和数据长度, 将两次系统调用减少为一次, 可以做到在内核态时将数据从磁盘复制到网卡, 但其中还是会经过三次数据复制:

  • 磁盘->内核缓存
  • 内核缓存-> socket缓存
  • socket缓存->网卡

这种不是实际意义上的零拷贝, 但不在发生从内核空间到用户空间的拷贝了, 所以我理解所谓零拷贝指的是不发生从内核空间到用户空间的拷贝了。


第二个问题: 为什么零拷贝下10个消费者只需要11次拷贝?

那第二个问题"为什么零拷贝下10个消费者只需要11次拷贝?"怎么理解? 

这是使用了更牛逼的SG-DMA(The Scatter-Gather Direct Memory Access)技术, SG-DMA是一种特殊的DMA, 通过sendfile指定的文件描述符和数据长度, 实现了将内核中页缓存数据直接搬运到网卡中, 中间不需要经过socket缓存区, 且中间拷贝操作全程无cpu参与.

在这种意义下, 零拷贝指的是零cpu拷贝技术.

SG-DMA实现了仅需两次拷贝就完成了一次磁盘数据的网络传输操作, 而对于10个消费者则需要10次使用SG-DMA将数据从内核页缓存拷贝到网卡的动作, 页缓存顾名思义是数据在内核空间的缓存, 对于同一条数据从磁盘拷贝到内核空间后就缓存起来, 后面再使用时就可无需再重新拷贝了. 

所以1条消息发送给10个消费者, kafka做到了仅需通过11次拷贝就完成了, 你说他的文件传输效率高不高. 

其他使用零拷贝技术的还有Nginx系统.

其他: 

chatgpt的答案: 

零拷贝技术与传统数据复制次数比较解释

传统数据复制

在传统的数据复制方法中,数据在从磁盘到达消费者之前会经历多次复制。这个过程通常包括以下步骤:

  1. 从磁盘读取数据到内核空间的文件系统缓冲区(页缓存)。
  2. 从文件系统缓冲区复制数据到用户空间的应用程序缓冲区。
  3. 从应用程序缓冲区复制数据回内核空间的socket缓冲区。
  4. 从socket缓冲区将数据发送到网络。

如果有10个消费者,这个过程需要为每个消费者重复进行,导致数据被复制了4次(磁盘到文件系统缓冲区,文件系统缓冲区到用户空间,用户空间到socket缓冲区,socket缓冲区到网络)。因此,总的数据复制次数是4×10=40次。

零拷贝技术

零拷贝技术通过减少数据在用户空间和内核空间之间的不必要复制,来降低CPU的负载和提高数据传输效率。在零拷贝的情况下,数据传输过程如下:

  1. 从磁盘读取数据到内核空间的文件系统缓冲区(页缓存),这是唯一的一次数据复制。
  2. 使用零拷贝技术(如Linux的sendfile系统调用),直接从文件系统缓冲区传输数据到网络,避免了数据到用户空间的复制。

每个消费者直接从文件系统缓冲区读取数据,所以对于10个消费者,数据复制次数为1(磁盘到文件系统缓冲区)加上10(每个消费者读取一次文件系统缓冲区),总共是1+10=11次。

结论

零拷贝技术显著减少了数据复制次数,从40次降低到了11次。这减少了CPU的工作负担,提高了数据传输的效率,并且减少了延迟。在处理大量数据或者高速网络传输时,零拷贝技术的优势尤为明显

参考: 

  • chatgpt
  • 原来 8 张图,就可以搞懂「零拷贝」了icon-default.png?t=N7T8https://www.cnblogs.com/xiaolincoding/p/13719610.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1435409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么用postman调用webservice(反推SoapUI)

<soapenv:Envelope xmlns:soapenv“http://schemas.xmlsoap.org/soap/envelope/” xmlns:lis“LisDataTrasen”> soapenv:Header/ soapenv:Body lis:Test lis:test111111111</lis:test> </lis:Test> </soapenv:Body> </soapenv:Envelope> Conten…

基于SSM的便民自行车管理系统的开发与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的便民自行车管理系统的开发与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

企业飞书应用机器人,使用python发送图文信息到群

企业飞书应用的自动化&#xff0c;需要创建企业应用&#xff0c;应用开通机器人能力&#xff0c;并获取机器人所需的app_id与app_secret&#xff08;这一部分大家可以在飞书的控制台获取&#xff1a;https://open.feishu.cn/api-explorer/&#xff09; 文章目录 步骤1&#xff…

C# OpenVINO 图片旋转角度检测

目录 效果 项目 代码 下载 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Te…

FCIS 2023:洞悉网络安全新态势,引领创新防护未来

随着网络技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为全球共同关注的焦点。在这样的背景下&#xff0c;FCIS 2023网络安全创新大会应运而生&#xff0c;旨在汇聚业界精英&#xff0c;共同探讨网络安全领域的最新动态、创新技术和解决方案。 本文将从大会的…

C语言贪吃蛇详解

个人简介&#xff1a;双非大二学生 个人博客&#xff1a;Monodye 今日鸡汤&#xff1a;人生就像一盒巧克力&#xff0c;你永远不知道下一块是什么味的 C语言基础刷题&#xff1a;牛客网在线编程_语法篇_基础语法 (nowcoder.com) 一.贪吃蛇游戏背景 贪吃蛇是久负盛名的游戏&…

内存对齐的规则

一、为什么要内存对齐 简单来说&#xff0c;就是方便计算机去读写数据。 对齐的地址一般都是 n&#xff08;n 2、4、8&#xff09;的倍数。 (1). 1 个字节的变量&#xff0c;例如 char 类型的变量&#xff0c;放在任意地址的位置上&#xff1b; (2). 2 个字节的变量&#xff0…

IPv4之后直接是IPv6,为何没有IPv5?

网络协议中,我们经常看到IPv4和IPv6,有点人可能会问为啥不提IPv5,是没有还是其他原因?下面我来给大伙普及一下,有不对之处还请指正。 一、什么是IPv4和IPv6 IPv4和IPv6都是互联网协议(Internet Protocol)的版本,用于规定网络设备进行通信时使用的标准格式。IPv4是互联…

京东首页移动端-web实战

设置视口标签以及引入初始化样式 <link rel"stylesheet" href"./css/normalize.css"><link rel"stylesheet" href"./css/index.css"> body常用初始化样式 body {width: 100%;min-width: 320px;max-width: 640px;margin:…

问题:鼻中隔前上部血供主要来自于筛后动脉。( ) #学习方法#其他

问题&#xff1a;鼻中隔前上部血供主要来自于筛后动脉。&#xff08; &#xff09; 对 错 参考答案如图所示

unity 增加系统时间显示、FPS帧率、ms延迟

代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;using UnityEngine;public class Frame : MonoBehaviour {// 记录帧数private int _frame;// 上一次计算帧率的时间private float _lastTime;// 平…

PCIE 参考时钟架构

一、PCIe架构组件 首先先看下PCIE架构组件&#xff0c;下图中主要包括&#xff1a; ROOT COMPLEX (RC) (CPU); PCIE PCI/PCI-X Bridge; PCIE SWITCH; PCIE ENDPOINT (EP) (pcie设备); BUFFER; 各个器件的时钟来源都是由100MHz经过Buffer后提供。一个PCIE树上最多可以有256…

02-Web应用_架构构建_漏洞_HTTP数据包_代理服务器

Web应用_架构构建_漏洞_HTTP数据包_代理服务器 一、网站搭建前置知识1.1 域名1.2、子域名1.3、DNS二、web应用环境架构类三、web应用安全漏洞分类四、web请求返回过程数据包 五、演示案例5.1、架构-Web应用搭建-域名源码解析5.2、请求包-新闻回帖点赞-重放数据包5.3、请求包-移…

09 - python操作Excel

python读取Excel python使用xlrd模块用于读取Excel的数据&#xff0c;支持.xls和.xlsx两种文件格式读取。 使用示例 先安装模块 pip install xlrd 代码 # 导入excel读模块 import xlrd# 获取工作簿对象 wb xlrd.open_workbook(./人员.xls)# 获取所有工作表名 sheet_name…

阿里云服务器多少钱一年?4核16G10M带宽26元/月

2024年2月阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核…

2024不可不会的StableDiffusion之反向提示词(六)

1. 引言 在之前的文章中&#xff0c;我们先后介绍了Stable Diffusion中的所有关键组件&#xff0c;以及如何根据文本提示词来生成图像的整体流程。在这篇文章中&#xff0c;我将展示如何编辑反向提示词&#xff08; Negative Prompt&#xff09;来控制图像生成功能&#xff0c…

导入jar包的办法,若Maven报日志错误,Cannnot resolve XXXXX.jar

相信很多人在进行涉及到java工程项目&#xff0c;都会遇到很多问题&#xff0c;在pom文件中导入jar包&#xff0c;或许会出现cannot resolve XXXXX的问题&#xff0c;从而会报个别的错误。 接下来我将介绍两种导入jar包的方法 导入jar包&#xff0c;从官网直接下载下来相关的…

5-3、S曲线生成器【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍步进电机S曲线生成器的计算以及使用 一.计算原理 根据上一节内容&#xff0c;已经计算了一条任意S曲线的函数。在步进电机S曲线加减速的控制中&#xff0c;需要的S曲线如图1所示&#xff0c;横…

2024年【高处安装、维护、拆除】最新解析及高处安装、维护、拆除新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【高处安装、维护、拆除】最新解析及高处安装、维护、拆除新版试题&#xff0c;包含高处安装、维护、拆除最新解析答案和解析及高处安装、维护、拆除新版试题练习。安全生产模拟考试一点通结合国家高处安装、维…

蓝桥杯每日一题-----数位dp练习

题目 链接 参考代码 写了两个&#xff0c;一个是很久以前写的&#xff0c;一个是最近刚写的&#xff0c;很久以前写的时候还不会数位dp所以写了比较详细的注释&#xff0c;这两个代码主要是设置了不同的记忆数组&#xff0c;通过这两个代码可以理解记忆数组设置的灵活性。 im…