代码之家  ›  专栏  ›  技术社区  ›  Gilgamesz

块设备上未对齐的写入

  •  2
  • Gilgamesz  · 技术社区  · 7 年前

    我读过那篇文章 不结盟 大小会导致额外的读取。我的意思是Linux中块设备上的写入。为什么?我怎么能看到它?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Mike Andrews    7 年前

    块设备只能以其本机块对齐方式进行写入或读取,我所遇到的任何情况都是512字节或4096字节。您可以在sysfs中查看设备的块大小:

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

    为什么?NVMe、SCSI和ATA命令集根本不支持访问小于该值的区域。争论的焦点 WRITE

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

    监视系统读写的一种简单方法是 iostat 实用程序,它与 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
    
    推荐文章