一种Linux操作系统进程调度信息的监测方法技术方案

技术编号:3489317 阅读:281 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种Linux操作系统进程调度信息的监测方法,包括:目标机在调用用户进程时记录进程调度信息,并将其写入内核缓冲区;目标机读取内核缓冲区中的所述进程调度信息,并将其发送给测试主机;测试主机对收到的所述进程调度信息进行相应处理。采用本发明专利技术的技术方案,既不会生成冗余的内核调度信息,又方便将来扩展,具有可移植性、灵活性,可扩展性等特点;而且内核线程不会造成因监测程序的引入,而增加内核的调度负载,监测结果更准确;另外,通过数据链路层帧的传输,省去了在被测主机和测试主机之间建立通信连接所需的时间和资源,实现了监测的实时性。

【技术实现步骤摘要】

本专利技术涉及Linux操作系统,具体涉及在Linux操作系统进程调度信息 的监测方法。
技术介绍
Linux凭借着源码开放的自由精神,在操作系统市场中的份额不断增加。 事实上,对其源码的自由修改和重发布,已经成为大多数嵌入式产品中操作 系统开发和移植的首选途径。因此,研究Linux内核对嵌入式系统尤其是嵌 入式操作系统的开发和移植有着重要的意义。而其中的调度系统对于操作系 统的整体性能有着非常重要的影响,因而研究内核调度器(即调度程序)及 其调度性能就是一项重要内容。然而,当前有关Linux调度系统的研究大多停留在理论层面,如分析其 调度策略和算法实现的时间复杂度,等等;而对Linux内核所支持的任务抢 占,其调度性能即抢占是否实时、是否满足用户体验;CPU时间片分配是 否公平、合理、有效等方面没有给出直观、准确的测试验证。另外,在现有的一些技术和解决方案当中, 一般提取内核信息时,都是 通过新创建和运行一个用户进程,独自来读取和处理数据,也即先通过系统 调用,陷入内核,拷贝内核緩冲中的信息至用户緩冲区中,然后返回该用户 进程空间,再^f故相应的处理。但是当我们要提取的是内核调度本身相关的信息时,这种方案显然是行 不通的。因为新增的用户进程本身就要参与进程调度,也即会增加冗余的调 度信息,并且系统调用时的陷入、返回机制,也会改变调度系统的调度策略 和顺序,以致会造成分析结杲的不准确;另外,当提取大量的信息时,过多 的内核至用户緩沖区的数据拷贝也会加重系统负担,造成分析结果实时性不强。还有,现有技术在通过网络输出信息时,最常见的是采用TCP/IP协议栈,即自网络层以下,采用以太网和IP协议,而传输层则采用简单快速的UDP协议,这就减去了 TCP协议三次握手过程所造成的系统负担和资源浪 费,保证了数据传输的实时性。由于考虑到通讯协议的层次抽象性和通用性, Linux内核网络子系统在实现时,采用的是通用多层协议处理机制(如图1 所示)。如果大量的内核调度信息通过这种复杂的流程机制向网络发送的话, 势必加重系统负担,影响系统性能。
技术实现思路
本专利技术要解决的技术问题是提供一种Li皿x操作系统进程调度信息的监 测方法,以解决现有技术无法从实践角度监测及考察Linux的进程调度信息 的缺陷。为了解决上述问题,本专利技术提供了一种Linux操作系统进程调度信息的 监测方法,包括a目标机在调用用户进程时记录进程调度信息,并将其写入内核緩沖区;b读取所述内核緩冲区中的所述进程调度信息,并将其发送给测试主机;c所述测试主机对收到的所述进程调度信息进行相应处理。进一步地,所述步骤a具体是指在进程选择及切换时增加记录进程调 度信息的记录步骤,执行所述记录步骤的同时将记录的所述进程调度信息写 入内核緩冲区。进一步地,所述步骤b中,读取所述进程调度信息的方法为创建一内 核线程,读取所述内核緩冲区中的所述进程调度信息,并将所述进程调度信 息封装成驱动程序所用的数据链路层帧,然后交由网卡驱动程序发送至测试 主机。进一步地,所述步骤c中,测试主机对收到的进程调度信息进行相应处理是指测试主机收到所述数据链路层帧后,启动用户数据报协议数据包的 接收和处理程序,解析所述数据链路层帧中的信息,并显示解析结果。进一步地,所述数据链路层帧依次包含以下信息以太网数据包头、网 间协议数据包头、用户数据报协议数据包头及进程调度信息。综上所述,本专利技术提供了 , 该方法中自定义的进程调度信息的记录语句,既不会生成冗余的内核调度信 息,又方便将来扩展,具有可移植性、灵活性,可扩展性等特点;创建的内 核线程直接从内核緩冲区中读取数据并封装成数据链路帧,绕过了内核中 TCP/IP协议栈的重复处理流程;从而不会造成因监测程序的引入,而增加 内核的调度负载,监测结果更准确;另外,通过数据链路层帧的传输,省去 了在被测主机和测试主机之间建立通信连接所需的时间和资源,实现了监测 的实时性。附图说明图1是现有技术通用的TCP/IP协议栈处理流程图2是本专利技术方法的操作流程图3是本专利技术方法产生的数据链路层帧的结构示意图4是测试主机解析程序的一个示例界面,即调度信息的用法示例。具体实施例方式本专利技术提供,通过在目标 机的Linux内核源代码中插入记录进程调度信息的语句记录用户进程的调度 情况,并通过创建一内核线程读取记录的进程调度信息,将其发送给测试主 机。本实施例涉及,如图2所 示,具体操作流程如下步骤101:目标机在进程选择及切换时增加记录进程调度信息的记录步 骤,执行所述记录步骤的同时将记录的进程调度信息写入内核緩沖区。具体实现方法为修改目标机的Linux内核源代码,通过打补丁(patch)的方式,在内核源代码中的进程选择及切换点处增加标志记录语句,记录测试主机分析程序所必需的进程调度信息,然后重新编译和运行新的内核系统,并当运行该记录语句时将进程调度信息写入内核緩沖区。此处进程调度信息指与进程调度相关的信息,编写的记录语句可根据系统需要来设定,如记录所调用进程的进程号,内存状态,也可以是其它测试主机希望获得的信 自在Linux内核中,调度子系统在进行上下文切换(即选定一个进程并切换CPU到它去执行)时,是通过schedule()函数实现的,也即该函数是每次进程调度的必经之处。因此可在该函数内部加入一些记录语句,记录所有测试主机程序所需要的进程调度信息,运行该记录语句时即可将进程调度信息写入内核緩冲区中。如下所示,是如何修改schedule()函数源代码的一个范例,*号之间的部分是加入的记录语句,此处记录的是调用进程的进程号。在具体的实现过程中,可以对要记录的内核信息做相应的增加或减少,也可对记录的内容作变化。asmlinkage void 一sched schedule(void){switch—tasks:if (next == rq->idle)schedstat—inc(rq, sched—goidle); prefetch(next); prefetch一stack(next); clear—tsk—need—resched(prev) ^ rcu_qsctr_inc(task—cpu(prev)); update—cpu_clock(prev, rq, now); prev->sleep—avg -二 run—time; if ((long)prev->sleep—avg <= 0)prev->sleep—avg — 0; prev->timestamp = prev->last—ran = now; sched—info—switch(prev, next); if (likely(prev != next)) {next->timestamp = now;rq->nr—switches+十;rq->curr — next;++* switch count; prepare—task—switch(rq, next);sjc sfc y〃add the record statements for the watch program.myRecord.prevPid=prev->pid;本文档来自技高网
...

【技术保护点】
一种Linux操作系统进程调度信息的监测方法,包括:a目标机在调用用户进程时记录进程调度信息,并将其写入内核缓冲区;b读取所述内核缓冲区中的所述进程调度信息,并将其发送给测试主机;c所述测试主机对收到的所述进程调度信 息进行相应处理。

【技术特征摘要】

【专利技术属性】
技术研发人员:彭明星
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1