我很想知道我们的一个储物盒可能会出现什么问题。 用一个简单的fio脚本,我使用bs = 1M和直接= 1来testing随机写入。 SSD是连接到LSI HBA(3Gbit / s端口)的Samsung 840pro。
这是我在FreeBSD 9.1下得到的结果:
WRITE: io=13169MB, aggrb=224743KB/s, minb=224743KB/s, maxb=224743KB/s, mint=60002msec, maxt=60002msec
无论同步设置为0还是1。
在linux上,这是sync = 0的结果:
WRITE: io=14828MB, aggrb=253060KB/s, minb=253060KB/s, maxb=253060KB/s, mint=60001msec, maxt=60001msec
并且同步= 1:
WRITE: io=6360.0MB, aggrb=108542KB/s, minb=108542KB/s, maxb=108542KB/s, mint=60001msec, maxt=60001msec
我的理解是,因为我在原始块设备上运行,所以O_SYNC不应该有任何区别 – 没有文件系统,任何屏障,写入和驱动器之间的任何东西。 尤其是在设置了O_DIRECT | O_SYNC的情况下。
有任何想法吗?
作为参考,这里是我正在testing的fio脚本:
[global] bs=1M ioengine=sync iodepth=4 size=16g direct=1 runtime=60 filename=/dev/sdh sync=1 [rand-write] rw=randwrite stonewall
Linux内核开发人员Christoph Hellwig通过电子邮件回答了Zoltan在Linux块设备上的O_SYNC :
对于在Linux上使用O_SYNC的消费者磁盘确实有很大的不同,因为它在完成后刷新磁盘写入caching,以确保O_SYNC保证数据已经达到物理存储。
看来FreeBSD可能会缺less这个调用。