linux调度器(十)——调度器/proc信息解读
注下面的时间或时刻都是从rq->clock中获得的,而这个值是由update_rq_clock底层cpu来更新的。并且很多信息是需要内核配置CONFIG_SCHEDSTATS才有。 /proc/<pid>/sched
大多数字段的计算在sched.c及sched_fair.c里,在这两个文件里搜索相应的字段就能得到相应的计算方法。
/proc/<pid>/schedstat
$cat /proc/28733/schedstat 5726055470233 30451531 6336 First: time spent on the cpu, task->se.sum_exec_runtime,这个值与上面的se.sum_exec_runtime一样只是上面的除于1,000,000 Second:time spent waiting on a runqueue,这个值与上面的se.wait_sum一样 Third: of times run on this cpu, task->sched_info.pcount,这个值跟上面的se->nr_switches一样 |
该信息的入口在fs/proc/base.c的proc_pid_schedstat函数里。
/proc/<pid>/status
$cat /proc/28733/status Name: cpu_test State: R (running) Tgid: 28733 Pid: 28733 PPid: 5573 TracerPid: 0 Uid: 52170 52170 52170 52170 // uid euid suid fsuid Gid: 100 100 100 100 // gid egid sgid fsgid Utrace: 0 FDSize: 256 Groups: 100 19051 //启动该进程的用户所属的组的id,并不是组调度的组 VmPeak: 3976 kB VmSize: 3912 kB //任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页,该值也是top的VIRT字段 VmLck: 0 kB //任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm) VmHWM: 328 kB //文件内存映射和匿名内存映射的大小 VmRSS: 328 kB //应用程序正在使用的物理内存的大小,就是用top的res字段 VmData: 44 kB //程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm) VmStk: 88 kB //任务在用户态的栈的大小 (stack_vm) VmExe: 4 kB //程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code) VmLib: 1700 kB //被映像到任务的虚拟内存空间的库的大小 (exec_lib) VmPTE: 32 kB //该进程的所有页表的大小,单位:kb VmSwap: 0 kB Threads: 1 //线程数 SigQ: 1/193060 //待处理信号的个数 SigPnd: 0000000000000000 //屏蔽位,存储了该线程的待处理信号 ShdPnd: 0000000000000000 //屏蔽位,存储了该线程组的待处理信号 SigBlk: 0000000000000000 //存放被阻塞的信号 SigIgn: 0000000000000000 //存放被忽略的信号 SigCgt: 0000000000000000 //存放被捕捉到的信号 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff Cpus_allowed: 000008 //可以使用的cpu bit Cpus_allowed_list: 3 //可以使用的cpu id list Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 //可使用的mem Mems_allowed_list: 0 //可使用的mem list voluntary_ctxt_switches: 0 //主动的切换 nonvoluntary_ctxt_switches: 8310 //被动的切换 |
入口在fs/proc/array.c的proc_pid_status函数里,参考http://www.kerneltravel.net/?p=294
/proc/<pid>/stat
在内核中,该文件的内容由do_task_stat函数(fs/proc/array.c)写。主要操作是
注:这个输出的中间自动填充了个0,在22 start_time前。参考http://www.kerneltravel.net/?p=291
/proc/sched_debug 这个打印出所有cpu的信息,这里我们过滤出cpu3来解释
该信息的打印入口在sched_debug.c的sched_debug_show函数。
注:上面的很多信息是从网上搜索,再加上自己对调度器相关字段的验证,其它的内容没有验证
参考资料
http://chxxxyg.blog.163.com/blog/static/1502811932012912546208/ http://blog.csdn.net/chenyu105/article/details/7068758 proc目录解析:http://www.kerneltravel.net/?p=294 rq结构的注释:http://blog.csdn.net/bullbat/article/details/7160246