CN110083495A - 一种基于mips分析线程占用cpu的方法 - Google Patents
一种基于mips分析线程占用cpu的方法 Download PDFInfo
- Publication number
- CN110083495A CN110083495A CN201810077746.0A CN201810077746A CN110083495A CN 110083495 A CN110083495 A CN 110083495A CN 201810077746 A CN201810077746 A CN 201810077746A CN 110083495 A CN110083495 A CN 110083495A
- Authority
- CN
- China
- Prior art keywords
- time
- thread
- interruption
- normal tasks
- task
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
- G06F11/2236—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
Abstract
本申请公开了一种基于MIPS分析线程占用CPU的方法,本申请采用的技术方案是:按照指定优先级,确定正常任务的启动时间、中断进入时间和重新调度正常任务的时间;根据所述正常任务的启动时间、所述中断进入时间和所述重新调度正常任务的时间分别计算任务执行时间和中断执行时间;根据所述任务执行时间或所述中断执行时间,计算任务或中断的CPU占用率。采用本发明的技术方案能够达到软件实现分析线程占用CPU的目的,减少了使用硬件的成本,更加方便快捷的对线程进行调控,实用性更强。
Description
技术领域
本发明涉及CPU使用率分析方法,尤其涉及一种基于MIPS分析线程占用CPU的方法。
背景技术
MIPS(Million Instructions Per Second),即每秒处理的百万级的机器语言指令数,是衡量CPU性能的指标。在选定uC/OS-II操作系统后,每秒处理指令的数量是固定的,如何分析各线程、中断的利用率是性能优化的重要途径。
开发过程中时常会遇到性能优化的任务,我们首先需要了解程序中各个线程调度的时间、中断处理程序的CPU占比情况,便于问题分析定位。虽然有非常强大的开发工具,比如SuperTrace分析工具,但是需要特定的硬件支持,且价格也是非常昂贵,实用性并不好,并不一定能够提供给我们想要了解到的调试信息。基于此,本发明应运而生。
发明内容
为了对CPU性能更加优化,本申请提供了一种基于MIPS分析线程占用CPU的方法。
本申请采用的技术方案是:一种基于MIPS分析线程占用CPU的方法,包括:
按照指定优先级,确定正常任务的启动时间、中断进入时间和重新调度正常任务的时间;
根据所述正常任务的启动时间、所述中断进入时间和所述重新调度正常任务的时间分别计算任务执行时间和中断执行时间;
根据所述任务执行时间或所述中断执行时间,计算任务或中断的CPU占用率。
当正常任务启动时,进入正常任务调度入口,记录正常任务线程的类型以及正常任务启动时间;
当发生中断时,进入中断程序入口,记录中断的类型以及中断进入时间;
当中断结束重新开始调度正常任务线程时,记录重新调度的正常任务线程的类型以及重新调度正常任务时间。
所述计算任务执行时间,具体包括:线程切换线程或中断切换线程;
当程序运行为线程切换线程时,根据优先级确定先调度线程和后调度线程的启动时间,后调度线程的启动时间减去先调度线程的启动时间,即为先调度线程的执行时间;
当程序运行为中断切换线程时,根据调度策略,后调度中断启动时间减去先调度线程进入时间,即为先调度线程的执行时间。
所述计算中断执行时间,具体为当前重新调度正常任务的时间减去中断进入时间。
所述计算任务或中断的CPU占用率,具体为:计算线程或中断的执行时间后,累计总运行时间,各任务或中断执行时间除以所述总运行时间,得到对应的任务或中断占用CPU的比例。
所述方法还包括:在实际调用时,在需要分析的任务或中断的起始位置加上MIPS分析函数,其中,所述MIPS分析函数的第一形参用来标识操作类型,包括正常任务的启动或中断进入或重新调度正常任务;第二形参标识中断类型或者线程优先级,用于区分具体的线程或中断类型。
本发明取得的有益效果是:采用本发明的技术方案能够达到软件实现分析线程占用CPU的目的,减少了使用硬件的成本,更加方便快捷的对线程进行调控,实用性更强。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的提供了一种基于MIPS分析线程占用CPU的方法流程图;
图2是本发明提供的任务或中断时序图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
uC/OS-II操作系统是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。uC/OS-II是一种基于优先级的可抢占的硬实时内核。
uC/OS-II操作系统的执行策略和中断策略:大部分程序中存在多个线程,线程1,线程2,.....线程n,中断类型1,中断类型2,....中断类型n,每个线程或中断都分配了唯一的优先级,系统会按照优先级来调度各个线程或中断,因此通过优先级来区分要执行的是线程或中断。
基于以上执行策略和中断策略,本实施例提供了一种基于MIPS分析线程占用CPU的方法,程序开发非常简便,而且可以详细的记录每个线程、中断的占用时间,如图1所示,具体方法如下:
步骤S1:按照指定优先级,确定正常任务的启动时间、中断进入时间和重新调度正常任务的时间;
当正常任务启动时,进入正常任务调度入口,记录正常任务线程的类型以及正常任务启动时间;
当发生中断时,进入中断程序入口,记录中断的类型以及中断进入时间;
当中断结束重新开始调度正常任务线程时,记录重新调度的正常任务线程的类型以及重新调度正常任务时间。
预先定义一个二维数组,用于在程序运行时存储各个任务或中断进入的时间以及类型,定义的二维数组为:
#define OS_DBG_TBL_L 100
unsigned int index=0;
unsigned int MipsTracker[OS_DBG_TBL_L][2]。
其中,记录各任务或中断的时间是通过调用GetCurrentTime(),来获取当前的时间作为对应的各任务或中断的进入或启动时间。
参见图2,图中横轴为时间轴T,纵轴为优先级,随着优先级的顺序沿着时间轴执行任务或中断,其中,T0为任务A的起始时间、T1为中断A的进入时间、T2为重新调度正常任务B的起始时间或中断A的退出时间、T3为中断B的进入时间、T4为重新调度正常任务C的起始时间或中断B的退出时间。
步骤S2:计算任务执行时间和中断执行时间,并保存至对应的任务或中断类型表中;
中断执行时间:当前重新调度正常任务的时间减去中断进入时间,即为中断的执行时间;
任务的执行时间:包括两种情况,即线程切换线程或中断切换线程;
线程切换线程时间具体为,根据优先级确定先调度线程和后调度线程的启动时间,后调度线程的启动时间减去先调度线程的启动时间,即为先调度线程的执行时间;
中断切换线程时间具体为,根据调度策略,后调度中断启动时间减去先调度线程进入时间,即为先调度线程的执行时间。
例如,图2中,任务A的执行时间为中断A的进入时间T1减去任务A的起始时间T0;中断A的执行时间为调度正常任务B的起始时间T2减去中断A的进入时间T1;任务B的执行时间为中断B的进入时间T3减去调度正常任务B的起始时间T2;中断B的执行时间为调度正常任务C的起始时间T4减去中断B的进入时间T3,以此类推。
预先定义两个一维数组,一个用于在程序运行过程中记录每个任务的执行时间,另一个用于在程序运行过程中记录每个中断的执行时间;定义的两个一维数组为:
#define MAX_TASK 20
#define MAX_IRQ 20
Unsigned int TASK_Occupy[MAX_TASK];
Unsigned int IRQ_Occupy[MAX_IRQ];
Unsigned int TotalTime=0。
步骤S3:根据任务执行时间和中断执行时间,计算任务和中断的CPU占用率并输出。
具体的,在计算当前线程或中断的执行时间后,累计总运行时间,每个任务或中断执行时间除以总运行时间,就是这个任务和中断类型占用CPU的比例。
本申请通过上述方式调用void Mips_Output(void)函数输出结果,查找需要关注的中断切换线程或者线程间切换的起始和结束时间间隔,统计出耗时较长部分,还可以了解各线程调度,中断处理周期,分析MIPS使用情况非常方便。
在实际调用时,在需要分析的线程或者中断的起始位置加上MIPS分析函数(Mips_Count函数),该Mips_Count函数的具体实现为:
其中,第一形参type传入为16进制数,用来标识操作类型,包括正常任务的启动或中断进入或重新调度正常任务;第二形参prio传入为中断类型或者线程优先级,用来区分具体的线程或中断类型。type为0x0000时,标识为中断进入,type为0x1000时标识为中断进入,type为0x2000时标识为重新调度正常任务;prio为USB_IRQn时,标识为USB中断类型优先级。
例如:以USB中断切换线程为例,在USB中断处理函数中记录USB中断类型,标记type为0x1000,即中断调用开始。
USB中断切换函数为:
本领域技术人员可以明白,这里结合所公开的实施例描述的各种示例性的方法步骤和装置单元均可以电子硬件、软件或二者的结合来实现。为了清楚地示出硬件和软件之间的可交换性,以上对各种示例性的步骤和单元均以其功能性的形式进行总体上的描述。这种功能性是以硬件实现还是以软件实现依赖于特定的应用和整个系统所实现的设计约束。本领域技术人员能够针对每个特定的应用,以多种方式来实现所描述的功能性,但是这种实现的结果不应解释为背离本发明的范围。
利用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其它可编程的逻辑器件、分立门或者晶体管逻辑、分立硬件组件或者他们之中的任意组合,可以实现或执行结合这里公开的实施例描述的各种示例性的单元。通用处理器可能是微处理器,但是在另一种情况中,该处理器可能是任何常规的处理器、控制器、微控制器或者状态机。处理器也可能被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或者更多结合DSP核心的微处理器或者任何其他此种结构。
结合上述公开的实施例所描述的方法的步骤可直接体现为硬件、由处理器执行的软件模块或者这二者的组合。软件模块可能存在于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动磁盘、CD-ROM或者本领域熟知的任何其他形式的存储媒质中。一种典型存储媒质与处理器耦合,从而使得处理器能够从该存储媒质中读信息,且可向该存储媒质写信息。在替换实例中,存储媒质是处理器的组成部分。处理器和存储媒质可能存在于一个ASIC中。该ASIC可能存在于一个用户站中。在一个替换实例中,处理器和存储媒质可以作为用户站中的分立组件存在。
根据所述公开的实施例,可以使得本领域技术人员能够实现或者使用本发明。对于本领域技术人员来说,这些实施例的各种修改是显而易见的,并且这里定义的总体原理也可以在不脱离本发明的范围和主旨的基础上应用于其他实施例。以上所述的实施例仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于MIPS分析线程占用CPU的方法,其特征在于,包括:
按照指定优先级,确定正常任务的启动时间、中断进入时间和重新调度正常任务的时间;
根据所述正常任务的启动时间、所述中断进入时间和所述重新调度正常任务的时间分别计算任务执行时间和中断执行时间;
根据所述任务执行时间或所述中断执行时间,计算任务或中断的CPU占用率。
2.如权利要求1所述的方法,其特征在于,
当正常任务启动时,进入正常任务调度入口,记录正常任务线程的类型以及正常任务启动时间;
当发生中断时,进入中断程序入口,记录中断的类型以及中断进入时间;
当中断结束重新开始调度正常任务线程时,记录重新调度的正常任务线程的类型以及重新调度正常任务时间。
3.如权利要求1所述的方法,其特征在于,所述计算任务执行时间,具体包括:线程切换线程或中断切换线程;
当程序运行为线程切换线程时,根据优先级确定先调度线程和后调度线程的启动时间,后调度线程的启动时间减去先调度线程的启动时间,即为先调度线程的执行时间;
当程序运行为中断切换线程时,根据调度策略,后调度中断启动时间减去先调度线程进入时间,即为先调度线程的执行时间。
4.如权利要求1所述的方法,其特征在于,所述计算中断执行时间,具体为当前重新调度正常任务的时间减去中断进入时间。
5.如权利要求1所述的方法,其特征在于,所述计算任务或中断的CPU占用率,具体为:计算线程或中断的执行时间后,累计总运行时间,各任务或中断执行时间除以所述总运行时间,得到对应的任务或中断占用CPU的比例。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:在实际调用时,在需要分析的任务或中断的起始位置加上MIPS分析函数,其中,所述MIPS分析函数的第一形参用来标识操作类型,包括正常任务的启动或中断进入或重新调度正常任务;第二形参标识中断类型或者线程优先级,用于区分具体的线程或中断类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810077746.0A CN110083495A (zh) | 2018-01-26 | 2018-01-26 | 一种基于mips分析线程占用cpu的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810077746.0A CN110083495A (zh) | 2018-01-26 | 2018-01-26 | 一种基于mips分析线程占用cpu的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110083495A true CN110083495A (zh) | 2019-08-02 |
Family
ID=67412621
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810077746.0A Pending CN110083495A (zh) | 2018-01-26 | 2018-01-26 | 一种基于mips分析线程占用cpu的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110083495A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110609773A (zh) * | 2019-09-05 | 2019-12-24 | 北京宝兰德软件股份有限公司 | Java线程CPU使用率获取方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101145125A (zh) * | 2006-09-11 | 2008-03-19 | 中兴通讯股份有限公司 | 一种测量多任务操作系统任务cpu占用率的方法 |
JP2009217760A (ja) * | 2008-03-13 | 2009-09-24 | Mitsubishi Electric Corp | 電子計算機装置 |
CN101876933A (zh) * | 2009-04-28 | 2010-11-03 | 深圳富泰宏精密工业有限公司 | Cpu使用率分析系统及方法 |
CN102110043A (zh) * | 2010-12-30 | 2011-06-29 | 上海顶竹通讯技术有限公司 | 一种cpu占用率的计算方法及装置 |
CN103164321A (zh) * | 2013-03-20 | 2013-06-19 | 华为技术有限公司 | 中央处理器占用率测量方法及装置 |
CN106776272A (zh) * | 2016-11-11 | 2017-05-31 | 西北工业大学 | 嵌入式系统实时性能测试方法 |
-
2018
- 2018-01-26 CN CN201810077746.0A patent/CN110083495A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101145125A (zh) * | 2006-09-11 | 2008-03-19 | 中兴通讯股份有限公司 | 一种测量多任务操作系统任务cpu占用率的方法 |
JP2009217760A (ja) * | 2008-03-13 | 2009-09-24 | Mitsubishi Electric Corp | 電子計算機装置 |
CN101876933A (zh) * | 2009-04-28 | 2010-11-03 | 深圳富泰宏精密工业有限公司 | Cpu使用率分析系统及方法 |
CN102110043A (zh) * | 2010-12-30 | 2011-06-29 | 上海顶竹通讯技术有限公司 | 一种cpu占用率的计算方法及装置 |
CN103164321A (zh) * | 2013-03-20 | 2013-06-19 | 华为技术有限公司 | 中央处理器占用率测量方法及装置 |
CN106776272A (zh) * | 2016-11-11 | 2017-05-31 | 西北工业大学 | 嵌入式系统实时性能测试方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110609773A (zh) * | 2019-09-05 | 2019-12-24 | 北京宝兰德软件股份有限公司 | Java线程CPU使用率获取方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9952905B2 (en) | Methods and systems to identify and migrate threads among system nodes based on system performance metrics | |
CN101278265B (zh) | 用于收集剖析信息的方法和用于优化代码段的系统 | |
US8239838B2 (en) | Kernel-aware debugging system, medium, and method | |
US8402463B2 (en) | Hardware threads processor core utilization | |
CN102341790B (zh) | 数据处理系统及其使用的方法 | |
CN105183698B (zh) | 一种基于多核dsp的控制处理系统和方法 | |
CN103838539A (zh) | 性能测量单元、包括该单元的处理器核心和处理剖析方法 | |
US8799872B2 (en) | Sampling with sample pacing | |
JP2011059777A (ja) | タスクスケジューリング方法及びマルチコアシステム | |
CN103164321A (zh) | 中央处理器占用率测量方法及装置 | |
CN109684167A (zh) | 应用程序cpu使用率的计算方法、装置、存储介质及终端 | |
CN109445939A (zh) | 一种基于主动出让机制的软实时调度内核的调度方法 | |
CN109086149A (zh) | 一种微服务接口调用热点分析的方法 | |
CN110083495A (zh) | 一种基于mips分析线程占用cpu的方法 | |
US8180943B1 (en) | Method and apparatus for latency based thread scheduling | |
CN102057356A (zh) | 用于测量任务负载的方法和系统 | |
WO2019029721A1 (zh) | 任务的调度方法、装置、设备及存储介质 | |
KR20140066913A (ko) | 동적 라이브러리 프로파일링 방법, 이를 기록한 컴퓨터로 읽을 수 있는 기록 매체 및 동적 라이브러리 프로파일링 시스템 | |
US11360702B2 (en) | Controller event queues | |
WO2020073200A1 (zh) | 调试程序的方法和系统 | |
Leyva-del-Foyo et al. | Predictable interrupt scheduling with low overhead for real-time kernels | |
JP2009048358A (ja) | 情報処理装置及びスケジューリング方法 | |
CN115438020A (zh) | 一种数据库资源调度方法、装置、设备及介质 | |
CN116225820A (zh) | 监测中断状态的方法、装置、电子设备及存储介质 | |
CN108363529A (zh) | 应用程序界面的前台运行时间的确定方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |