新闻  |   论坛  |   博客  |   在线研讨会
linux-kernel调试技术大全上海索漫培训教材
xiajiashan | 2012-08-29 10:27:26    阅读:961   发布文章

作者:下家山(请尊重原创,转载请注明) http://www.xiajiashan.com 八:SCHEDSTATS调度器调试技术 8.1 作用与意义 这个配置选项在《linux设备驱动程序第三版》中并没有介绍,但是linux2.6.10有该项。 如果该选项打开,则在/proc/下会生成schedstat文件,否则不会生成。这一选项对于分析CPU性能,内核调度策略是非常重要的,但对于我们调试驱动或BSP作用似乎不大。八:SCHEDSTATS调度器调试技术 8.1 作用与意义 这个配置选项在《linux设备驱动程序第三版》中并没有介绍,但是linux2.6.10有该项。 如果该选项打开,则在/proc/下会生成schedstat文件,否则不会生成。这一选项对于分析CPU性能,内核调度策略是非常重要的,但对于我们调试驱动或BSP作用似八:SCHEDSTATS调度器调试技术 8.1 作用与意义

这个配置选项在《linux设备驱动程序第三版》中并没有介绍,但是linux2.6.10有该项。

如果该选项打开,则在/proc/下会生成schedstat文件,否则不会生成。

这一选项对于分析CPU性能,内核调度策略是非常重要的,但对于我们调试驱动或BSP作用似乎不大。

1.jpg
 

 

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的意思有点不好理解4.jpg

(摘自:Clark Williams写的《Linux Scheduler Laterncy》)

主要是指调度—到响应的时间,这种调度是指一种刺激信号(如一个中断或一个事件发生),而这里的响应是指内核通过这种刺激信号得到一个机会来调度线程(正在等待唤醒)。

下面解释最后一组数据的具体意思:

10#:被任务消耗在运行上的时间总和(单位ms);

11#:被任务消耗在等待运行上的时间总和(单位ms);

12#: cpu执行到的任务总数;

最后一组数据分别为:848,1970,3067

写于上海松江

作者:下家山(请尊重原创, 转载请注明) http://www.xiajiashan.com,有什么问题可与我联系:ximenpiaoxue4016@sina.com

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
02年接触ARM和ucos,开发过有线和无线图像报警器,IPCamera,人脸识别系统,OCR识别系统,指纹识别系统,05年开始从事Linux及Rtems下WiFi,camera,Ethernet等驱动开发工作,专做嵌入式linux培训,致力于把我十年来的研发经验传授给每一个学员,招人的可以找我,ximenpiaoxue4016@sina.com
推荐文章
最近访客