写入原始设备时获取读取信息

写入原始设备时获取读取信息

我需要将大量数据移动到没有任何文件系统的逻辑卷。在执行此操作时,我注意到每次写入都会有一次读取。这是我在写入常规文件时看不到的。我缩小到以下步骤:

### 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

有人知道为什么会发生这种情况吗?底层系统是 SSD 的 raid10。

答案1

看来 LVM 公开了最小 I/O 大小。如果您尝试写入小于(倍数)此 I/O 大小的内容,则系统将首先读取增量以填充最后一个块,然后更新其内容并最终重写它。

虽然我无法找到关于此内容的确切文档,但我可以找到参考资料红帽

LVM 还将检测设备的“I/O 提示”。设备数据区域的起始位置将是 sysfs 中公开的“minimum_io_size”或“optimal_io_size”的倍数。如果“optimal_io_size”未定义(0),则使用“minimum_io_size”。默认情况下,LVM 将自动确定这些“I/O 提示”,但可以通过 lvm.conf 的“data_alignment_detection”禁用此功能。不建议禁用此功能。

一些搜索结果(这里使用 dm-1):

$ grep ^ /sys/class/block/dm-1/queue/*_io_size
/sys/class/block/dm-1/queue/minimum_io_size:4096
/sys/class/block/dm-1/queue/optimal_io_size:0

因此,如果您替换为,dm-9例如,结果为 4096 和 0,则使用 4k 的大小。否则,如果有 4096 和更大的值,请使用这个更大的值以获得最佳性能。

因此,如果按照这些值增加bs=参数,则读取速度应该为零,并且写入速度将会提高。

相关内容