3

我读过未对齐大小的块的写入会导致额外的读取。我的意思是在 Linux 中的块设备上写入。为什么?我怎么能看到它?

4

1 回答 1

3

块设备只能以其本机块对齐方式写入或读取,对于我所遇到的所有内容来说,这要么是 512 字节,要么是 4096 字节。您可以在 sysfs 中查看设备的块大小:

# cat /sys/block/sdb/queue/logical_block_size
512

为什么?NVMe、SCSI 和 ATA 命令集根本不支持访问比这更小的区域。该WRITE命令的参数是整数块。

如果应用程序需要写入较小的或未对齐的区域,则内核发出读取以填补空白,然后写出更大的块。例如,假设您需要在 512 字节块的中间写入 256 字节。内核将从磁盘读取整个 512 字节,合并您的数据以写入正确的位置,然后写入 512 字节块。

监视系统上的读取和写入的一种简单方法是使用该iostat实用程序,该实用程序sysstat至少在 Centos/RHEL 上与软件包一起打包。

[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
于 2018-12-03T16:52:35.397 回答