我曾经读过,对于不对齐的大小的块的写入可以产生额外的读取,我的意思是在Linux中的块设备上写入。为什么?我怎么看得到?
发布于 2018-12-03 16:52:35
块设备只能在其本机块对齐时被写入或读取,对于我所遇到的任何事情,都是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.10https://stackoverflow.com/questions/53355290
复制相似问题