dd 测试出来的写速度比读速度更大 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
DjvuLee
V2EX    Linux

dd 测试出来的写速度比读速度更大

  •  
  •   DjvuLee Jul 25, 2014 4557 views
    This topic created in 4295 days ago, the information mentioned may be changed or developed.
    time dd if=/dev/zero bs=10k count=1000000 of=/1Gb.file 测出来的纯写速度为944MB/s
    time dd if=/1Gb.file bs=10k |dd of=/dev/null 测试出来的纯读速度只有420MB/s

    一般而言,不应该是写的速度比读的速度慢吗?
    18 replies    2014-07-26 12:09:11 +08:00
    Earthman
        1
    Earthman  
       Jul 25, 2014
    写有缓存,读一般不会缓存那么多
    你试试写一个超过空闲内存大小的文件,后面一定慢下来;你这个944MB/s基本就是内存的带宽了
    读一些比较小的文件,第一次会比较慢,马上再读,飞一般的速度

    你丫当初没学操作系统么?
    satanwoo
        2
    satanwoo  
       Jul 25, 2014
    @Earthman 不一定吧,说不定他这是连续写和随机读呢,跟缓存就没关系了。
    sNullp
        3
    sNullp  
       Jul 25, 2014   1
    @Earthman 内存带宽应该远远不止1G/s
    xinglp
        4
    xinglp  
       Jul 25, 2014   1
    不用管道呢
    DjvuLee
        5
    DjvuLee  
    OP
       Jul 25, 2014
    @Earthman 大哥,首先感谢你的回答。但是你有必要粗言粗语吗?您要是精通操作系统,内存的带宽这种常见参数还不清楚?您说内存带宽是944MB/s,您是在开玩笑吗?
    我考虑过缓存,我以为bs指定的就是缓存,当然我可能没仔细看。
    DjvuLee
        6
    DjvuLee  
    OP
       Jul 25, 2014
    @satanwoo 同一个文件,怎么可能是连续写和随机读呢?
    satanwoo
        7
    satanwoo  
       Jul 25, 2014
    @DjvuLee 我的意思是,同一个文件不一定是连续存放呢。。你写的时候可以连续写呀。我是这个意思。
    satanwoo
        8
    satanwoo  
       Jul 25, 2014
    @DjvuLee 哦,你是写完以后立刻读,那我搞错了,不好意思。。
    DjvuLee
        9
    DjvuLee  
    OP
       Jul 25, 2014
    @xinglp 你的说法是正确的,是用管道导致的。多谢!
    DjvuLee
        10
    DjvuLee  
    OP
       Jul 25, 2014
    @satanwoo 嗯,也很感谢你的回答。
    gqlxj1987
        11
    gqlxj1987  
       Jul 25, 2014
    有参数,是不用缓存,直接写磁盘的
    Earthman
        12
    Earthman  
       Jul 25, 2014
    @sNullp 千奇百怪的系统,还真有这个带宽的系统
    Earthman
        13
    Earthman  
       Jul 25, 2014
    @DjvuLee 我是怀着好意回复的,我这里不认为以上回复有任何带有歧视或者骂人的文字。可能由于地域差异,有理解上的不同。你跑OS,跑了一些任务当然体现出较低的内存速率。如果直接DMA操作,那就是真实的内存带宽,不过这是不合适的
    msg7086
        14
    msg7086  
       Jul 25, 2014
    fdatasync
    DjvuLee
        15
    DjvuLee  
    OP
       Jul 25, 2014
    @Earthman 那不好意思,可能确实地域不同,理解有差别。
    DjvuLee
        16
    DjvuLee  
    OP
       Jul 25, 2014   1
    本着学习的态度,我把这个问题总结下来:

    通常情况下,写肯定是会比慢的,但是之所以出现这种我测出的结果,确实是由于管道导致。

    抛开管道这个问题,读和写的速度都太高了,不正常,这个是由于dd的用法导致的。我上面测出来的方法是dd只是把任务交给os,但是os还没有保证已经完成读写任务的情况下,dd就返回了完成时间,所以导致速度偏高,解决方法是添加fdatasync。

    另外,附上一篇文章,关于用dd来磁盘速度: https://romanrm.net/dd-benchmark
    tonyluj
        17
    tonyluj  
       Jul 25, 2014
    看了一下dd的源码
    dd是直接调用read,write是直接write
    里面有个buffer,也就是LZ指定的bs,其他的完全交给OS
    因为write和read都有cache

    要想cache的作用最小化,直接给open()指定O_DIRECT就可以了
    DjvuLee
        18
    DjvuLee  
    OP
       Jul 26, 2014
    @tonyluj 赞严谨!总结中确实没说清。确实bs是指定用户空间的缓存大小。不指定O_DIRECT,使用标准的文件访问方式,指定了则使用直接IO访问方式,没有kernel的缓存。
    About     Help     Advertise     Blog     API     FAQ     Solana     5869 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 06:32 PVG 14:32 LAX 23:32 JFK 02:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86