linux文件写入磁盘时间,linux – 解释/ proc / diskstats中的读取,写入和总IO时间

我没有查看源代码,但似乎差异源于两种不同的会计模式.

#4和#8字段汇总了每个请求完成的时间.这意味着并行发出的请求仍然有助于使计数增长.

#10字段仅计算队列和磁盘繁忙的实际时间,因此它们将并行发出的请求计为单个请求.

让我们举一个实际的例子.在/ boot分区上,我写了一个~4 MB的文件.看看统计数据:

[root@localhost boot]# cat /proc/diskstats | grep sda1

8 1 sda1 46256 0 255703 19332 2063 0 4162 538 0 11207 19862

[root@localhost boot]# dd if=initramfs-0-rescue-7dc32e3935ba4ce1ae50a0a8170e4480.img of=/dev/null

84099+1 records in

84099+1 records out

43058701 bytes (43 MB) copied, 0.347783 s, 124 MB/s

[root@localhost boot]# cat /proc/diskstats | grep sda1

8 1 sda1 46342 0 339807 23011 2063 0 4162 538 0 11551 23540

[root@localhost boot]#

读取文件需要~0.35s,或~350ms.然而,#4和#10的反应方式反应非常不同:第一次增加约4000,而后者只增加约350.很容易看出它具有“正确”值:它是第10场,正如我们所知道的那样dd表示整个操作耗时约350ms,而#10场则增加了相同的量.

那么,为什么#4领域增长如此之多,以及它真正衡量的是什么?

首先,让我们了解请求级别发生了什么.默认情况下,dd使用512B请求,但linux pagecache的工作粒度为4KB,因此我们应该期待大约1000 x 4KB的请求.这1000个请求被放入一个队列并逐个发出(为简单起见,让我们假装NCQ不存在)并分派到磁盘.由于机械磁盘非常适合顺序读取,因此它们通常使用预读策略 – 即:它们读取的数据多于所需数据.这意味着,在第一个4K请求完成后,所有其他后续请求将在很短的时间内提供.

让我们做一些数学运算,通过大量的简化:

>请求数:1000(所有请求同时进入队列)

>第一次请求完成的时间:4ms

>所有后续请求完成的时间:0ms(是的,我告诉过你这是一个疯狂的简化)

按字段#4测量的总请求时间:1000个队列内请求*每个4ms == 4000ms.这大致是#4领域增加的价值……

底线:

>字段#4和#8从单个请求的角度测量服务I / O请求所花费的时间,将其乘以请求数

>字段#10告诉您I / O路径中使用的实际经过时间(“挂钟”)

绘制一个approssimative并行:想到多核CPU.两个进程可以同时锤击CPU,每个进程执行60秒.使用的总CPU时间为120秒(60秒* 2),但实际经过的时钟时间总计为60秒,因为两个进程同时运行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值