我已经读到 unaligned 大小的块的写入会引起额外的读取。我的意思是在Linux中的块设备上进行写入。为什么?我怎么看?
答案 0 :(得分:3)
块设备只能以其本机块对齐方式进行写入或读取,对于我所遇到的一切,它都是512字节或4096字节。您可以在sysfs中查看设备的块大小:
# cat /sys/block/sdb/queue/logical_block_size
512
为什么? NVMe,SCSI和ATA命令集根本不支持访问小于该范围的区域。 WRITE
命令的参数位于整数块中。
如果应用程序需要写入较小的区域或未对齐的区域,则内核会发出读取以填充空白,然后写入较大的块。例如,假设您需要在512字节块的中间写入256字节。内核将从磁盘读取整个512字节,合并数据以将其写入正确的位置,然后写入512字节的块。
一种监视系统上读写的简单方法是使用iostat
实用程序,该实用程序至少在Centos / RHEL上与sysstat
软件包一起包装。
[root@bb-cluster-4 md]# iostat -xyz 1
...
avg-cpu: %user %nice %system %iowait %steal %idle
32.29 0.00 7.61 0.00 0.00 60.10
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdd 0.00 0.00 1.00 0.00 4.00 0.00 8.00 0.00 1.00 1.00 0.00 1.00 0.10