zoukankan      html  css  js  c++  java
  • bcc-tools工具之runqlat

    runplat的作用在调度性能分析这块十分的重要,其作用是主要检测一个tasks从运行队列中到运行需要等待的时延。

    老样子,先从help说起:

    usage: runqlat.py [-h] [-T] [-m] [-P] [--pidnss] [-L] [-p PID]
                      [interval] [count]
    
    Summarize run queue (scheduler) latency as a histogram
    
    positional arguments:
      interval            output interval, in seconds   #输出间隔时间
      count               number of outputs             #输出次数
    
    optional arguments:
      -h, --help          show this help message and exit
      -T, --timestamp     include timestamp on output   #时间戳
      -m, --milliseconds  millisecond histogram      # 毫秒形式线上
      -P, --pids          print a histogram per process ID  #显示每一个进程PID的时延情况的矩形图
      --pidnss            print a histogram per PID namespace #显示每一个
      -L, --tids          print a histogram per thread ID  #显示每一个线程ID的柱形图
      -p PID, --pid PID   trace this PID only         #仅跟踪某一个pid的时延·

    ./runqlat -m 5 3

    以每5秒的形式时延情况,一共线上三次

    Tracing run queue latency... Hit Ctrl-C to end.
    
         msecs               : count     distribution
             0 -> 1          : 3818     |****************************************|
             2 -> 3          : 39       |                                        |
             4 -> 7          : 39       |                                        |
             8 -> 15         : 62       |                                        |
            16 -> 31         : 2214     |***********************                 |
            32 -> 63         : 226      |**                                      |
    
         msecs               : count     distribution
             0 -> 1          : 3775     |****************************************|
             2 -> 3          : 52       |                                        |
             4 -> 7          : 37       |                                        |
             8 -> 15         : 65       |                                        |
            16 -> 31         : 2230     |***********************                 |
            32 -> 63         : 212      |**                                      |
    
         msecs               : count     distribution
             0 -> 1          : 3816     |****************************************|
             2 -> 3          : 49       |                                        |
             4 -> 7          : 40       |                                        |
             8 -> 15         : 53       |                                        |
            16 -> 31         : 2228     |***********************                 |
            32 -> 63         : 221      |**                                      |

    ./runqlat -mp 4505 1

    仅显示pid为4505的时延,并且每1毫秒线上一次。

    Tracing run queue latency... Hit Ctrl-C to end.
    
         msecs               : count     distribution
             0 -> 1          : 1        |*                                       |
             2 -> 3          : 2        |***                                     |
             4 -> 7          : 1        |*                                       |
             8 -> 15         : 0        |                                        |
            16 -> 31         : 25       |****************************************|
            32 -> 63         : 3        |****                                    |
    
         msecs               : count     distribution
             0 -> 1          : 0        |                                        |
             2 -> 3          : 2        |**                                      |
             4 -> 7          : 0        |                                        |

    为了对比,这里采用pidstat指令跟踪下其cpu消耗情况

    pidstat -p 4505 1
    Linux 4.4.0-virtual (bgregg-xxxxxxxx)     02/08/2016     _x86_64_    (8 CPU)
    
    08:56:11 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
    08:56:12 AM     0      4505    9.00    3.00    0.00   12.00     0  bash
    08:56:13 AM     0      4505    7.00    5.00    0.00   12.00     0  bash
    08:56:14 AM     0      4505   10.00    2.00    0.00   12.00     0  bash
    08:56:15 AM     0      4505   11.00    2.00    0.00   13.00     0  bash
    08:56:16 AM     0      4505    9.00    3.00    0.00   12.00     0  bash

    从上面的对比可以看出,pid为4505的进程,只利用了12%cpu,其余时间其都在运行队列中等待被运行(不考虑睡眠问题)

    ./runqlat 5 1
    Tracing run queue latency... Hit Ctrl-C to end.
    
         usecs               : count     distribution
             0 -> 1          : 2250     |********************************        |
             2 -> 3          : 2340     |**********************************      |
             4 -> 7          : 2746     |****************************************|
             8 -> 15         : 418      |******                                  |
            16 -> 31         : 93       |*                                       |
            32 -> 63         : 28       |                                        |

    同样为了分析,什么样的时延才是我们需要的,其实是希望时延越小越好,所以希望矩形图处于0-1区间的数目越多越好。

    ./runqlat -P

    显示每一个进程的矩形图

    pid = 0
         usecs               : count     distribution
             0 -> 1          : 351      |********************************        |
             2 -> 3          : 96       |********                                |
             4 -> 7          : 437      |****************************************|
             8 -> 15         : 12       |*                                       |
    pid = 12929
         usecs               : count     distribution
             0 -> 1          : 1        |****************************************|
             2 -> 3          : 0        |                                        |
             4 -> 7          : 1        |****************************************|
    pid = 12930
         usecs               : count     distribution
             0 -> 1          : 0        |                                        |
             2 -> 3          : 0        |                                        |
             4 -> 7          : 0        |                                        |
             8 -> 15         : 0        |                                        |
            16 -> 31         : 1        |****************************************|
    pid = 12931
         usecs               : count     distribution
             0 -> 1          : 0        |                                        |
             2 -> 3          : 0        |                                        |
             4 -> 7          : 1        |********************                    |

    ./runqlat -L

    显示每一个线程ID的矩形图

    tid = 0
         usecs               : count     distribution
             0 -> 1          : 593      |****************************            |
             2 -> 3          : 829      |****************************************|
             4 -> 7          : 300      |**************                          |
             8 -> 15         : 321      |***************                         |
            16 -> 31         : 132      |******                                  |
            32 -> 63         : 58       |**                                      |
            64 -> 127        : 0        |                                        |
           128 -> 255        : 0        |                                        |
           256 -> 511        : 13       |                                        |
    
    tid = 7
         usecs               : count     distribution
             0 -> 1          : 8        |********                                |
             2 -> 3          : 19       |********************                    |
             4 -> 7          : 37       |****************************************|
    [...]

    ./runqlat --pidnss -m

    显示每一个进程的命名空间,并且打印其矩形图

    pidns = 4026532870
         msecs               : count     distribution
             0 -> 1          : 40       |****************************************|
             2 -> 3          : 1        |*                                       |
             4 -> 7          : 0        |                                        |
             8 -> 15         : 0        |                                        |
            16 -> 31         : 0        |                                        |
            32 -> 63         : 2        |**                                      |
            64 -> 127        : 5        |*****                                   |
    
    pidns = 4026532809
         msecs               : count     distribution
             0 -> 1          : 67       |****************************************|
  • 相关阅读:
    python基础(二)
    python基础(一)
    SQL的四种连接-左外连接、右外连接、内连接、全连接
    mysql常用操作
    jenkins邮件通知功能
    mysql常用命令
    SQL优化法则小记
    架构漫谈
    今日头条的成功史
    python连接mysql数据库简单例子
  • 原文地址:https://www.cnblogs.com/haoxing990/p/12178807.html
Copyright © 2011-2022 走看看