PMU : TrustedFirmware运行时的性能数据的统计方法

思考: 如何统计trustedfirmware的性能数据? tee的呢?uboot的呢?
如何统计cache命令率?
如何计算 ipc:instructions per cycle?
armv8-a cpu 中的性能监控单元 (pmu) 提供硬件级性能监控和分析功能。pmu 通过计数器收集硬件事件计数。计数器包括周期计数器和事件计数器。您可以配置:
*每个事件计数器对指定的硬件事件进行计数。
*每个计数器从各种 cpu 异常级别和状态的工作负载收集硬件事件。
perf 等工具使用 pmu 来分析在 armv8-a cpu 上运行的 linux 应用程序。然而,没有通用的方法来使用 pmu 来分析固件,因为它运行在裸机环境中。
要使用 pmu 分析固件,一种简单的方法是以库的形式添加 pmu 支持。在这篇博文中,我们提供了一个 pmu 库作为参考实现。该库已在基于armv8.0-a cpu的平台上得到验证。我们还描述了如何在固件中添加 pmu 支持以及如何使用 pmu 分析固件。trusted firmware-a (tf-a) 和 u-boot 用作示例固件。
下表列出了 pmu 库的组件
第 1 阶段: 向固件添加 pmu 支持使用以下命令将pmu库的所有文件解压到固件 lib/pmu 中的 路径。 unzip armv8_pmuv3_library.zip-d ${firmware_path}/lib/pmu
根据您使用的固件,您需要对文件进行如下特定更改。makefile
(1)、tf-a
makefile 如下修改位于 tf-a 根路径中的现有文件。
1.bl_common_sources += lib/pmu/armv8_pmuv3_fn.c lib/pmu/armv8_pmuv3_events.c
2.includes += -ilib/p
(2)、uboot
修改makefile u-boot 根路径下的现有文件,如下所示。
1.ubootinclude += -ilib/pmu
makefile 在与 pmu 库相同的目录中创建一个文件。按如下方式填写文件。
1.obj-y += armv8_pmuv3_fn.o armv8_pmuv3_events.o
现在,您可以重建固件。如果构建成功,请进入第 2 阶段。
第 2 阶段:选择 pmu 事件进行分析首先,获取运行固件的 armv8-a cpu 的支持 pmu 事件。有关 pmu 事件,请参阅 cpu 技术参考手册 (trm)。
jevents.py在 pmu 库中,您还可以使用按以下步骤命名的 python 脚本。
(1)、获取指定cpu支持的pmu事件 github machine-readable data 维护每个 arm cpu 支持的 pmu 事件。它采用json格式存储pmu事件的事件助记符、事件编号等信息。该信息与cpu trm中的信息一致。
jevents.pypmu 库中 命名的 python 脚本克隆 machine-readable data, 将 json 格式转换为 c 格式,并生成名为armv8pmuv3events.c. 您可以按如下方式使用它。
首先,使用以下命令列出所有支持转换的cpu名称。
python3 jevents.py--list然后,使用以下命令指定要转换的cpu的名称。该命令将生成名为armv8pmuv3events.c. 该文件包含两种类型的数组。一种是针对指定cpu的支持pmu事件。另一个是针对选定的 pmu 事件进行分析。 python3 jevents.py--cpu
armv8_pmuv3_events.c生成的文件示例 jevents.py 如下。我们将 cpu 名称指定为cortex-a53。名为的数组pmu_events_map包含 cortex-a53 的所有支持 pmu 事件。这与 cortex-a53 trm 相同。您可以从此处选择 pmu 事件并将所选事件放入名为 的数组中evt_select。
(2)、选择 pmu 事件进行分析 在初始分析中,通常您需要选择各种 pmu 事件。这将使您全面了解要分析的代码。
对于 armv8-a cpu,每个 cpu 的可用事件计数器是有限的。您可以参考 cpu trm 以获取该编号。如果所需的 pmu 事件数量超过可用计数器,可以使用以下方法。
将所有要选择的 pmu 事件分组。每组中的事件数量不得超过 pmu 的可用计数器。创建多个pmu_event_selected 结构数组并将每一组放入一个数组中。多次分析相同的代码,一次选择一个阵列,然后重复该过程,直到测量所有事件。例如,我们 在.c文件中创建两个名为 和 的pmu_event_selected 结构体数组。对于 cortex-a53,可使用 1 个周期计数器和 6 个事件计数器。每个数组中的 pmu 事件数量不超过此数量。此外,在每个阵列中,pmu 事件都是相关的,以确保分析数据具有可比性。
我们将这两个数组用于以下分析示例。
第 3 阶段: 使用 pmu 分析固件现在,您可以使用 pmu 来分析固件。对要分析的固件中的特定代码使用以下过程。
将开始分析点放在代码之前。这将配置、启用并读取每个 pmu 计数器的当前值作为预分析值。将停止分析点放置在代码后面。这将禁用每个 pmu 计数器值并将其读取为分析后值。重建固件并再次运行代码。计算每个 pmu 计数器的分析前值和分析后值之间的差异。这将收集统计分析结果。在pmu库中,armv8pmuv3fn.c 提供了参考实现。
(1)、将分析点放置在固件中
您只需在要分析的代码之间添加两个名为pmuv3startprofiling 和的函数即可。pmuv3stopprofiling对于每个分析,传递一个pmueventselected 结构数组作为参数。
根据您想要分析的 pmu 事件数量,您需要分析一次或多次。以下是两个分析示例。
例一
要分析 tf-a 中的函数并重点关注缓存行为,您只能选择 为单个分析命名enablemmuel3 的数组 。evtselectcache
例二
要了解u-boot 中的工作负载特征,您可以选择名为 和 的crc32 阵列 。这样,您需要对同一代码进行多次分析才能收集所有分析数据。evtselectcacheevtselectwlc
由于该domemcrc 函数是通过命令调用的,因此您可以对固件进行一次编程,然后通过多次输入相同的命令来重复分析。
(2)、了解 pmu 分析的实现
该函数startprofiling 执行以下操作。
为 pmu 执行必要的初始化。它检查cpu pmu 支持的事件计数器数量是否适合所选事件。然后,它设置mdcrel2 或 mdcrel3 以在当前异常级别启用 pmu 分析。这是因为固件通常在 el2/el3 或安全状态下运行,其中禁止分析以防止信息泄漏。配置每个 pmu 计数器以分析当前异常级别和选定的 pmu 事件。启用每个 pmu 计数器。读取每个 pmu 计数器的当前值作为预分析值。该函数stopprofiling 执行以下操作。
禁用每个 pmu 计数器。读取每个 pmu 计数器的当前值作为分析后值。转储此分析的结果。对 pmu 执行必要的去初始化。这会禁用工作在 el2/el3 或安全状态的 pmu。对于上一部分提到的示例,在 juno r2 平台上执行分析。分析的输出如下。
例一
从输出中可以看到,它记录了此分析中每个选定 pmu 事件和周期的预分析和后分析值。此外,它还计算差异,并将它们记录在名为 的列中delta。
对于 cortex-a53 cpu,pmu 事件l1dtlbrefill 包含在 的计数中l1dcacherefill。因此,您可能会发现 的计数值l1dcacherefill 大于 的计数值l1d_cache。
示例二
正如您在上面看到的,cycles 两个分析会话的结果几乎相同。
从第一个分析结果中,您可以参考arm架构参考手册来抽象出一些有意义的指标,如下所示。
根据第二个分析结果,您可以计算 instructions per cycle (ipc) as follows.
ipc = inst_retired / cycles
the ipc of this workload is 0.23. this is caused by many mem_access operations. you might determine the workload as the computation-intensive one.

航天宏图数据产品帮助客户实现数字化、智慧化的遥感应用服务
导致物联网应用设备开发显着增加的原因
江西省首个基于飞腾CPU的中小学科创教室正式开课
台积电和联电长达25年的恩仇录
APCI控机的变压器保护装置
PMU : TrustedFirmware运行时的性能数据的统计方法
微电网运行总成本最低的规划方案分析
赫联电子荣获CEDA年度优秀会员
刷上魅族Flyme6的魅蓝X,会成为最好看的魅族手机吗?
区块链IM即时通讯系统区块链社交软件实现原理
北斗星通2023年业绩预告:投资收益增长,芯片收入下滑
Python 3.8.1有什么新功能和优化
如何在DS26303 LIU上启用ITU-T G.703 2048kHz同步接口
关于LED封装的不同,COB封装与传统LED封装的区别
模拟电路网络课件 第二十五节:集成运算放大器中的电流源
温室环境监测仪的作用是什么,它的使用效果如何
国内MCU怎么样?ic芯片小编为大家分享
让AI确保敏感信息安全的五种方式
商汤科技C轮战略融资6亿美元 阿里巴巴领投
量子密码的绝对安全还只是假设,只存于理论