查看线程的状态信息

1.调度策略

sched.h文件中定义了几种调度策略

/* Scheduling algorithms.  */
#define SCHED_OTHER		0  //非实时调度,分时调度
#define SCHED_FIFO		1  //实时调度,先到先服务
#define SCHED_RR		2   //实时调度,基于时间片轮转

2. 查看线程亲和性

命令: cat /proc/PID/task/TID/status

more status 
Name:   rsyslogd
State:  S (sleeping)
Tgid:   987
Pid:    987
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
Utrace: 0
FDSize: 32
Groups:
VmPeak:    36528 kB
VmSize:    36528 kB
VmLck:         0 kB
VmHWM:      1432 kB
VmRSS:      1420 kB
VmData:    33980 kB
VmStk:        88 kB
VmExe:       320 kB
VmLib:      2044 kB
VmPTE:        56 kB
VmSwap:        0 kB
Threads:        3
SigQ:   1/7954
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000001001206
SigCgt: 0000000180014c21
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed:   3
Cpus_allowed_list:      0-1     //线程可以使用的cpu核列表
Mems_allowed:   1
Mems_allowed_list:      0
voluntary_ctxt_switches:        1
nonvoluntary_ctxt_switches:     0

3. 查看线程的调度策略和优先级等状态信息

命令:cat /proc/PID/task/TID/sched

se.exec_start       :    2781299327.397282  //此进程最近被调度到的开始执行时刻(这个值是每次update_curr都进行更新)
se.vruntime        :       3144603.079903   //虚拟运行时间
se.sum_exec_runtime:       2843625.998498   //累计运行的物理时间时间
se.wait_start       :             0.000000  //最近一次当前进程被入队的时刻
se.sleep_start      :             0.000000  //此进程最近一次被从队列里取出,并被置S状态的时刻
se.block_start      :             0.000000  //此进程最近一次被从队列里取出,并被置D状态的时刻
se.sleep_max      :             0.000000    //最长处于S状态时间
se.block_max      :             0.000000    //最长处于D状态时间
se.exec_max       :             1.004266    //最长单次执行时间
se.slice_max       :           998.456300   //曾经获得时间片的最长时间
se.wait_max       :             0.455235    //最长在就绪队列里的等待时间
se.wait_sum       :            15.615407    //累计在就绪队列里的等待时间
se.wait_count      :                 3147   //累计等待次数
se.iowait_sum      :           215.825267   //io等待时间
se.iowait_count     :                   67  //io等待次数  io_schedule调用次数
sched_info.bkl_count:                    0  //此进程大内核锁调用次数
se.nr_migrations    :                    0  //需要迁移当前进程到其他cpu时累加此字段
se.nr_migrations_cold:                    0
se.nr_failed_migrations_affine:           194  //进程设置了cpu亲和,进程迁移时检查失败的次数
se.nr_failed_migrations_running:           0 
se.nr_failed_migrations_hot:               0   //当前进程因为是cache hot导致迁移失败的次数
se.nr_forced_migrations :                  0   //在当前进程cache hot下,由于负载均衡尝试多次失败,强行进行迁移的次数
se.nr_wakeups         :                 0   //被唤醒的累计次数(从不可运行到可运行)
se.nr_wakeups_sync     :                0   //同步唤醒次数,即a唤醒b,a立刻睡眠,b被唤醒的次数
se.nr_wakeups_migrate  :                 0  //被唤醒得到调度的当前cpu,不是之前睡眠的cpu的次数
se.nr_wakeups_local     :                0  //被本地唤醒的次数(唤醒后在当前cpu上执行)
se.nr_wakeups_remote   :                0   //非本地唤醒累计次数
se.nr_wakeups_affine    :                0  //考虑了任务的cache亲和性的唤醒次数
se.nr_wakeups_affine_attempts:            0
se.nr_wakeups_passive  :                    0
se.nr_wakeups_idle     :                    0
avg_atom            :           903.886204 //本进程平均耗时sum_exec_runtime/ nr_switches
avg_per_cpu           :             0.000001
nr_switches            :                 3146 //主动切换和被动切换的累计次数
nr_voluntary_switches   :                    0 //主动切换次数(由于prev->state为不可运行状态引起的切换)
nr_involuntary_switches  :                 3146 //被动切换次数
se.load.weight          :                 1024  //该se的load
policy                 :                    0  //调度策略 normal
prio                   :                  120  //优先级(nice=0)
clock-delta             :                   51

参考:

linux线程调度策略和优先级使用_skytering的博客-CSDN博客

/proc/$PID/status_zjl410091917的专栏-CSDN博客_/proc/[pid]/status

漫话性能:获取线程状态方法 - 知乎


版权声明:本文为gaoyu1253401563原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。