高性能——零拷贝

news2024/9/28 23:22:46

目录

背景

零拷贝定义

传统I/O执行流程


背景

零拷贝算是一个老生常谈的问题啦,很多顶级框架都用到了零拷贝来提升性能,比如我们经常接触到的Kafka 、RocketMQ、Netty 。

零拷贝定义

  • “拷贝”:就是指数据从一个存储区域转移到另一个存储区域.
  • “零”: 表示次数为 0,它表示拷贝数据的次数为 0。

计算机执行 I/O 操作时,CPU 不需要将数据从一个存储区域复制到另一个存储区域,从而可以减少上下文切换以及 CPU 的拷贝时间。它是一种 I/0 操作优化技术。
 

传统I/O执行流程

        以【文件下载】功能为例,前端发起请求后,服务端的任务就是:将主机磁盘中的文件通过已连接的Socket发出。

        关键代码如下:    

while((n = read(diskfd,buf,BUF SIZE)) > 0)
write(sockfd,buf ,n);

        传统的IO流程,包括read和write两个过程。

        read:把数据从【磁盘】--读取到-->【内核缓冲区】--读取到-->【用户缓冲区】

        write:把数据写入【socket缓冲区】--写入到-->【网卡设备】

        流程图如下:

  • 用户应用进程调用 read 函数,向操作系统发起 I/O 调用,上下文从用户态转为内核态(切换 1)
  • DMA 控制器把数据从磁盘中,读取到内CPU 把内核缓冲区
  • CPU 把内核缓冲区数据,拷贝到用户应用缓冲区,上下文从内核态转为用户态 (切换 2),read 函数返回
  • 用户应用进程通过 write 函数,发起 1O 调用,上下文从用户态转为内核态 (切换 3)
  • CPU 将应用缓冲区中的数据,拷贝到污贝到网下叹宙,工下文从内核态切换回用户态 (切换4),DMA 控制器把数据从 socket 缓冲区write 函数返回

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

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

相关文章

games103——作业2

实验二主要使用隐式积分法以及PBD法完成布料仿真 完整项目已上传至github。 文章目录 基于物理的方法弹簧系统单个弹簧多个弹簧弹簧网络结构化弹簧网络(Structured Spring Networks)非结构化弹簧网络(Unstructured Spring Networks)三角网格表示 代码 求解质量弹簧系统的显示积…

UG NX二次开发(C++)-用UF_OBJ_cycle_objs_in_part遍历对象

文章目录 1、前言2、在UG NX中创建多个体3、创建UF_OBJ_cycle_objs_in_part的使用函数3.1 首先声明函数:3.2定义函数代码3.3 函数调用代码3.4 测试结果 1、前言 UG NX二次开发中,比如体、面、边等,在NXOpen中可以通过Collection来实现&#…

华硕ROG|玩家国度冰刃6双屏GX650RX Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原

华硕ROG|玩家国度 冰刃6双屏 GX650RX Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原 文件地址:https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 华硕工厂恢复系统 ,安装结束后带隐藏分区以及机器所有驱动软件 需准备一个…

【告警通知】Java项目统一异常捕获处理【钉钉告警推送消息】

基础描述 在实际业务中,很多时候都是被动获取系统业务异常,如通过业务部门或者通过客户反馈说某个功能不行时,这样显得系统很被动和呆板在SpringBoot中有统一异常处理可以来实现,当我们检测到非业务异常时,比如空指针…

《SpringBoot中间件设计与实战》第2章 服务治理,超时熔断

需求背景 在流量较大的场景下,举个例子,用户在电商平台下单后开始跳转到在线收银台进行支付。由于支付渠道和网络环境随时都有可能发生问题,那么你该怎么保证支付系统的可靠性呢? 保证支付系统的可靠性需要考虑的点非常多,但这里有一个最直接和重点的内容就支付响应时长…

【王道·计算机网络】第三章 数据链路层【未完】

一、功能 研究思想:水平方向个数据链路层的差距 1.1 数据链路层基本概念 结点:主机、路由器链路:网络中两个节点之间的物理通道,传输介质包含:双绞线、光纤、微波。分为:有线链路、无线链路数据链路&…

TIM输入不捕获-STM32

TIM输入不捕获-STM32 IC(Input Capture) 输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入…

【Linux】进程学习(2)---理解进程操作

文章目录 查看进程通过系统目录查看通过ps命令查看 通过系统调用获取进程标识符通过系统调用创建进程初识fork函数fork函数的返回值 进程状态阻塞与运行状态Linux内核源码中的进程状态运行状态-R浅度睡眠状态-S深度睡眠状态-D暂停状态-T僵尸状态-Z死亡状态-X 查看进程 通过系统…

操作系统引导(开机过程)

操作系统安装在C盘中,其一步步启动的过程如下: 操作系统要启动,操作系统的数据需要先被放入主存里。 如图所示,计算机的主存由RAM和ROM组成,ROM芯片被集成在电脑主板上,里面存储的是BIOS(Basic…

【组合数学算贡献+枚举】CF816div2 C. Monoblock

题解都看了半天才懂 Problem - C - Codeforces 题意: 思路: 一开始的思路是这样的: 只能说,想到了更换枚举对象,然后组合数学算贡献 也想到了修改操作与(a[i]和a[i-1])有关 但是我想的是枚…

在Linux上搭建gitlab以及自动化编译部署的完整流程

一、安装gitlab 首先下载gitlab的安装包,地址如下: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/bionic/main/g/gitlab-ce/ 然后安装下载的包即可,一般还需要安装openssh-server等依赖包,在安装gitlab包之前可以…

【MongoDB】二、MongoDB数据库的基本操作

【MongoDB】二、MongoDB数据库的基本操作 实验目的实验内容任务一:(1)创建数据库newdb(2)在数据库newdb中创建集合mycollection(3)在集合mycollection中插入以下数据:(4&…

如何安装 Auto GPT 4:分步指南

动动发财的小手,点个赞吧! 您对尝试最新最好的文本生成技术感到兴奋吗? Auto GPT 4 因其令人印象深刻的功能而广为人知,但启动和运行它似乎令人望而生畏。幸运的是,我们在这里[1]提供安装 Auto GPT 4 的分步指南。 1. …

快手sig3 48位-unidbg

研究某手app的小伙伴都了解sig3有两个版本,低版本的是42位,高版本的48位。 废话不多说,先抓个包: 上一个当前最新版本的48位sig3,我们以搜索接口为例,效果如图: 在上面可以看到使用unidbg的方式…

【深度学习】计算机视觉(11)——Faster RCNN(工具篇)

文章目录 1 gcc编译报错1.1 错误提示“ld: cannot find -lm/-lc/-lpthread”1.2 解决方法:安装glibc工具1.3 解决方法:修改sources.list1.4 解决方法:软连接 2 Permission denied3 运行报错3.1 module tensorflow has no attribute 3.2 No mo…

火山 xl,xa,xg,xk,xh,xm 六神签名参数

火山 xl,xa,xg,xk,xh,xm 六神签名参数 27/100 发布文章 weixin_38819889 未选择任何文件 new 纯属技术研究,如有侵权,请联系删除。 抓个包,在火山最新的15.6版本中,已经新增加了2个参数x-helios,x-medusa 前段时间do…

IDEA Java 第一个mybatis入门程序

文章目录 准备mysql 开始新建maven项目maven添加引用mybatis配置文件工具类创建实例类添加mappermappermapper.xml 测试类 发现问题org.apache.ibatis.binding.BindingException: Type interface com.cpyy.mapper.UserMapper is not known to the MapperRegistry.The error may…

[计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

一、前言 这是本专栏的倒数第二篇文章了,为什么不是最后一篇?因为我要单独写一篇总结哈哈,不管怎么说,从今年的3.13的MVP变换开始写,写到现在,也是一个很大的工程了,我很高兴能在大二下学期的期…

使用ffmpeg拼接两张图片

最近在工作中遇到了一个需求,就是需要将两张图片拼接在一起,作为一个封面图。如果只是临时拼接一张,我们可以只用photoshop之类的图片编辑工具,将两张图片拼接在一起。而我们的需要是需要实现自动化,由于之前使用过ffm…

KALI入门到高级【第六章】

预计更新第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…