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: 03. 查看线程的调度策略和优先级等状态信息
命令: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博客
版权声明:本文为gaoyu1253401563原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。