CPU:别再拿我当搬砖工!

来源 | 编程技术宇宙

责编 | 晋兆雨
封图 | CSDN 下载自视觉中国

数据搬运工

Hi,我是CPU一号车间的阿Q,有段日子没见面了。

还记得上回说到咱们厂里用上了DMA技术(太慢不能忍!CPU又拿硬盘和网卡开刀了!)之后,我们总算解放了,再也不用奔波于网卡、硬盘与内存之间搬运数据了。

前段时间,我到二号车间虎子那里去串门,发现他正忙的满头大汗。

“老哥,你这是接到什么任务了?看把你给你忙的”

虎子一看我过来,擦了擦头上的汗说到:“我这是在搬运数据啊,刚刚搬完一批,累死我了”

我有些疑惑:“咱们现在不是有DMA技术了吗,找外包DMA控制器搬运啊,你干嘛还亲自上阵?”

“DMA是用于I/O外部设备与内存之间搬运数据,我现在的任务是内存之间的复制拷贝工作,这DMAC也帮不上什么忙啊,还不得我亲自动手复制。”

我瘪了瘪嘴,“也是,但愿我不要接到这种任务”

“先不跟你聊了,又有活要干了”,虎子屁股还没坐热,又起身去忙了,我也起身准备回去。

“我靠!怎么又要拷贝这批数据!”,我刚走两步,就听到虎子的吐槽。

我回过头去问到:“咋了这是?”

“我刚才才把这份数据从内核地址空间往用户态地址空间拷贝了一次,这还没喘口气,又让我再搬一次从用户态再搬回内核地址空间,太折腾我了吧!”

我拍了拍他的肩膀说到:“嗨,这没办法,咱们就是打工的,哪轮得到咱们挑挑拣拣啊,加油吧!”

我一边给他打气,一边暗自祈祷别给我安排这种活,又累有没有技术含量。

天有不测风云,回到一号车间没多久,我也摊上这种事了。老话说得好,真是怕什么来什么。

一开始我还能忍着,时间一久我就抑制不住心里的不满了,还真是落在自己身上才知道痛。


数据的四次拷贝

第二天,我约上虎子去找操作系统内存管理部门反应这事。

内存管理部门居然踢皮球,说这事不归他们管,让我们找I/O部门,没办法,我们又来到I/O部门反应这事。

I/O部门的人听完我们的抱怨,也很无奈:“两位,实在不是我们故意戏耍你们。之前让你们两次搬运数据实在没有办法,这是上边的应用程序要这样写的。他们要把硬盘上的文件读取出来,然后再通过网卡发送出去。这一读一写的不就要搬两次吗?”

File.read(file, buf, len);
Socket.send(socket, buf, len);

“硬盘?网卡?这,这,这我们不是有了DMA技术了吗,正好解决了和他们的数据传输,干嘛还另外让我们再在内存之间复制来复制去呢?”,我问到。

对方看出了我们的疑惑,在旁边的白板上画了一张图:

“你们看,数据从硬盘最终到网卡,因为有应用程序的参与,他们需要先读到他们在用户空间的缓存区,再发送出去,这样就总共有四次数据的传输。其中从硬盘到内核空间和从内核空间到网卡这两个环节,DMAC可以帮你们搬运。不过剩下两次的用户空间和内核空间的来回拷贝,这还得靠你们来搬运下啊”

“原来是这样,唉,看来是没办法避免了,咱先回去吧”,虎子看完图垂头丧气的说到。

我却不愿放弃,想在这图中找出可以优化改进的地方。

“能不能让数据不要去应用程序那里,直接在内核空间复制一次就好,我们就可以少搬运一次了?”,我抛出了一个问题。

“那怎么可能呢,他不读上去,后面怎么发出去呢?不行不行”,I/O部门的人连连摇头。

“还是可以发啊,你看像这样···反正最后也是把数据从内核空间交给网卡发,只是免去了数据去用户空间白晃一圈的浪费”,我把他画的图改了一下,不肯放弃解释到。

对方被我的话点醒了一般,眼珠左右转动,反复思考。

片刻之后,回到:“还是不行,万一人家要对读取的文件数据进行修改,或者解密,那还是得读到他的用户空间缓存区才行”

我想了一下,这似乎没办法避免,说到:“那这种情况咱们就认了,反正以我的经验来看,你说的这种情况不多。大部分情况下都是数据原封不动的从内核到用户空间,又从用户空间回到内核。”

I/O部门的人再也没有什么说辞,点了点头答应了下来,说把我们的意见汇报到Linux帝国高层讨论后才能做决定。我们就先回去等消息了。


零拷贝技术

不过后来工作太忙,迟迟没有操作系统那边的消息,慢慢的我们就把这事给淡忘了,直到前几天······

“阿Q,听说了吗,最近Linux帝国新成立了一个公司,居然绕过我们CPU就能把数据从网卡写入硬盘中”,虎子火急火燎的来找我。

“不可能啊,按照我们之前的方案,怎么说也得至少经过我们拷贝一次吧”

“根本不用,他们号称是零拷贝技术

我们赶紧放下手里的工作,去打听下究竟怎么回事。

原来,Linux帝国最近新推出了一个API,叫sendfile

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

只需要指定打开文件的描述符和要发送的网络接口描述符,就直接实现了把文件通过网络发出去。

我们再次来到了操作系统I/O部门,对方一看是我们,热情的接待了我们。

“你们来的正好,我还没来得及告诉你们呢。上次你们提的思路非常好,帝国高层非常重视,我一反应上去,当即就采纳了你们的意见。这不你们估计也知道了,推出了新的API给应用程序们使用,省去了数据白白去用户空间转一圈的开销。一推出就大受欢迎,说起来还得感谢你们呢”

“原来是这样,我说最近怎么搬运数据的工作少了不少。不过你们是怎么做到零拷贝的?”

I/O部门的人瞅了我们几眼,得意的一笑,“帝国高层在讨论你们的方案时,觉得还可以再进一步优化,直接把从硬盘读取到的数据缓冲区地址和长度给到网络socket描述符,就不用你们再搬运一次数据,彻底解放你们,所以叫零拷贝啦!”

我俩连连点头称赞。

“还没完呢!咱Linux帝国还把这一技术推广到了文件数据复制上,增加了另一个API:splice,以后文件拷贝也可以减轻你们的负担了”

ssize_t splice(int fd_in, loff_t *off_in, int fd_out,loff_t *off_out, size_t len, unsigned int flags);我俩回去之后,把这一消息告知了全厂,大家都高兴坏了,原来各个车间都受苦久矣。


彩蛋1

在遥远的Windows帝国上。

“部长,听说Linux帝国推出了一个sendfile,号称零拷贝”

“有这回事?咱们不能落后,赶紧去研究一下”


彩蛋2

Linux帝国新来了一家公司,专注网络数据包分析业务。

“老大,数据包每次都要经过Linux帝国协议栈部门处理一遍才能拿到,这太慢了”

“能不能绕开协议栈,直接抓包?”

预知后事如何,请关注后续精彩······

更多推荐阅读

三次改变世界、却被无情出局的程序员

赠书 | SkyWalking 观测 Service Mesh 技术大公开

垃圾回收策略和算法,看这篇就够了

无代码火了,短板有哪些?

地方政府争夺试点,互联网巨头参与测试,央行数字货币指日可待

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

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

相关文章

用函数计算搭建页面的前端CICD系统,提升访问体验

场景描述 传统动静不分离的产品架构,随着访问量在增长,性能会成为瓶颈。在这种情况下,用户可以通过利用OSS和CDN对网站进行架构优化,做到网站文件的动静分离,提升用户访问体验,实现成本可控。本方案使用函…

构建电商网站业务安全系统,防止“薅羊毛”

构建电商网站业务安全系统,防止“薅羊毛” 2020-02-19 新零售安全 场景描述 业务运营活动是电商行业开展业务必不可少的手段,但大流量带来的系统可用性、优惠券带来的“薅羊毛”等问题屡见不鲜,都会影响到运营效果、甚至出现负面影响。阿里云…

data.name.toLowerCase() is not a function问题

文章目录1. 现象2. 分析3. 解决方案1. 现象 Error in v-on handler: "TypeError: suffixs[i].toLowerCase is not a function" 2. 分析 主要原因是.toLowerCase()方法需要前面是字符串类型 3. 解决方案 案例: (data.name ) .toLowerCase()源码 修改…

云服务器ECS使用限制概览,让你的上云少走一些坑

限制概述 使用云服务器ECS有下列限制: 不支持安装虚拟化软件和二次虚拟化(例如安装使用VMware Workstation)。仅弹性裸金属服务器和超级计算集群支持二次虚拟化。不支持声卡应用。不支持直接加载外接硬件设备(如硬件加密狗、U盘…

Tomcat 架构原理解析到架构设计借鉴

来源 | 码哥字节Tomcat 架构原理解析到架构设计借鉴Tomcat 发展这么多年,已经比较成熟稳定。在如今『追新求快』的时代,Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌生人』,难道说如今就没有必要深入学习它了么?学习…

“智慧停车+智慧交通”提高市民出行效率和体验

公司介绍 我们是一家智慧停车公司,专注于专业停车场技术研发以及技术服务。主营业务是专业停车场技术研发。 我们公司提出先进的“智慧停车智能交通”解决方案,以大数据平台架构、人工智能技术及软硬件集成融合,通过产品技术创新与商业模式创…

@webservice报错org.apache.cxf.common.i18n.UncheckedException: No operation was found with

文章目录1. 现象2. 解决办法13. 解决办法21. 现象 整合springcxf的webservice,成功发布了wsdl,但在调用的时候报错 org.apache.cxf.common.i18n.UncheckedException: No operation was found with; 2. 解决办法1 : 在service接口中添加targetNamespace package com.gblfy.s…

“校园安全+教务管理+家校互动+教育大数据”创造安全的家校生态环境

公司介绍 我们主营业务为线上教育,旨在开创“物联网校园安全教务管理学习资源家校互动教育大数据”业务模式,创造更加安全和谐的家校生态环境。我们公司需要参照国外总公司系统开发一套国内业务系统。 客户痛点 我们作为国内新注册的公司,对未…

Web 前端,易学难精,没有拿手的实战项目,怎么办?

今年受经济下行与疫情叠加的影响,毕业生有800多万,就业形势十分严峻,但即便如此,Web 前端人才在软件开发行业的就业市场中依旧供小于求,目前,全国总缺口每年大约为近百万人。行业对前端需求量持续增加&…

快速入门容器服务,创建Kubernetes集群

使用须知 创建集群过程中,容器服务会进行如下操作: 创建 ECS,配置管理节点到其他节点的 SSH 的公钥登录,通过 CloudInit 安装配置 Kubernetes 集群。 创建安全组,该安全组允许 VPC 入方向全部 ICMP 端口的访问。 如果…

spring5.x cxf3.4.x 服务端和客户端 非maven版本

文章目录一、资料准备1. 官网链接2. 解压3. 依赖梳理二、spring集成cxf2.1.创建spring项目2.2. 创建接口2.3. impl2.4. spring-cxf.xml2.5. 客户端2.6. 开源项目一、资料准备 1. 官网链接 http://cxf.apache.org/download.html 下载apache-cxf-3.4.5.zip 2. 解压 3. 依赖梳…

2019年中国IaaS公有云市场排名及份额出炉

来源 | 艾瑞咨询随着政府、企业的数字化转型如火如荼地推进,云服务作为国家数字经济产业的“基座”,正日益彰显出其重要的战略意义。尽管基础算力和网络的供给已较为充分,但云服务正在使这些IT基础资源更加普惠化,让数字红利流向…

专有网络(VPC)的六大应用场景

专有网络(VPC)是完全隔离的网络环境,配置灵活,可满足不同的应用场景。 托管应用程序 您可以将对外提供服务的应用程序托管在VPC中,并且可以通过创建安全组规则、访问控制白名单等方式控制Internet访问。您也可以在应用…

应用配置管理ACM 使用场景快速入门

本文以一个例子介绍了如何使用 ACM 的命名空间(Namespace)功能,为应用在测试、预生产和生产环境下的同一个配置设置不同的值。 背景信息 在本示例任务中,我们将使用 ACM 的命名空间(Namespace)功能&#xf…

三本毕业!入职华为!年薪200万!他凭什么?

前几天,华为第二批“天才少年”入选名单更新了,随之登上知乎的是这样一个热搜:“如何看待武昌理工学院2009级本科生张霁入选华为“天才少年“计划并且年薪位于最高档?”从三本到年薪200万的高薪offer,张同学堪称是读书…

利用云数据库 MongoDB ,为你的业务创建单节点实例

本文以一个例子介绍了如何使用 ACM 的命名空间(Namespace)功能,为应用在测试、预生产和生产环境下的同一个配置设置不同的值。 背景信息 在本示例任务中,我们将使用 ACM 的命名空间(Namespace)功能&#xf…

互联网、电商及游戏行业实时BI分析方案

场景描述 本文以电商行业为例,将业务数据和日志数据同步到ADB,之后通过Quick BI做实时可视化分析。相对于传统的关系型数据库,阿里云分析型数据库MySQL版只需要几毫秒的时间,即可查询PB级数据并从中找到匹配信息。 解决问题 互联…

数据平台、大数据平台、数据中台……傻傻分不清?这次终于有人讲明白了!

来源 | 智领云科技造概念,在IT行业可不是一件陌生的事儿,中文博大精深,新名词、新概念往往简单准确,既可以被大众接受,又可以被专家把玩,真正做到雅俗共赏、各有趣味。近年来,数据中台之火爆&am…

Github 2023-12-25开源项目周报 Top15

根据Github Trendings的统计,本周(2023-12-25统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目7Go项目2非开发语言项目2Dart项目1TypeScript项目1Rust项目1Kotlin项目1 GPT-Engineer: 自然语言编…

如何通过云解析DNS,5步帮你实现邮箱解析

概述 邮箱解析是通过将域名指向邮箱的服务器地址,实现邮箱的收发邮件服务。 前提条件 联系您的邮箱提供商,获取邮箱需要配置的解析记录。 添加解析操作步骤 1 . 联系邮箱提供商,获取邮箱解析需要配置的解析记录。以阿里云邮箱做示意&…