我需要将大块数据移动到一个没有任何文件系统的逻辑卷。这样做时,我注意到每次写入都会有一次读取。这是我在写入常规文件时看不到的东西。我缩小到以下步骤:
### Creat logical volume
lvremove -f /dev/VolGroup1/data_test
lvcreate -L 100G -n data_test VolGroup1
### Start dumping data
nohup dd if=/dev/zero of=/dev/VolGroup1/data_test bs=1k count=100M &
### Check IO
iostat -h -d -k -N -y -j PATH -p /dev/VolGroup1/data_test 10 1
注意 dd 对该新卷的大量读取
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
dm-9
56900.60 110719.28 116882.72 1108300 1169996
有谁知道为什么会这样?底层系统是raid10的SSD。
LVM 似乎公开了最小 I/O 大小。如果您尝试写入小于此 I/O 大小(的倍数),则系统将首先读取增量以填充最后一个块,然后更新其内容并最终重写它。
虽然我无法查明关于此的确切文档,但我可以在Redhat找到参考资料:
一些搜索导致(这里使用 dm-1):
因此,如果对您来说,替换
dm-9
为还给出例如 4096 和 0,请使用 4k 的大小。或者,如果有 4096 和更大的值,则使用这个更大的值以获得最佳性能。因此,如果根据这些值增加
bs=
参数,则读取应该为零,写入速度将会提高。