【操作系统】聊聊文件传输的零拷贝、PageCache、异步IO机制

在目前主流的系统中,其实大多数都是数据密集型系统,所以设计数据密集型应用一书非常经典,推荐一读。而大多数遇到的问题都是存储问题。CPU、内存 因为本身的读写速度比较快,所以磁盘就成为了一个性能瓶颈。

针对磁盘优化的技术层出不穷,比如零拷贝、直接IO、异步IO、PageCache等,本质都是为了提升系统的吞吐量、降低操作时延。减少磁盘和CPU设备的工作量。

文件传输过程

假设,我们请求从服务端下载文件,服务端的整体处理流程是 用户进程从本地磁盘获取文件,然后将文件通过socket缓冲区发送到网络中,如果一个文件是320MB,一次拷贝32KB的话,那么整体就是拷贝1W次。
而从图中可以分析出一次文件拷贝 从用户态到内核态切换了4次。

  • 1.用户态发起read文件,切换到内核态,然后从磁盘中读取文件到pageCache中。
  • 2.内核态返回数据到用户态的用户缓冲区中。
  • 3.用户态调用write写入到socket缓冲区中。
  • 4.最后返回结果切回用户态。

而如果一次文件拷贝是4次的话,那么整体就是4W次。放在高并发系统下,虽然一次可能需要几十纳秒到几微秒。但是当请求数在几十万、百万级别的情况下,这个情况会被放大。

可以很容易分析出,问题的瓶颈在于用户态到内核态的上下文切换以及内存拷贝次数过多。
在这里插入图片描述

零拷贝

上面我们通过分析,其实性能瓶颈主要在于文件的拷贝次数,以及多次的上下文切换。

上下文切换的原因主要在于,调用read、write函数,需要系统函数进行处理。如果想减少上下文切换次数,可以将read、write进行合并,在内核中直接完成数据的交换。

减少内存拷贝次数,多余的地方在于,从pageCache到用户缓冲区,以及用户缓冲区到socket缓冲区。

优化点1. 直接从pagecache拷贝到socket缓冲区。这样整个过程就只有3次拷贝、2次上下文切换。
在这里插入图片描述
而如果网卡支持DMA技术,可以直接从pagecache写入到网卡中。只有2次拷贝。
在这里插入图片描述
所以总结一下,零拷贝的本质是通过减少上下文切换以及在用户态0次数据拷贝 以及来提升整体的文件读写性能。
而零拷贝技术是系统提升的新函数,可以接受文件描述符和TCP socket作为输入参数,可以完全在内核态完成数据的拷贝,减少了系统上下文切换,也减少了内存拷贝次数。

可以最大化利用socket缓冲区。socket缓冲区可用空间是动态变化的。
零拷贝让我们可以不必关心socket缓冲区的大小。将性能提升至少一倍以上。

PageCache

pagechache的作用主要是为了提升从磁盘读取数据的速度,并且可以采用预读功能,比如读一个文件1MB,先读取前64KB,那么后64KB也会写入到PageCahce中,并且pageCache有一定的时间局部性,以及数据淘汰策略,LRU。

但是针对于大文件读取,因为有预读功能,所以可能大文件会占满pageCache,导致小文件不能利用PageCache。所以大文件场景下不应该使用PageCahe和零拷贝。

异步IO+直接IO

那么针对大文件来说,一般采用异步IO和直接IO替换零拷贝技术。

如果是同步进行IO的话,整个过程用户进程其实是一直阻塞等待,不能很好的利用系统的并发性。
在这里插入图片描述
而异步IO,在发起读之后,直接返回,由内核准备好数据之后,通知用户进行进行操作,在整个过程中,不需要完全阻塞等待。
但是异步IO是不支持将数据写入到pageCache中。绕过pageCache称为直接IO。对于磁盘,异步IO只支持直接IO。
在这里插入图片描述

所以针对于大文件由异步IO和直接IO处理,小文件由零拷贝处理。至于文件阈值需要灵活配置。

小结

本篇主要介绍了零拷贝技术,零拷贝通过减少上下文切换次数,以及数据拷贝次数,提升整体的文件读写能力。并且还利用PageCache 来提升从磁盘读取文件的性能。而pageCache缓冲了最近访问的数据,并且有自己的数据淘汰策略。LRU。进一步提升了零拷贝技术。pageCache还提升了整体的写性能,先将数据写入到PageCache中,然后将数据异步到磁盘。
不对针对于大文件来说,建议直接使用异步IO+直接IO。
所以总结一下,为了提升文件传输的性能。基本上就是三个点。减少磁盘的工作量(pageCache缓存)、减少CPU的工作量(直接IO)
、提高内存利用率(零拷贝)。

并且很多中间件技术也通过零拷贝来提升性能,比如Kakfa、Netty等。

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

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

相关文章

Harbor 私有仓库迁移

文章目录 一.私有仓库迁移的介绍1.为何要对Harbor 私有仓库的迁移2.Harbor 私有仓库的迁移特点3. Harbor 私有仓库的迁移注意要点 二.私有仓库迁移配置1.源Harbor配置(192.168.198.11)(1)接着以下操作查看容器状况及是否可以登录 …

C语言之数组题

目录 1.使用函数实现数组操作 2.冒泡排序 3.三子棋 4.【一维数组】交换数组 5.扫雷 6.概念辨析tips 我又来了,今天是数组题,本人还在补军训真的热!🆗 1.使用函数实现数组操作 2.冒泡排序 3.三子棋 4.【一维数组】交换数组 …

Windows10 系统安装教程

多虚不如少实。 一、 下载安装包 下载前景:网上下载的 windows10 系统一般都有捆绑软件,用户体验不爽,所以建议到 正规渠道下载 windows10 系统的不同版本。另外网上也有一些 windows10 系统的镜像文件 可以直接一键安装,…

科技政策 | 四川省科学技术厅关于发布2024年第一批省级科技计划项目申报指南的通知

原创 | 文 BFT机器人 近日,四川省科学技术厅发布了2024年第一批省级科技计划项目申报指南;其中包括自然科学基金项目、重点研发计划、科技成果转移转化引导计划、科技创新基地(平台)和人才计划。 01 自然科学基金项目 实施周期 …

YOLOv5引入FasterNet主干网络,目标检测速度提升明显

目录 一、背景介绍1.1 目标检测算法简介1.2 YOLOv5简介及发展历程 二、主干网络选择的重要性2.1 主干网络在目标检测中的作用2.2 YOLOv5使用的默认主干网络 三、FasterNet简介与原理解析3.1 FasterNet概述3.2 FasterNet的网络结构3.2.1 基础网络模块3.2.2 快速特征融合模块3.2.…

打造互动体验:品牌 DTC 如何转变其私域战略

越来越多的品牌公司选择采用DTC 模式与消费者进行互动,而非仅仅销售产品。通过与消费者建立紧密联系,DTC模式不仅可以提供更具成本效益的规模扩张方式,还能够控制品牌体验、获取宝贵的第一方数据并提升盈利能力。然而DTC模式的经济模型比许多…

【C++】—— 异常处理

前言: 本期,我将给大家讲解的是有关 异常处理 的相关知识! 目录 (一)C语言传统的处理错误的方式 (二)C异常概念 (三)异常的使用 1、异常的抛出和捕获 1️⃣ 异常的…

【LeetCode-中等题】98. 验证二叉搜索树

文章目录 题目方法一:BFS 层序遍历方法二: 题目 方法一:BFS 层序遍历 利用层序遍历 拿到每一个节点 并且给每一个结点配备一个最大值和最小值的队列 只要节点在最大值和最小值之间就满足二叉搜索树的条件 public boolean isValidBST(TreeNo…

三电平离网逆变器接不平衡负载仿真

文章目录 **0、系统框图****1、纯阻性负载R****2、纯感性负载L****3、纯容性负载C****4、 RL负载****5、RC负载****6、CL负载****7、RLC负载** 0、系统框图 闭环控制 PWM调制 逆变桥 LCL滤波电路 负载(可配置) 坐标变换(采样得到)…

HTTP:http上传文件的原理及java处理方法的介绍

为了说明原理&#xff0c;以下提供一个可以上传多个文件的例子&#xff0c;html页面代码如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>http upload file</title> </head> <body>…

《存储IO路径》专题:IO虚拟化初探

大家好&#xff0c;欢迎来到今天的科技小课堂。今天我们要聊聊的是一项非常有趣且实用的技术——I/O虚拟化&#xff08;Input/Output Virtualization&#xff0c;简称IOV&#xff09;。想象一下&#xff0c;如果把物理硬件资源比作一道丰盛的大餐&#xff0c;那么IOV就是那位神…

【VRRP】虚拟路由冗余协议

什么是VRRP&#xff1f; 虚拟路由冗余协议VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种用于提高网络可靠性的容错协议。通过VRRP&#xff0c;可以在主机的下一跳设备出现故障时&#xff0c;及时将业务切换到备份设备&#xff0c;从而保障网络通信的…

SQL注入之联合查询

文章目录 联合查询是什么&#xff1f;联合查询获取cms账号密码尝试登录 联合查询是什么&#xff1f; 适用数据库中的内容会回显到页面中来的情况。联合查询就是利用union select 语句&#xff0c;该语句会同时执行两条select 语句&#xff0c;实现跨库、跨表查询。 必要条件 两…

电商API接口的研发和应用!

API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;指的是为不同的软件应用程序提供编程接口的一组协议、规则以及工具的集合&#xff0c;以便它们能够互相交互&#xff0c;实现数据通信和功能调用。API已成为了现代软件开发和商业应用…

countDown+react+hook

道阻且长&#xff0c;行而不辍&#xff0c;未来可期 知识点一&#xff1a; new Date().getTime()可以得到得到1970年01月1日0点零分以来的毫秒数。单位是毫秒 new Date().getTime()/1000获取秒数1分钟60秒&#xff0c;1小时60分钟1hour:60*60>单位是秒 60*60*1000>单位…

Gin 框架入门实战系列(一)

GIN介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错 借助框架开发,不仅可以省去很多常用的封装带来的时间,…

Java项目-苍穹外卖-Day05-Redis技术应用

1.店铺营业状态设置 需求分析和设计 左上角要求是有回显的 所以至少两个接口 1.查询营业状态接口&#xff08;分为了管理端和用户端&#xff09; 2.修改营业状态接口 因为管理端和用户端路径不同&#xff0c;所以现在是至少三个接口的 可以发现如果存到表里除了id只有一个…

Kafka3.0.0版本——Leader故障处理细节原理

目录 一、服务器信息二、服务器基本信息及相关概念2.1、服务器基本信息2.2、LEO的概念2.3、HW的概念 三、Leader故障处理细节 一、服务器信息 三台服务器 原始服务器名称原始服务器ip节点centos7虚拟机1192.168.136.27broker0centos7虚拟机2192.168.136.28broker1centos7虚拟机…

智慧矿山2.0:煤矿智能化综合管理AI大数据监管平台建设方案设计

一、行业背景 能源与煤矿是我国国民经济的重要物质生产部门和支柱产业之一&#xff0c;同时也是一个安全事故多发的高危行业&#xff0c;施工阶段的现场管理对工程成本、进度、质量及安全等至关重要。煤矿智能化既是未来趋势&#xff0c;更是产业发展需求&#xff0c;建设智慧…

vue2.6及以下版本导入 TDesign UI组件库

TDesign 官方文档:https://tdesign.tencent.com/vue/components/button 我们先打开一个普通的vue项目 然后 如果你是 vue 2.6 或者 低于 2.6 在终端执行 npm i tdesign-vue如果你是 2.7 或者更高 执行 npm i tdesign-vuenaruto这里 我们 以 2.6为例 因为大部分人 用vue2 都是…