一种便于扩展和配置的性能检测方法与流程

文档序号:20917340发布日期:2020-05-29 13:42阅读:123来源:国知局

本发明涉及软件监测技术领域,具体为一种便于扩展和配置的性能检测方法。



背景技术:

处理器是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据,处理器主要包括运算器(算术逻辑运算单元,alu,arithmeticlogicunit)和高速缓冲存储器(cache)及实现它们之间联系的数据(data)、控制及状态的总线(bus)。它与内部存储器(memory)和输入/输出(i/o)设备合称为电子计算机三大核心部件,处理器内部具有软件程序,目前常常需要对处理器内部的软件性能进行监测,但是目前的软件性能监测不易扩展,不便于软件使用,而且只能连续的事件统计,功耗大,为此,我们提出了一种便于扩展和配置的性能检测方法。



技术实现要素:

本发明的目的在于提供一种便于扩展和配置的性能检测方法,以解决上述背景技术中提出的目前的软件性能监测不易扩展,不便于软件使用,而且只能连续的事件统计,功耗大的问题。

为实现上述目的,本发明提供如下技术方案:一种便于扩展和配置的性能检测方法,该种便于扩展和配置的性能检测方法具体步骤如下:

s1:执行监测的写指令,使写指令到执行单元;

s2:写指令到执行单元以后,分配逻辑监测事件所处的类别,并察看所有该类下属的计数单元是否被完全征用,如果没有被完全征用,则选择一个空闲的计数单元,将事件和初始值赋值到技术单元,开始激活计数器,如果所有计数器都被占用,释放之前最早的监测事件,到某一时刻,某一个类别中的多个计数单元会同时工作,性能监测模块会接收来自其他模块的事件,当前工作的计数单元检测,如果该类别里面的事件有被触发,并且是自己关心的事件,则计数器自加;

s3:当监测到某一大类对应的所有技术单元全部空闲时,关闭这一类事件到监测模块的流水线时钟。

优选的,步骤s1中,指令作为特殊寄存器写指令,完全复用特殊寄存器的写通路和指令格式,里面的特殊寄存器编号代表一个特定的监测时间,寄存器编号被分为事件类编码和事件编码。

优选的,步骤s2中,计数单元被激活后,会一直处于工作状态,随时等待自加。

与现有技术相比,本发明的有益效果是:该种便于扩展和配置的性能检测方法,设计合理,使性能监测单元易扩展,并复用已有的特殊寄存器读写指令格式,灵活的分配和释放,便于软件使用,并可以易于实现不连续的事件统计,通过检测计数单元的工作状态控制事件总线的时钟,降低功耗。

具体实施方式

下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供一种技术方案:处理器监测的事件分为两大类:微架构和架构,微架构的事件只要满足触发条件就可以被记录,而架构事件需要触发以后被顺利提交才可以被记录.性能监测分为以下几个大类:指令缓存相关事件、指令tlb访问,缺失,回填、指令缓存访问,缺失,回填、取指和派遣相关事件、派遣n条指令(n=1,2,3..)、前/后端资源引发的派遣停顿、流水线取消操作、访存相关事件、load/store缓存溢出、storebypassload的场景、bank冲突引发的流水线停顿、数据缓存的访问,缺失,回填、提交阶段相关事件、被推测执行的指令、提交过的指令、非对齐地址的访存行为、跨页访存的行为、异常触发、断响应、cpu周期数;

为了满足软件同时监测多个分类不同事件的需求,每个事件分类有三个硬件计数单元用于统计事件,每个计数单元有有效位,事件域,计数器,

有效位标示当前计数器处于工作状态,新执行的监测请求不能占用该计数器,除非某一种类的计数器被完全征用,硬件逻辑会选择释放最靠前的一个监测事件.因此软件人员需要保证合理使用计数单元,一旦完成某一段时间的监测任务,及时把监测的数值从技术单元读到通用寄存器,完成资源的释放.每次接到监测请求时,硬件会选择一个idle状态的计数单元,将事件写入,并置位有效位,此后所有触发事件的行为会让计数器自加.

事件域会纪录当前计数单元监测的是哪一件具体事件,用于读请求的匹配,读请求只有当匹配到某一具体计数单元的事件域的时候,成功被执行,如果匹配不到,返回全0值,因此软件人员,需要在读某一监测事件之前,先激活一个计数单元用于统计事件.读与写需要成对出现,保证完整的软件意图.

计数器完成事件监测核心计数任务,当监测任务被接受,计数器可以从监测指令中读取一个初始值并赋值.常规的做法是直接将当前的计数器清0,从0开始计数,试想这样场景,软件需要不连续的监测两段时间内某一事件的触发情况,如果每次都是清0操作就需要设置两次计数单元并读完之后做加法操作,如果允许设置初始值就可以第二次设置技术单元直接把上次统计结果直接赋值,在基础上自加。如果计数器达到上限,保持不变。

软件实现监测过程具体如下:

执行监测的写指令,该指令作为特殊寄存器写指令,完全复用之前特殊寄存器的写通路和指令格式,里面的特殊寄存器编号代表一个特定的监测时间,寄存器编号被分为两个部分:事件类编码和事件编码,以先前分类为例,指令缓存相关事件为000,里面的指令tlb访问为000,tlb缺失001,六位编码来确定唯一事件。

写指令到执行单元以后,分配逻辑会监测事件所处的类别,并察看所有该类下属的计数单元是否被完全征用,否,选择一个空闲的计数单元,将事件和初始值赋值到技术单元,开始激活计数器,如果所有技术器都被占用,释放之前最早的监测事件。被激活的计数单元不会被其他监测事件影响。

到某一时刻,某一个类别中的多个计数单元会同时工作,整个性能监测模块会接收来自其他模块的上百个事件,当前工作的计数单元会检测如果该类别里面的事件有被触发,并且是自己关心的事件,计数器自加。

一旦计数单元被激活,会一直处于工作状态,随时等待自加。只有读请求才会释放该计数器,读指令也复用了读特殊寄存器指令的格式。监测事件的写请求的顺序可以和读请求的顺序不一致,调度队列会选择相应的计数单元释放(释放的过程只是清除有效位)。

当监测到某一大类对应的所有技术单元全部空闲时,关闭这一类事件到监测模块的流水线时钟,来降低功耗。

由于读写特殊寄存器的指令格式是特殊指令编码,所有每一个监测事件都可以对应一个虚拟的体系结构寄存器号,在硬件,用少数的寄存器实现了对多个监测事件的同时监测。因此可以灵活的分配编码来实现监测事件的扩展。

每一类时间都有固定的最大监测数,因此划分事件类别的时候,需要把经常监测的事件尽量离散到不同的类别,同时又要考虑事件本身。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1