【问题标题】:Unaligned writes on block devices块设备上的未对齐写入
【发布时间】:2018-11-17 20:30:01
【问题描述】:

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

【问题讨论】:

    标签: linux block-device


    【解决方案1】:

    块设备只能以它们的原生块对齐方式写入或读取,对于我所遇到的所有情况来说,这要么是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 2021-02-06
      • 2012-06-26
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      相关资源
      最近更新 更多