能在多个特权层级执行指令的数据处理装置中的性能监控的制作方法_3

文档序号:9616187阅读:来源:国知局
该事件计数器对固定类型的事件进行计数,并且无法被重新编程以对不同类型的事件进行计数。例如,在此实施例中,固定事件计数器30对经过的处理周期进行计数。这是十分有用的,因为对处理周期进行计数是极为常见的性能监控形式,因此将很可能时常需要此操作。由于经过的处理周期的数目将通常大于另一类型的事件发生的次数,周期事件计数器30可具有更大位数,以支持比其他类型的计数器高的计数值。
[0050]另一事件计数器32是可编程事件计数器,这些事件计数器能够由软件进行配置以对配置数据12所指定的不同类型的事件进行计数。例如,待计数的事件可选自多个事件,比如:正在执行的指令、正在发生的异常、正在执行的异常返回、软件中正在变更的程序计数器、经过的处理周期、正被存取的数据存储器或缓存、正被存取的指令缓存、正在发生的特定类型的异常、正在发生的缓存未命中或线路占用、或正在重新充填的转译后备缓冲器(translat1n lookaside buffer,TLB)。将理解的是,此列表并非穷尽列表,并且许多其他类型的事件能够被计数。此示例中的配置数据包括事件类型寄存器40,该寄存器包括多个字段,每一字段对应于一可编程事件计数器32,并且处理器4能够将定义将由对应的计数器计数的事件类型值写入对应的字段。在另一实施例中,每一可编程事件计数器32可具有对应的配置寄存器,该寄存器包括定义待计数的事件的类型的事件类型字段。
[0051]配置数据12还包括启用寄存器42,该寄存器包括多个字段,每一事件计数器30、32有一字段。每一字段包括用于选择启用还是禁用性能监控计数器的位。当启用时,对应的计数器响应于正在被计数的事件类型的每一次发生而递增其计数值。如果禁用,则即使发生该类型的事件,计数器也不递增。另外,在另一实施例中,每一计数器的启用字段能够在用于每一计数器的单独配置寄存器内被实施。
[0052]在以上所讨论的具有多个特权层级的系统中,一些事件计数器可由一个特权层级(例如,此示例中的ELI)来配置,而其他事件计数器可被保留以由更高特权层级EL2来配置。因此,如图4所示,事件计数器可包括第一子集50和第二子集52,第一子集可被配置为处于在第一特权层级ELI,并且第二子集可被配置为处于第二特权层级EL2。在此示例中,固定事件计数器30被包括在第一子集50中,但在其他示例中,固定事件计数器30可在第二子集中。第二特权层级EL2的代码能够设置边界定义值54 (在本文中被称作HPMN),该值指示性能计数器32的序列内的边界位置。第一特权层级ELI的代码不能存取边界定义值54。例如,在此示例中,边界位置已被设置在事件计数器C2与事件计数器C3之间,以使得位于边界一侧的事件计数器(CCNT及C0至C2)被视作第一子集50,及位于边界另一侧的事件计数器(C3至C7)处于第二子集52中。因此,第二特权层级EL2的代码可存取所有事件计数器,并且通常可将第二子集52用于其自身的用途。第一特权层级ELI的代码无法存取第二子集,并且不能配置这些事件计数器。第一特权层级ELI的代码可仅被限制为配置事件计数器的第一子集。因此,在类型寄存器40和启用寄存器42中,边界值54还可以控制第一特权层级ELI的代码能够写入哪些字段。因此,在第一特权层级ELI中,性能监控控制电路系统10可阻止读取或写入类型和启用寄存器40、42的字段,这些字段对应于第二子集。第二特权层级的代码能够写入类型和启用寄存器40、42的任何字段。
[0053]配置数据包括第一启用值44 (PMCR.E),该值可由第一特权层级ELI或第二特权层级EL2的代码来程序化,以启用或禁用由第一子集50中的事件计数器30、32执行的性能监控。这允许在不损失启用寄存器42中的单个位的情况下禁用性能监控,以使得当稍后再次启用性能监控时,先前启用的相同计数器能够恢复计数。
[0054]第二特权层级的代码也可以具有第二启用值56 (HPME),该值控制启用还是禁用由事件计数器的第二子集52执行的性能监控。第二启用值56可由第二特权层级EL2中的代码来程序化,并且不可被第一特权层级ELI中的代码存取。
[0055]如以上所讨论的,第一特权层级ELI中的代码可以配置性能计数器的第一子集52以对事件进行计数。然而,处理器4可随后转换至更高的特权层级EL2。如果由第一特权层级ELI配置的性能计数器随后继续对事件进行计数,则这可以提供关于在更高特权层级EL2中的操作的信息,出于安全性原因,该信息可能是不合需要的。例如,如果更高的特权层级正在保护安全内容或执行安全性关键任务(比如,核查密码或其他验证数据),则所经过的周期的数目、执行的指令数目等可给出关于该安全处理的信息,这能够使得系统更易于受到攻击或出现安全漏洞。因此,有时可能需要更高特权层级EL2中的代码能够禁用由配置在较低特权层级EL 1的第一子集50中的性能计数器执行的性能计数。在其他情况下,由配置在较低的特权层级的计数器执行的性能计数可能是完全恰当的,因为这将给出对第一特权层级ELI处的代码的性能的正确指示。例如,在图2中示出的示例中,对特权层级EL2处的超级管理器的捕获影响较低特权层级处的应用程序24或访客操作系统22的总体性能,因此,超级管理器20允许配置在较低特权层级处的性能计数器继续对事件进行计数可能是合理的。
[0056]为解决此问题,提供禁用控制标志58 (HPMD),该标志能够由在第二特权层级EL2执行的代码来设置,但不可由在第一特权层级ELI处执行的代码来存取。如果禁用控制标志是0,则当在第二特权层级EL2中进行处理时,由性能计数器第一子集50执行的性能监控继续执行。然而,如果禁用控制标志58由EL2处的代码设置为1,则当处理电路系统4在第二特权层级EL2中执行码时,第一子集50内的任何计数器都被禁止计数。禁用控制标志58不影响由第二子集52中的性能计数器执行的计数,因此这些性能计数器继续正常操作。类似地,如果处理器4处于第一特权层级ELI或较低的特权层级中,则禁用控制标志58也不影响由第一子集50执行的计数。因此,通过使用禁用控制标志58,第二特权层级EL2的代码能够选择是否使自身对第一子集50内的性能计数器隐藏。
[0057]图5示出了另一示例,其中性能计数器可被划分为对应于三个或更多个特权层级的更多子集。因此,除图4中讨论的第一子集和第二子集50、52外,存在性能计数器的第三子集60。性能计数器的第二子集52可由在第二特权层级EL2处执行的指令来配置。性能计数器的第一子集50可由在第一特权层级ELI和第二特权层级EL2处执行的指令来配置。性能计数器的第三子集60可由在特权状态ELO、ELUEL2中的任何特权状态下执行的指令来配置。在此情形下,可提供配置数据的分层集合,该集合包括以下值:
[0058]-PMCR.E (启用标志44)可由在EL0、EL1和EL2处执行的程序指令程序化,并且启用/禁用第三子集60。
[0059]-HDCR0.ΗΡΜΕ0 (另一第二启用标志66)可由在ELI或EL2处执行的程序指令程序化,并且启用/禁用第一子集50。
[0060].HDCR1.HPME1 (第二启用标志56)可由在EL2处执行的程序指令程序化,并且启用/禁用第二子集52。
[0061]-HDCR0.HPMD0 (另一禁用控制标志68)可由在ELI或EL2处执行的程序指令程序化,并且在处理电路系统在ELI或EL2执行指令时禁用第三子集60。
[0062].HDCR1.HPMD1 (禁用控制标志58)可由在EL2处执行的程序指令程序化,并且在处理器4在EL2处执行指令时禁用第一子集50和第三子集60。
[0063]-HDCR0.HDMN0 (另一边界定义值64)可由在ELI或EL2处执行的程序指令程序化,并且在第一子集50和第三子集60之间设置分隔。
[0064].HDCR1.HDMN1 (边界定义值54)可由在EL2处执行的程序指令程序化,并且在第一子集50和第二子集52之间设置分隔。
[0065]以此方式,每一更高的特权层级可将性能计数器划分为可由自身配置的子集和可在较低特权状态下配置的子集,并且当处理当前处于更高特权状态下时,可选择性地禁用由在较低特权状态下配置的计数器执行的性能计数。每一后续特权层级可随后对更低的特权状态设置类似的控制。例如,如果ELO以下存在更多特权层级,则第三子集60可进一步由在EL0处执行的代码以类似于第三子集60由ELI处的代码控制和第一子集50由EL2处的代码控制的方式进行划分和控制。
[0066]图6示出了使用禁用控制标志将在较高特权状态下的代码对配置在较低特权状态下的性能计数器隐藏的示例。在步骤100中,第二特权层级EL2处的代码将禁用控制标志HPMD设置为预定值(在此示例中为1)。超级管理器也可编程边界定义值HMPN,以将性能计数器划分为第一子集和第二子集,和/或对第二子集进行配置以对事件进行计数并将第二启用标志56设置为1以启用第二子集52。然后,第二子集将继续经由图6中的序列对事件进行计数。在步骤101中,位于EL2的超级管理器启动访客操作系统,并且处理因此切换至第一特权层级ELI。在步骤102处,在第一特权层级ELI运作的代码设置配置数据12,以使得性能监控器电路的第一子集50追踪各个事件。随后,在步骤104中,在第一特权层级ELI中继续进行性能监控和处理。在步骤106中,发生产生对第二特权层级EL2的捕获的事件。在切换特权状态时,因为禁用控制标志HPMD被设
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1