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