linux概念之/proc详解2

http://blog.chinaunix.net/uid-1835494-id-3070465.html   proc/x:1/sched

/proc/sched_debug
/proc/schedstat 总
/proc/pid/schedstat 分
/proc/pid/sched

[root@250-shiyan 27227]# cat sched
mfsmount (27227, #threads: 13)
---------------------------------------------------------
se.exec_start                      :    4298337843.907125
se.vruntime                        :       4714787.554887
se.sum_exec_runtime                :            23.716516
se.wait_start                      :             0.000000
se.sleep_start                     :    4298337843.907125
se.block_start                     :             0.000000
se.sleep_max                       :             1.655287
se.block_max                       :             0.000000
se.exec_max                        :             1.003137
se.slice_max                       :             3.550532
se.wait_max                        :             0.310097
se.wait_sum                        :             0.745722
se.wait_count                      :                   11
se.iowait_sum                      :           494.469927
se.iowait_count                    :                  131
sched_info.bkl_count               :                    1
se.nr_migrations                   :                    0
se.nr_migrations_cold              :                    0
se.nr_failed_migrations_affine     :                    0
se.nr_failed_migrations_running    :                    0
se.nr_failed_migrations_hot        :                    0
se.nr_forced_migrations            :                    0
se.nr_wakeups                      :                    1
se.nr_wakeups_sync                 :                    1
se.nr_wakeups_migrate              :                    0
se.nr_wakeups_local                :                    1
se.nr_wakeups_remote               :                    0
se.nr_wakeups_affine               :                    0
se.nr_wakeups_affine_attempts      :                    0
se.nr_wakeups_passive              :                    0
se.nr_wakeups_idle                 :                    0
avg_atom                           :             2.371651
avg_per_cpu                        :             0.000001
nr_switches                        :                   10
nr_voluntary_switches              :                    2
nr_involuntary_switches            :                    8
se.load.weight                     :                71755
policy                             :                    0
prio                               :                  101
clock-delta                        :                  135

[root@250-shiyan 27227]# cat schedstat
23716516 745722 10
[root@250-shiyan 27227]# cat /proc/schedstat
version 15
timestamp 9130051710
cpu0 0 0 90294274 19486189 49453373 49453373 5270546755145 379982355396 70804217
[root@250-shiyan 27227]# cat /proc/sched_debug
Sched Debug Version: v0.09, 2.6.32-431.el6.x86_64 #1
now at 4835548701.686494 msecs
  .jiffies                                 : 9130215997
  .sysctl_sched_latency                    : 5.000000
  .sysctl_sched_min_granularity            : 1.000000
  .sysctl_sched_wakeup_granularity         : 1.000000
  .sysctl_sched_child_runs_first           : 0.000000
  .sysctl_sched_features                   : 3183
  .sysctl_sched_tunable_scaling            : 1 (logaritmic)

cpu#0, 3092.974 MHz
  .nr_running                    : 1
  .load                          : 1024
  .nr_switches                   : 90292999
  .nr_load_updates               : 21243167
  .nr_uninterruptible            : 0
  .next_balance                  : 9130.216230
  .curr->pid                     : 1037
  .clock                         : 4834502548.387724
  .cpu_load[0]                   : 1024
  .cpu_load[1]                   : 512
  .cpu_load[2]                   : 256
  .cpu_load[3]                   : 128
  .cpu_load[4]                   : 64
  .yld_count                     : 0
  .sched_switch                  : 0
  .sched_count                   : 90296954
  .sched_goidle                  : 19487350
  .avg_idle                      : 994034
  .ttwu_count                    : 49454858
  .ttwu_local                    : 49454858
  .bkl_count                     : 706

cfs_rq[0]:/
  .exec_clock                    : 5263171.784834
  .MIN_vruntime                  : 0.000001
  .min_vruntime                  : 5035599.468468
  .max_vruntime                  : 0.000001
  .spread                        : 0.000000
  .spread0                       : 0.000000
  .nr_spread_over                : 7543
  .nr_running                    : 1
  .load                          : 1024
  .load_avg                      : 0.000000
  .load_period                   : 0.000000
  .load_contrib                  : 0
  .load_tg                       : 0

rt_rq[0]:/
  .rt_nr_running                 : 0
  .rt_throttled                  : 0
  .rt_time                       : 0.000000
  .rt_runtime                    : 950.000000

runnable tasks:
            task   PID         tree-key  switches  prio     exec-runtime         sum-exec        sum-sleep
----------------------------------------------------------------------------------------------------------
R            cat  1037   5035599.468468         1   120   5035599.468468         0.470952         0.000000 /

[root@250-shiyan 27227]#

/proc/pid/schedstat
/proc/pid/sched
/proc/schedstat
/proc/sched_debug

proc的调度相关字段解释 2.6.32内核
CONFIG_SCHED_DEBUG (需要配置CONFIG_SCHEDSTAT才能显示更多信息)
/proc/pid/sched  显示信息解释如下:
ata/2 (111, #threads: 1)
---------------------------------------------------------
se.exec_start                      :          1159.482823    //此进程最近被调度到的开始执行时刻 ns
se.vruntime                        :            -1.044234    //虚拟运行时间,cfs调度用
se.sum_exec_runtime                :             0.000000    //累计运行时间
se.avg_overlap                     :             0.000000   
se.avg_wakeup                      :             3.617187    //当前进程最近一次调用try_to_wake_up为止的单次执行时间
se.avg_running                     :             0.000000   //平均单次执行时间
//以下开始需要同时配置CONFIG_SCHEDSTATS才能显示
se.wait_start                      :             0.000000  //最近一次当前进程被入队的时刻 cfs使用
se.sleep_start                     :          1159.482823 //此进程最近一次被从队列里取出,并被置S状态的时刻
se.block_start                     :             0.000000 //此进程最近一次被从队列里取出,并被置D状态的时刻
se.sleep_max                       :             0.000000 //最长处于S状态时间
se.block_max                       :             0.482651 //最长处于D状态时间
se.exec_max                        :             0.000000 //最长单次执行时间
se.slice_max                       :             0.000000 //曾经获得时间片的最长时间 (当cpu load过高时开始计算)
se.wait_max                        :             0.000000 //最长在就绪队列里的等待时间
se.wait_sum                        :             0.000000 //累计在就绪队列里的等待时间
se.wait_count                      :                    2 //累计等待次数 (被出队的次数) cfs使用,当被选中做下一个待运行进程时(set_next_entity),等待结束
se.iowait_sum                      :             0.000000 //io等待时间
se.iowait_count                    :                    0 //io等待次数  io_schedule调用次数
sched_info.bkl_count               :                    0 //此进程大内核锁调用次数
se.nr_migrations                   :                    2 //需要迁移当前进程到其他cpu时累加此字段
se.nr_migrations_cold              :                    0  //2.6.32 代码里赋值都是0
se.nr_failed_migrations_affine     :                    0   //进程设置了cpu亲和,进程迁移时检查失败的次数
se.nr_failed_migrations_running    :                    0    //当前进程出入R,不运行迁移的次数
se.nr_failed_migrations_hot        :                    0   //当前进程因为是cache hot导致迁移失败的次数
se.nr_forced_migrations            :                    0    //在当前进程cache hot下,由于负载均衡尝试多次失败,强行进行迁移的次数
se.nr_forced2_migrations           :                    1     //在当前进程是cache hot下,设置此进程进行迁移的次数
se.nr_wakeups                      :                    1  // 被唤醒的累计次数
se.nr_wakeups_sync                 :                    0  // 同步唤醒次数,即a唤醒b,a立刻睡眠,b被唤醒的次数 /* waker goes to sleep after wakup */
se.nr_wakeups_migrate              :                    0  //被唤醒得到调度的当前cpu,不是之前睡眠的cpu的次数
se.nr_wakeups_local                :                    0 //被本地唤醒的次数
se.nr_wakeups_remote               :                    1 //其他唤醒累计次数
se.nr_wakeups_affine               :                    0 //考虑了任务的cache亲和性的唤醒次数
se.nr_wakeups_affine_attempts      :                    0 //尝试进行考虑了任务的cache亲和性的唤醒次数
se.nr_wakeups_passive              :                    0 //2.6.32 代码里赋值都是0
se.nr_wakeups_idle                 :                    0 //2.6.32 代码里赋值都是0
avg_atom                           :             0.000000 //本进程平均切换耗时
avg_per_cpu                        :             0.000000 //如果本进程曾经被推或者拉到其他cpu上,则计算每个cpu上的平均耗时
nr_switches                        :                    2 //主动切换和被动切换的累计次数
nr_voluntary_switches              :                    2  //主动切换次数
nr_involuntary_switches            :                    0  //被动切换次数
se.load.weight                     :                 1024  //权重,和负载均衡有关
policy                             :                    0  //进程属性,0为非实时
                                                       #define SCHED_NORMAL  0
                                                       #define SCHED_FIFO  1
                                                       #define SCHED_RR  2
                                                       #define SCHED_BATCH  3
                                                       #define SCHED_IDLE  5
prio                               :                  120  //优先级
clock-delta                        :                  165  //测试用

/proc/sched_debug
此为cpu15运行队列的调度信息:
cpu#15, 1595.968 MHz
  .nr_running                    : 0                           //运行队列里处于就绪态进程的数目
  .load                          : 0                          //当前cpu负载
  .nr_switches                   : 120820818                  //切换累计次数
  .nr_load_updates               : 674238115                  //cpu权重更新的次数,和负载均衡有关
  .nr_uninterruptible            : -30                       
  .next_balance                  : 8012.054504               //下次执行定时负载均衡的时间
  .curr->pid                     : 0                         //当前运行进程
  .clock                         : 3717386659.081997          //当前cpu运行队列时刻
  .cpu_load[0]                   : 0                          //以下为cpu历史负载数组
  .cpu_load[1]                   : 0
  .cpu_load[2]                   : 0
  .cpu_load[3]                   : 0
  .cpu_load[4]                   : 0

   //以下开始需要同时配置CONFIG_SCHEDSTATS才记录
  .yld_count                     : 8236                      //调yield的次数
  .sched_switch                  : 0                       
  .sched_count                   : 122061248                //调用schedule的次数,>=nr_switches
  .sched_goidle                  : 30689623                  //切换到idle进程的次数
  .avg_idle                      : 1000000                   //cpu处于idle的平均时间
  .ttwu_count                    : 46238267                 //此cpu try_to_wake_up唤醒进程的次数
  .ttwu_local                    : 30988951                 //本地唤醒的次数,即进程睡眠前所在cpu为当前cpu
  .bkl_count                     : 2090                     //此cpu上大内核锁调用次数

cfs_rq[15]:/
  .exec_clock                    : 545099081.498339           //非实时线程得到调度的累计时间
  .MIN_vruntime                  : 0.000001                   //当前cfs 运行队列里虚拟时间最小的那个进程的vtime
  .min_vruntime                  : 770437019.732761           //当前cfs 运行队列虚拟时间下限,当处于rb树最左边进程运行虚拟时间,减去此值大于一个阈值后抢占当前进程
  .max_vruntime                  : 0.000001                   // 2.6.32里没有找到这个字段
  .spread                        : 0.000000                  
  .spread0                       : 407973445.279093            //cpu0上的min_vruntime与当前cpu的min_vruntime差值
  .nr_running                    : 0                          //当前cpu非实时进程在就绪队列中的个数
  .load                          : 0                          //非实时进程负载
  .nr_spread_over                : 6811                        //当前cpu中,长时间非实时进程由一个进程占有的次数
                                                               s64 d = se->vruntime - cfs_rq->min_vruntime;
                                                               if (d > 3*sysctl_sched_latency)
                                                         schedstat_inc(cfs_rq, nr_spread_over);

  .shares                        : 0                          
 
rt_rq[15]:/
  .rt_nr_running                 : 0                                 //处于就绪队列的实时进程个数
  .rt_throttled                  : 0                                  //是否限制实时进程的带宽运行时间,实时进程是否需要让出cpu
  .rt_time                       : 0.000000                          //做实时进程带宽分析用
  .rt_runtime                    : 950.000000                          //做实时进程带宽分析用

另外,还有一个:
/proc/schedstat
字段详细解释文档在内核目录的:
documentation/scheduler/sched-stats.txt

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。