Answers:
不久前问我自己同样的问题,然后简单地执行以下操作:
用外壳几次将一个非常不寻常的字符串写入文件(类似于“ WackaWacka”),然后用十六进制转储(使用od)简单地搜索磁盘的实际内容,并检查是否存储了字符串的第一次出现恰好在4k块的开头
提示:不要使用编辑器-它可能会创建您不知道的临时文件,其中也可能包含字符串。这样做:
$ for i in 1 2 3 4 5 ...
> do
> echo "WackaWacka!"
> done > mytestfile
因此.sh_history可能包含搜索字符串,但不能连续5次;-)
然后,只需搜索:
# sync
# od -c /dev/sda | grep 'W a c k a'
好吧,最好在相当空的磁盘上完成操作,以免读取千兆字节的数据;-)
编写一个4k的块,并观察使用iostat
(“ Blk_read”,“ Blk_wrtn”列)读取/写入多少数据。如果数据未对齐,则写入将首先触发读取,并且将触发超过4k的写入。
你需要小心不要测量任何元数据更新,但...或者只是淹没出来通过制作4K写入1000 ....所以一定要确保没有其他扫描磁盘或举行公开的文件(我想lsof
会足够?),然后打开一个新文件,等待,运行iostat
,将4k写入文件,同步写入(或等待一会儿?),然后iostat
再次检查。
这似乎为我提供了合理的输出:
iostat -d /dev/hdb3
dd if=/dev/urandom of=/mount/path/ofhdb3/tmptest bs=4k count=10000 conv=fdatasync
iostat -d /dev/hdb3
Note iostat
的手册页声称报告了512字节的块,而我看到仅写入了80000个附加块,而没有读取任何块。如果您的对齐方式不正确,您将看到类似的读取次数(因为要写入未对齐的4k,需要读取受影响的两个块,对其进行变异并写回)。实际上,对齐很重要的唯一原因是避免进行此类读取(因此,这正是您要查找的内容:写入工作负载是否会触发读取?)