这个脚本重点观察几个系统调用的顺序和pipe的读写情况,然后再准备个419M的大文件huge_dump.sql,在我们几十G内存的机器很容易在内存里放下:

$ sudo dd if=/dev/urandom of=huge_dump.sql bs=4096 count=102400 102400+0 records in 102400+0 records out 419430400 bytes (419 MB) copied, 63.9886 seconds, 6.6 MB/s

因为这个文件是用bufferio写的,所以它的内容都cache在pagecahce内存里面,不会涉及到磁盘。

好了,场景齐全了,我们接着来比较下二种情况下的速度,第一种管道:

# 第一种管道方式 $ time (cat huge_dump.sql|./b.out) real 0m0.596s user 0m0.001s sys 0m0.919s

从执行时间数看出来速度有3倍左右的差别了,第二种明显快很多。

是不是有点奇怪?好吧我们来从原来上面分析下,还是继续用数据说话:

这次准备个很小的数据文件,方便观察然后在一个窗口运行stap

$ echo hello > huge_dump.sql $ sudo stap test.stp :~ 0 bash(26570): -> sys_read 0 bash(26570): -> sys_read 0 bash(26570): -> sys_write 0 bash(26570): -> sys_read 0 bash(26570): -> sys_write 0 bash(26570): -> sys_close 0 bash(26570): -> sys_pipe 0 bash(26570): -> sys_pipe 0 bash(26570): -> do_fork 0 bash(26570): -> sys_close 0 bash(26570): -> sys_close 0 bash(26570): -> do_fork 0 bash(13775): -> sys_close 0 bash(13775): -> sys_read 0 bash(13775): -> pipe_read: file ino 20906911 0 bash(13775): -> pipe_readv: file ino 20906911 0 bash(13776): -> sys_close 0 bash(13776): -> sys_close 0 bash(13776): -> sys_close 0 bash(13776): -> do_execve 0 bash(26570): -> sys_close 0 bash(26570): -> sys_close 0 bash(26570): -> sys_close 0 bash(13775): -> sys_close 0 bash(26570): -> sys_wait4 0 bash(13775): -> sys_close 0 bash(13775): -> sys_close 0 b.out(13776): -> sys_close 0 b.out(13776): -> sys_close 0 bash(13775): -> do_execve 0 b.out(13776): -> sys_open 0 b.out(13776): -> sys_close 0 b.out(13776): -> sys_open 0 b.out(13776): -> sys_read 0 b.out(13776): -> sys_close 0 cat(13775): -> sys_close 0 cat(13775): -> sys_close 0 b.out(13776): -> sys_read 0 b.out(13776): -> pipe_read: file ino 20906910 0 b.out(13776): -> pipe_readv: file ino 20906910 0 cat(13775): -> sys_open 0 cat(13775): -> sys_close 0 cat(13775): -> sys_open 0 cat(13775): -> sys_read 0 cat(13775): -> sys_close 0 cat(13775): -> sys_open 0 cat(13775): -> sys_close 0 cat(13775): -> sys_open 0 cat(13775): -> sys_read 0 cat(13775): -> sys_write 0 cat(13775): -> pipe_write: file ino 20906910 0 cat(13775): -> pipe_writev: file ino 20906910 0 cat(13775): -> sys_read 0 b.out(13776): -> sys_read 0 b.out(13776): -> pipe_read: file ino 20906910 0 b.out(13776): -> pipe_readv: file ino 20906910 0 cat(13775): -> sys_close 0 cat(13775): -> sys_close 0 bash(26570): -> sys_wait4 0 bash(26570): -> sys_close 0 bash(26570): -> sys_wait4 0 bash(26570): -> sys_write

linux重定向文件过大,Linux大文件重定向和管道的效率对比总结相关推荐

  1. linux服务器清除cdn,Linux服务器中查找并删除大文件的五种方法,Linux系统清除文件内容的命令分享...

    很多时候,在处理Linux终端中的文件时,您可能希望清除文件的内容,而无需使用任何Linux命令行编辑器打开它.怎么能实现这一目标?在本文中,我们将借助一些有用的命令,通过几种不同的方式清空文件内容. ...

  2. linux 大文件编辑sed,Linux高级文本处理工具之sed(一)

    sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器.能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模 ...

  3. linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...

    原文数据: 无 具体要求: 1. 模拟Linux的dd命令快速创建大文件 代码实现: # -*- coding: utf-8 -*- """ # # Authors: l ...

  4. linux dd 截文件,Linux使用dd命令快速生成大文件(转)

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  5. linux中split分割文件打开方式,Linux系统下使用split命令分割大文件 (转载)

    [小蜗牛闲情之作 ] 我想给一个朋友传一个大视频,有几百M,尝试多种传输办法失败后,最后想到的是把视频切开一片片"邮递"过去给他,让它自己组装起来吧. [root@pps publ ...

  6. linux覆盖文件如何还原_大数据笔试真题集锦---第十九章Linux面试题

    我会不间断的更新,维护,希望可以对正在找大数据工作的朋友们有所帮助. 第十九章目录 第十九章 Linux 19.1 Linux中.如何调整文件最大打开数 修改linux的软硬件限制文件/etc/sec ...

  7. Linux 查看磁盘容量、查找大文件、查找大目录

    Linux 查看磁盘容量.查找大文件.查找大目录 磁盘统计 查看磁盘使用情况 df -h 文件统计 查找/home 目录下大于800M的文件 find /home -type f -size +800 ...

  8. Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置

    Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置 grep [选项]... PATTERN [FILE]... grep -C N,(N代表一个整数)是搜索关键字出现位置,并且 ...

  9. linux系统下以存储从大到小并以K,M,G为单位的方式查看当前目录下的文件信息

    前言 ls命令 ls -a ls -l ll du命令 du -s du -s * du -s * | sort -nr 我的DIY_Bash 在linux任意位置都可以使用这个目录下的脚本 注意 前 ...

最新文章

  1. 常用jQuery ajax代码片段
  2. UIUC翟成祥教授:用文本透镜拓展人类智能
  3. C++读取mysql中utf8mb4编码表数据乱码问题及UTF8转GBK编码
  4. 玩转数据结构从入门到进阶三
  5. UML建模之时序图(Sequence Diagram)
  6. 通过nginx链接mysql事务问题_nginx-关于phpmysql的事务
  7. java 刷新界面_利用java如何实现在删除信息后刷新页面功能
  8. Android笔记 使用AIDL和远程服务实现进程通信
  9. Redis缓存穿透、缓存雪崩、并发问题分析与解决方案
  10. Xcode10:library not found for -lstdc++.6.0.9 临时解决
  11. 复习:关于类的继承和构造函数
  12. AutoCAD2007 快捷键介绍和线形设置
  13. 计算机工作面试需要准备什么,视频面试手机还是电脑 面试前的准备工作要做好...
  14. 软件架构之分层模式 Layered Architecture
  15. spring-cloud(十一)GateWay强大的路由谓词(断言)功能
  16. 小麦苗数据库巡检脚本,支持Oracle、MySQL、SQL Server和PG等数据库
  17. 京东云无线宝可以服务器吗,京东云无线宝哪种上网方式收益最高,这点你一定得知道...
  18. 粉条要经过什么检查才符合315?
  19. php银行卡账户类型查询接口
  20. [oeasy]python0110 屏幕点阵字体_3x5_5x7_雅达利字库

热门文章

  1. matlab从入门到精通-常用的几种缺失值处理方法
  2. 深度学习核心技术精讲100篇(五十三)-机器学习中的隐私保护
  3. 深度学习核心技术精讲100篇(四十九)-深度学习之关联规则
  4. tableau实战系列(十八)-通过可视化实现购物篮关联分析( Market Basket Analysis),关联物品之间的关联关系
  5. java带参数的构造方法_崤云说 | JAVA面向对象
  6. Python编程基础:第二十节 函数Function
  7. 有哪些通俗易懂的例子可以解释 IaaS、PaaS、SaaS 的区别?
  8. 读阿里亿级日活网关通道架构演进有感
  9. ASIHTTPRequest类库简介和使用说明
  10. 【推荐系统】推荐系统整体框架概览