当前位置:网站首页 > 技术博客 > 正文

linuxtap



iostat命令详解

iostat命令是Linux系统上查看I/O性能最基本的工具,其全称为 I/O statistics。iostat能统计磁盘活动情况,也能统计CPU使用情况。 iostat属于sysstat软件包,可以通过命令进行安装:

iostat数据的来源是Linux操作系统的/proc/diskstats:

注意,procfs中的前三个字段:主设备号、从设备号、设备名。

从第四个字段开始,介绍的是该设备的相关统计:

iostat有以下缺陷:

例如,iostat -d -x -k 1 3:每1s采集一次数据,显示3次,以kb为单位显示磁盘使用情况详细信息。

使用iostat后,结果面板如下:

iostat结果面板 avg-cpu 描述的是系统cpu使用情况:

iostat结果面板 Device 项描述的是系统磁盘使用情况:

命令:

输出结果:

结果说明:

IO请求的队列长度,反映了系统磁盘任务处理的繁忙程度,该值越大,表示排队等待处理的IO请求越多。 平均队列长度的计算: 我们考虑如下的场景,如果同一时间来了250个IO请求,后续再也没有新的请求到来。这种情况下,每个请求处理时间都是4ms,那么所有IO的平均等待时间为:

对于我们的例子来说,平均等待时间是 500ms,那么所有IO花费的总时间为250*500 = ms,这个时间除以1000ms,得到 125,即平均队列长度。 这个值很明显是符合直观的。排在队列最前端的IO认为,队列的长度是0,第2个IO认为队列的长度是1,第3个IO认为队列的长度是2,最后一个认为队列的长度是249。

await是单个I/O所消耗的时间,包括硬盘设备处理I/O的时间和I/O请求在kernel队列中等待的时间:

正常情况下队列等待时间可以忽略不计:

这个值,多大算正常呢? 对于SSD,从0.0x毫秒到1.x毫秒不等,具体看产品手册。 对于机械硬盘,大致来说一万转的机械硬盘是8.38毫秒,包括寻道时间、旋转延迟、传输时间。 关于await的一个误区是,人们常常武断地认为,await值比较高,就认为磁盘性能差,其实,await这个值不能反映硬盘设备的性能。 我们考虑两种IO的模型:

第一种情况await高达500ms,第二个情况await只有4ms,但是都是同一块盘。 在实践中,要根据应用场景来判断await是否正常,如果I/O模式很随机、I/O负载比较高,会导致磁头乱跑,寻道时间长,那么相应地await要估算得大一些;如果I/O模式是顺序读写,只有单一进程产生I/O负载,那么寻道时间和旋转延迟都可以忽略不计,主要考虑传输时间,相应地await就应该很小,甚至不到1毫秒。 对磁盘阵列来说,因为有硬件缓存,写操作不等落盘就算完成,所以写操作的service time大大加快了,如果磁盘阵列的写操作不在一两个毫秒以内就算慢的了;读操作则未必,不在缓存中的数据仍然需要读取物理硬盘,单个小数据块的读取速度跟单盘差不多。

5.3 Օ/h3>

趁示该设备有I/O(即非空闲)的时间比率,不考虑I/O有多少,只考虑有没有。

很多初学者看到Թ等于100%就说硬盘能力到顶了,这种说法是错误的。

由于现代硬盘设备都有并行处理多个I/O请求的能力,所以墌使达到100%也不意味着设备饱和了,举个简化的例子:

可见,即使鿱达100%,硬盘也仍然有可能还有余力处理更多的I/O请求,即没有达到饱和状态。那么iostat有没有哪个指标可以衡量硬盘设备的饱和程度呢?很遗憾,没有。

版权声明


相关文章:

  • ubuntu win10双硬盘双系统2025-09-07 07:00:59
  • java 网络编程基础2025-09-07 07:00:59
  • 树莓派4b版本区别2025-09-07 07:00:59
  • select case语句举例2025-09-07 07:00:59
  • mathtype破解版下载2025-09-07 07:00:59
  • java集合详解以及底层实现2025-09-07 07:00:59
  • left join 和where from能共用2025-09-07 07:00:59
  • 思科模拟器单臂路由实验2025-09-07 07:00:59
  • 迈迪三维软件工具集2025-09-07 07:00:59
  • assert断言对象为null2025-09-07 07:00:59