
1 Earthman Jul 25, 2014 写有缓存,读一般不会缓存那么多 你试试写一个超过空闲内存大小的文件,后面一定慢下来;你这个944MB/s基本就是内存的带宽了 读一些比较小的文件,第一次会比较慢,马上再读,飞一般的速度 你丫当初没学操作系统么? |
4 xinglp Jul 25, 2014 不用管道呢 |
5 DjvuLee OP @Earthman 大哥,首先感谢你的回答。但是你有必要粗言粗语吗?您要是精通操作系统,内存的带宽这种常见参数还不清楚?您说内存带宽是944MB/s,您是在开玩笑吗? 我考虑过缓存,我以为bs指定的就是缓存,当然我可能没仔细看。 |
11 gqlxj1987 Jul 25, 2014 有参数,是不用缓存,直接写磁盘的 |
13 Earthman Jul 25, 2014 @DjvuLee 我是怀着好意回复的,我这里不认为以上回复有任何带有歧视或者骂人的文字。可能由于地域差异,有理解上的不同。你跑OS,跑了一些任务当然体现出较低的内存速率。如果直接DMA操作,那就是真实的内存带宽,不过这是不合适的 |
14 msg7086 Jul 25, 2014 fdatasync |
16 DjvuLee OP 本着学习的态度,我把这个问题总结下来: 通常情况下,写肯定是会比慢的,但是之所以出现这种我测出的结果,确实是由于管道导致。 抛开管道这个问题,读和写的速度都太高了,不正常,这个是由于dd的用法导致的。我上面测出来的方法是dd只是把任务交给os,但是os还没有保证已经完成读写任务的情况下,dd就返回了完成时间,所以导致速度偏高,解决方法是添加fdatasync。 另外,附上一篇文章,关于用dd来磁盘速度: https://romanrm.net/dd-benchmark |
17 tonyluj Jul 25, 2014 看了一下dd的源码 dd是直接调用read,write是直接write 里面有个buffer,也就是LZ指定的bs,其他的完全交给OS 因为write和read都有cache 要想cache的作用最小化,直接给open()指定O_DIRECT就可以了 |