首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解iostat块测量

了解iostat块测量
EN

Unix & Linux用户
提问于 2019-09-10 08:38:41
回答 1查看 1.1K关注 0票数 1

我试图了解数据是如何写入磁盘的。我使用不同的块大小使用dd编写数据,但据iostat说,磁盘似乎总是被相同大小的块击中。例如,这个命令应该编写128 K块。

代码语言:javascript
复制
dd if=/dev/zero of=/dev/sdb bs=128K count=300000

iostat -dxm 1的裁剪输出:

代码语言:javascript
复制
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00 129897.00    0.00 1024.00     0.00   512.00  1024.00   142.09  138.81    0.00  138.81   0.98 100.00

我对此的解读是,它在1024个操作中编写了512 this。这意味着每次写= 512/1024 =512 K。

另一种计算相同事物的方法: avgrq-sz列显示1024个扇区。根据gdisk的说法,这款三星850 Pro SSD的扇区尺寸是512 B,因此每个写的是1024个扇区*512 B=512 K。

所以我的问题是,为什么它要写512 K块而不是用dd指定的128 K呢?如果我将dd更改为编写4M块,则iostat的结果完全相同。合并的数字对我也没有意义。

这是直接写入块设备;但是,如果我格式化它并写入文件系统,除了零合并之外,数字是相同的:

代码语言:javascript
复制
dd if=/dev/zero of=/mnt/ddtest bs=4M count=3000

现在iostat显示

代码语言:javascript
复制
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.00    0.00 1024.00     0.00   512.00  1024.00   142.31  138.92    0.00  138.92   0.98 100.00

顺便说一下,我用的是RHEL 7.7。

EN

回答 1

Unix & Linux用户

发布于 2019-09-10 10:08:16

如果不指定O_DIRECT,则I/O请求转到页面缓存。当将此写缓存写回设备时,内核在可能的情况下使用大型写操作。

(我不确定这些内容是否会被计算为合并后的写作。)

内核内存管理所生成的写操作的大小可以受到多个不同变量的限制。

特别是:为什么我的IO请求的大小被限制在512 K左右?

上面的链接有一个非常长的分析。但其结果是,当物理RAM变得支离破碎时,内核只能找到要使用的单个页面,而不是多个页面的物理连续运行。然后,个人IO的大小被“分散/收集列表”的最大大小所限制。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/539961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档