Linux - 怎么实现大文件传输
一 前言
博文《PageCache》中介绍了 PageCache 的优缺点,其实在处理大文件中 PageCache 作用反而没有那么好。所以本文介绍 Linux 是怎么处理大文件的。
二 起因
首先看一下一个 read() 系统调用流程发生了什么,如下图:
- 当调用 read 方法时,会阻塞着,此时内核会向磁盘发起 I/O 请求。
- 磁盘收到请求后,便会寻址,当磁盘数据准备好后,就会向内核发起 I/O 中断,告知内核磁盘数据已经准备好。
- 内核收到 I/O 中断后,就将数据从磁盘控制器缓冲区拷贝到 PageCache 里。
- 最后,内核再把 PageCache 中的数据拷贝到用户缓冲区,于是 read 调用返回。
从上图不难发现两个问题:1,这是一个同步 I/O;2,数据多次拷贝。通常分别采用 异步 I/O 和 直接 I/O 来优化上面的问题。
三 异步 I/O、 直接 I/O
异步 I/O 是指发起 I/O 请求后,不再阻塞等待。而是先去处理其他任务,当拷贝完成后再进行处理。
异步 I/O 并没有涉及到 PageCache,所以使用异步 I/O 就意味着要绕开 PageCache。
绕开 PageCache 的 I/O 叫直接 I/O,使用 PageCache 的 I/O 则叫缓存 I/O。通常,对于磁盘,异步 I/O 只支持直接 I/O。
如下图:
- 内核向磁盘发起读请求,但是可以不等待数据就位就可以返回,于是进程此时可以处理其他任务。
- 当内核将磁盘中的数据拷贝到进程缓冲区后,进程将接收到内核的通知,再去处理数据。
四 总结
针对大文件的传输的方式,应该使用「异步 I/O + 直接 I/O」来替代零拷贝技术。常见的两种 直接 I/O 应用场景:
- 如在 MySQL 数据库中,是使用直接 I/O的。应用程序已经实现了磁盘数据的缓存,那么可以不需要 PageCache 再次缓存,减少额外的性能损耗。
- 传输大文件的时候,由于大文件难以命中 PageCache 缓存,而且会占满 PageCache 导致「热点」文件无法充分利用缓存,从而增大了性能开销,因此,这时应该使用直接 I/O。
Linux - 怎么实现大文件传输相关推荐
- Linux、Windows都适用的跨国传输、大文件传输软件:飞驰传输
随着"走出去"战略的实施,中国越来越多的企业走向国外,跨国企业将是大的潮流和趋势.跨国企业的分支机构遍及全球各地,员工来自多个国家,使用不同的语言.由于各地IT基础设施建设水平和使 ...
- linux 传输大文件大小,Linux大文件传输(转)
我们经常需要在机器之间传输文件.比如备份,复制数据等等.这个是很常见,也是很简单的.用scp或者rsync就能很好的完成任务.但是如果文件很大,需要占用一些传输时间的时候,怎样又快又好地完成任务就很重 ...
- linux系统中的文件传输
Linux系统中的文件传输 1 实验环境 2 scp命令 3 rsync命令 3.1 rsync和scp命令对比 3.2 rsync命令用法 4 文件的归档压缩 4.1 文件归档 4.2 文件压缩 4 ...
- 查看服务器大文件,linux 查看服务器大文件
linux 查看服务器大文件 内容精选 换一换 当创建文件系统后,您需要使用云服务器来挂载该文件系统,以实现多个云服务器共享使用文件系统的目的.本章节以Windows 2012版本操作系统为例进行NF ...
- 大文件传输软件的优势有哪些?-镭速传输
互联网时代,大数据传输是企业面临的必不可免的问题,可以选择传统的FTP.网盘等方式来传输,对于小型文件或许是有优势的:但是对于大型文件数据的话,也许会出现传输速度慢,数据不可靠的情况,极大的影响了企业 ...
- 基于TCP的大文件传输c语言项目
文章目录 前言:功能实现 tcp文件传输的基本过程: 1.用户登录 1.1创建数据库 2.文件普通下载和上传的实现: 2.1 普通下载 2.2 普通上传 2.3 文件秒上传的实现 2.断点下载和断点上 ...
- Socket网络程序设计(4) ———— 实现linux和windows的文件传输
用TCP/TP进行网际互连(4) ---- 实现linux和windows的文件传输 1.实现要求 · 在循环面向连接的程序基础上,利用tcp完成linux和windows平台的文件传输 · 对服务器 ...
- 如何快速清空 Linux 中的大文件
本文总结了几种快速清空Linux中的大文件方法,快来看看对你有帮助吗? 1. 通过重定向到null清空文件内容 使用 shell 重定向null(不存在的对象)到文件的最简单方法来清空文件内容 # & ...
- Linux如何查找大文件或目录总结
在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件 ...
最新文章
- iOS-UIButton防止重复点击(三种办法)
- 全国省份和城市数组2
- linux ssh 报错 Write failed: Broken pipe 解决方法
- python3.5下载-python3.5.2官方下载
- nginx中的数组结构ngx_array_t
- “SQL Server does not allow remote connections”错误的解决
- 抽取+生成:一种基于背景知识的参考感知网络对话模型
- 对PostgreSQL SPI例子的学习
- linux驱动文件操作简单介绍
- sql怎么撤回update_腾讯SQL“现役运动员”给你的实践小技巧
- 简单解决XP共享连接数10限制(转)
- Springboot Bean Validation校验框架
- iOS开发之--改变系统导航的颜色,字体,还有返回样式的自定义
- shell脚本启动语法错误syntax error near unexpected token '{
- Webpack SourceMap快速定位错误位置
- mysql安装ecshop_ECSHOP安装流程
- LZJ流体质量计算机价格,LZJ-ⅢC型流体质量计算机选编.doc
- Description Resource Path Location Type Cannot change version of project fac(导入maven项目出现红叉问题)...
- 淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。
- NUnit 入门知识
热门文章
- 天下事以难而废者十之一,以惰而废者十之九。(南北朝 颜之推 《颜氏家训》)...
- Premiere 新建项目导入视频后 视频花屏解决办法
- 排列数 A(n, m) 与组合数 C(n, m) 的求法
- C51---12 AT24C02 (I2C总线)
- 网线的选择对网络速度有什么影响?
- 关于CCRC信息安全服务资质认证概念
- 计算机组成原理形成性考核作业,电大本科计算机组成原理形成性考核册答案
- Grafana的Worldmap使用,添加Mysql 数据源
- 2022年全球与中国偏光成像相机市场现状及未来发展趋势
- Android - 接口回调 interface(类外部接口)