"); //-->
这个配置选项在《linux设备驱动程序第三版》中并没有介绍,但是linux2.6.10有该项。
如果该选项打开,则在/proc/下会生成schedstat文件,否则不会生成。
这一选项对于分析CPU性能,内核调度策略是非常重要的,但对于我们调试驱动或BSP作用似乎不大。
Timestamp表示系统启动到现在所运行的时间;
第三行中,cpu0表示此系统只有一个cpu 并且编号为0,如果有三个CPU,则将会按如下方式列出:
Cpu0 ….Cpu1…..Cpu2…..那么cpu0后面的一串数字表示什么意思呢?第一个四个数字表示sched_yield()状态;接下来的三个数字表示schedule()状态;再接下来的两个数字表示try_to_wake_up()状态;最后的三个数字描述调度的反应时间;
8.2.1 什么是sched_yield()
Sched_yield()是一个内核API,当此函数被调用,cpu执行权从当前正在执行的线程切换到另一个(就绪并等待运行的)活动线程(优先级等于或高于当前线程)。
如果,没有优先级等于或高于当前执行线程的活动并且就绪的线程,那么Sched_yield()将立即返回,当前线程继续运行直到时间片到期。
下面再来解析这四个数字:
1#:表示活动和过期队列为空的次数; 2#:表示活动队列为空的次数;
3#:表示过期队列为空的次数;4#:表示Sched_yield()被调用的次数;
实验中:第一组数字为0 0 0 0;(Sched_yield()一次都没有被调用)。
疑问:Sched_yield()什么情况下被调用???
=======================================================================================
By 下家山 QQ 1209050967 上海松江文汇路928号258室 松江大学城 8/3/2012
上海索漫科技 http://www.xiajiashan.com 专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训
8.2.2什么是schedule()
schedule()也是一个内核API函数,通过这个函数对进程调度。
下面解释第二组数据的具体意思:
5#:至少有一个进程呆在活动队列的次数;
6#:schedule()被调用的次数;
7#:schedule()让CPU空闲的次数;
第二组数据分别为:3,5425,2358
8.2.3什么是try_to_wake_up()try_to_wake_up()也是一个内核API函数,此函数通过把进程状态设置为TASK_RUNNING,并调用activate_task将此进程插入本地CPU的运行队列,从而唤醒睡眠或停止的进程。
下面解释第三组数据的具体意思:
8#:try_to_wake_up()被调用的次数;
9#:try_to_wake_up()发现进程是觉醒的次数;
第三组数据分别为:0,0
8.2.4什么是“scheduling latency”(调度反应时间)最后一组数字是对“scheduling latency”(调度反应时间)的描述,Scheduling Latency的意思有点不好理解
(摘自:Clark Williams写的《Linux Scheduler Laterncy》)
主要是指调度—到响应的时间,这种调度是指一种刺激信号(如一个中断或一个事件发生),而这里的响应是指内核通过这种刺激信号得到一个机会来调度线程(正在等待唤醒)。
下面解释最后一组数据的具体意思:
10#:被任务消耗在运行上的时间总和(单位ms);
11#:被任务消耗在等待运行上的时间总和(单位ms);
12#: cpu执行到的任务总数;
最后一组数据分别为:848,1970,3067
写于上海松江
作者:下家山(请尊重原创, 转载请注明) http://www.xiajiashan.com,有什么问题可与我联系:ximenpiaoxue4016@sina.com
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。
eleaction01 阅读:4510