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

这个脚本重点观察几个系统调用的顺序和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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值