块设备上未对齐的写入

时间:2018-11-17 20:30:02

标签: linux block-device

我已经读到 unaligned 大小的块的写入会引起额外的读取。我的意思是在Linux中的块设备上进行写入。为什么?我怎么看?

1 个答案:

答案 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