zoukankan      html  css  js  c++  java
  • iostat 用于输出 CPU 和磁盘 I/O 相关的统计信息。

    iostat 用于输出 CPU 和磁盘 I/O 相关的统计信息。
     
    命令格式:
         iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ][ device [...] | ALL ] [ -p [ device | ALL ] ] [ interval [ count ]]
     
     
    1) iostat 命令的简单使用
        iostat 命令可以显示 CPU 和 I/O 系统的负载情况及分区状态信息。
        直接执行 iostat 命令可以显示下面的内容:
     
    # iostat
     
    # iostat -xm 
    (带 xm 参数显示扩展信息并将磁盘数据有每扇区改为每兆显示【1扇区等于512字节】)
    Linux 2.6.33.3 ((none))   12/17/10
     
    avg-cpu:   %user     %nice    %system    %ioswait   %stcal    %idle
                      0.05        0.00        2.00              0.03        0.00      97.92
    Device:     rrqm/s         wrqm/s     r/s     w/s     rMB/s    wMB/s   
     
     
     
    各项输出项目的含义如下:
     
    avg-cpu 段:
    %user:  在用户级别运行所使用 CPU 的百分比。
    %nice:  nice 操作所使用 CPU 的百分比。
    %sys: 在系统级别(kernel)运行所使用 CPU 的百分比。
    %iowait: CPU等待硬件 I/O 时,所占用 CPU 百分比。
    %idle:  CPU 空闲时间的百分比。
     
    Device段:
    tps:每秒钟发送到的 I/O 请求数
    Blk_read/s:每秒读取的 block 数
    Blk_wrtn/s:每秒写入的 block 数
    Blk_read:读入的 block 总数
    Blk_wrtn:写入的 block 总数
     
     
    2) iostat 命令的参数说明
    iostat 各个参数说明:
     
    -c  仅显示 CPU 统计信息。与 -d 选项互斥。
    -d  仅显示磁盘统计信息。与 -c 选项互斥。
    -k  以 K 为单位显示每秒的磁盘请求数,默认单位块。
    -p device | ALL
         与 -x 选项互斥,用于显示块设备及系统分区的统计信息,也可以在 -p 后指定一个设备名,如:
              # iostat -p hda
         或显示所有设备:
               # iostat -p ALL
    -t  在输出数据时,打印收集数据的时间。
    -V  打印版本号和帮助信息。
    -x  输出扩展信息。
     
     
    3) iostat 命令输出项目说明
     
    Blk_read  读入块的总数
    Blk_wrtn  写入块的总数
    kB_read/s  每秒从驱动器读入的数据量,单位为 K。
    kB_wrtn/s  每秒向驱动器写入的数据量,单位为 K。
    kB_read  读入的数据总量,单位为 K。
    kB_wrtn  写入的数据总量,单位为 K。
    wrqm/s  将写入请求合并后,每秒发送到设备的写入请求数。
    r/s  每秒发送到设备的读入请求数。
    w/s  每秒发送到设备的写入请求数。
    rsec/s  每秒从设备读入的扇区数。
    wsec/s  每秒向设备写入的扇区数。
    rkB/s  每秒从设备读入的数据量,单位为 K。
    wkB/s  每秒向设备写入的数据量,单位为 K。
    avgrq-sz  发送到设备的请求的平均大小,单位是 扇区。
    avgqu-sz  发送到设备的请求的平均队列长度。
    await  I/O 请求平均执行时间,包括发送请求和执行的时间。单位是 毫秒。
    svctm  发送到设备的 I/O 请求的平均执行时间。单位是 毫秒。
    %util  在 I/O 请求发送到设备期间,占用 CPU 时间的百分比。用于显示设备的带宽利用率。
              当这个值接近 100% 时,表示设备带宽已经占满。
     
     

    IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法。存在的目的有两个,一是提高IO吞吐量,二是降低IO响应时间。然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平衡这两者,IO调度器提供了多种调度算法来适应不同的IO请求场景。其中,对数据库这种随机读写的场景最有利的算法是DEANLINE。接着我们按照从简单到复杂的顺序,迅速扫一下Linux 2.6内核提供的几种IO调度算法。

    1、NOOP NOOP算法的全写为No Operation。该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作。之所以说“大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求。 假设有如下的io请求序列: 100,500,101,10,56,1000 NOOP将会按照如下顺序满足: 100(101),500,10,56,1000

    2、CFQ CFQ算法的全写为Completely Fair Queuing。该算法的特点是按照IO请求的地址进行排序,而不是按照先来后到的顺序来进行响应。 假设有如下的io请求序列: 100,500,101,10,56,1000 CFQ将会按照如下顺序满足: 100,101,500,1000,10,56在传统的SAS盘上,磁盘寻道花去了绝大多数的IO响应时间。CFQ的出发点是对IO地址进行排序,以尽量少的磁盘旋转次数来满足尽可能多的IO请求。在CFQ算法下,SAS盘的吞吐量大大提高了。但是相比于NOOP的缺点是,先来的IO请求并不一定能被满足,可能会出现饿死的情况。

    3、DEADLINE DEADLINE在CFQ的基础上,解决了IO请求饿死的极端情况。除了CFQ本身具有的IO排序队列之外,DEADLINE额外分别为读IO和写IO提供了FIFO队列。读FIFO队列的最大等待时间为500ms,写FIFO队列的最大等待时间为5s。FIFO队列内的IO请求优先级要比CFQ队列中的高,,而读FIFO队列的优先级又比写FIFO队列的优先级高。优先级可以表示如下: FIFO(Read) > FIFO(Write) > CFQ

    4、ANTICIPATORY CFQ和DEADLINE考虑的焦点在于满足零散IO请求上。对于连续的IO请求,比如顺序读,并没有做优化。为了满足随机IO和顺序IO混合的场景,Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上,为每个读IO都设置了6ms的等待时间窗口。如果在这6ms内OS收到了相邻位置的读IO请求,就可以立即满足。

    IO调度器算法的选择,既取决于硬件特征,也取决于应用场景。 在传统的SAS盘上,CFQ、DEADLINE、ANTICIPATORY都是不错的选择;对于专属的数据库服务器,DEADLINE的吞吐量和响应时间都表现良好。然而在新兴的固态硬盘比如SSD、Fusion IO上,最简单的NOOP反而可能是最好的算法,因为其他三个算法的优化是基于缩短寻道时间的,而固态硬盘没有所谓的寻道时间且IO响应时间非常短。

    查看和修改IO调度器的算法非常简单。假设我们要对sda进行操作,如下所示: cat /sys/block/sda/queue/scheduler echo “cfq” > /sys/block/sda/queue/scheduler

  • 相关阅读:
    hrbust1279
    U盘快捷方式中毒处理办法
    计算几何
    poj1113
    凸包模版
    STL容器
    HDU2048
    HDU2047
    HDU2045
    python面试题总结
  • 原文地址:https://www.cnblogs.com/luoyx/p/2492141.html
Copyright © 2011-2022 走看看