一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PMU : TrustedFirmware運行時的性能數(shù)據(jù)的統(tǒng)計方法

冬至子 ? 來源:Arm精選 ? 作者:baron ? 2023-12-06 16:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

思考: 如何統(tǒng)計Trustedfirmware的性能數(shù)據(jù)? tee的呢?uboot的呢?

如何統(tǒng)計cache命令率?

如何計算 IPC:Instructions Per Cycle?

Armv8-A CPU 中的性能監(jiān)控單元 (PMU) 提供硬件級性能監(jiān)控和分析功能。PMU 通過計數(shù)器收集硬件事件計數(shù)。計數(shù)器包括周期計數(shù)器和事件計數(shù)器。您可以配置:

*每個事件計數(shù)器對指定的硬件事件進行計數(shù)。
*每個計數(shù)器從各種 CPU 異常級別和狀態(tài)的工作負(fù)載收集硬件事件。

perf 等工具使用 PMU 來分析在 Armv8-A CPU 上運行的 Linux 應(yīng)用程序。然而,沒有通用的方法來使用 PMU 來分析固件,因為它運行在裸機環(huán)境中。

要使用 PMU 分析固件,一種簡單的方法是以庫的形式添加 PMU 支持。在這篇博文中,我們提供了一個 PMU 庫作為參考實現(xiàn)。該庫已在基于Armv8.0-A CPU的平臺上得到驗證。我們還描述了如何在固件中添加 PMU 支持以及如何使用 PMU 分析固件。Trusted Firmware-A (TF-A) 和 U-Boot 用作示例固件。

下表列出了 PMU 庫的組件

image.png

第 1 階段: 向固件添加 PMU 支持

使用以下命令將PMU庫的所有文件解壓到固件 lib/pmu 中的 路徑。 unzip armv8_pmuv3_library.zip-d ${FIRMWARE_PATH}/lib/pmu

根據(jù)您使用的固件,您需要對文件進行如下特定更改。Makefile

(1)、TF-A

Makefile 如下修改位于 TF-A 根路徑中的現(xiàn)有文件。

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 根路徑下的現(xiàn)有文件,如下所示。

1.UBOOTINCLUDE += -Ilib/pmu

Makefile 在與 PMU 庫相同的目錄中創(chuàng)建一個文件。按如下方式填寫文件。

1.obj-y += armv8_pmuv3_fn.o armv8_pmuv3_events.o

現(xiàn)在,您可以重建固件。如果構(gòu)建成功,請進入第 2 階段。

第 2 階段:選擇 PMU 事件進行分析

首先,獲取運行固件的 Armv8-A CPU 的支持 PMU 事件。有關(guān) PMU 事件,請參閱 CPU 技術(shù)參考手冊 (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 格式轉(zhuǎn)換為 C 格式,并生成名為armv8pmuv3events.c. 您可以按如下方式使用它。

首先,使用以下命令列出所有支持轉(zhuǎn)換的CPU名稱。

python3 jevents.py--list然后,使用以下命令指定要轉(zhuǎn)換的CPU的名稱。該命令將生成名為armv8pmuv3events.c. 該文件包含兩種類型的數(shù)組。一種是針對指定CPU的支持PMU事件。另一個是針對選定的 PMU 事件進行分析。 python3 jevents.py--cpu

armv8_pmuv3_events.c生成的文件示例 jevents.py 如下。我們將 cpu 名稱指定為cortex-a53。名為的數(shù)組pmu_events_map包含 Cortex-A53 的所有支持 PMU 事件。這與 Cortex-A53 TRM 相同。您可以從此處選擇 PMU 事件并將所選事件放入名為 的數(shù)組中evt_select。

image.png

(2)、選擇 PMU 事件進行分析 在初始分析中,通常您需要選擇各種 PMU 事件。這將使您全面了解要分析的代碼。

對于 Armv8-A CPU,每個 CPU 的可用事件計數(shù)器是有限的。您可以參考 CPU TRM 以獲取該編號。如果所需的 PMU 事件數(shù)量超過可用計數(shù)器,可以使用以下方法。

  • 將所有要選擇的 PMU 事件分組。每組中的事件數(shù)量不得超過 PMU 的可用計數(shù)器。
  • 創(chuàng)建多個pmu_event_selected 結(jié)構(gòu)數(shù)組并將每一組放入一個數(shù)組中。
  • 多次分析相同的代碼,一次選擇一個陣列,然后重復(fù)該過程,直到測量所有事件。

例如,我們 在.c文件中創(chuàng)建兩個名為 和 的pmu_event_selected 結(jié)構(gòu)體數(shù)組。對于 Cortex-A53,可使用 1 個周期計數(shù)器和 6 個事件計數(shù)器。每個數(shù)組中的 PMU 事件數(shù)量不超過此數(shù)量。此外,在每個陣列中,PMU 事件都是相關(guān)的,以確保分析數(shù)據(jù)具有可比性。

我們將這兩個數(shù)組用于以下分析示例。

image.png

第 3 階段: 使用 PMU 分析固件

現(xiàn)在,您可以使用 PMU 來分析固件。對要分析的固件中的特定代碼使用以下過程。

  • 將開始分析點放在代碼之前。這將配置、啟用并讀取每個 PMU 計數(shù)器的當(dāng)前值作為預(yù)分析值。
  • 將停止分析點放置在代碼后面。這將禁用每個 PMU 計數(shù)器值并將其讀取為分析后值。
  • 重建固件并再次運行代碼。計算每個 PMU 計數(shù)器的分析前值和分析后值之間的差異。這將收集統(tǒng)計分析結(jié)果。

在PMU庫中,armv8pmuv3fn.c 提供了參考實現(xiàn)。

(1)、將分析點放置在固件中

您只需在要分析的代碼之間添加兩個名為pmuv3startProfiling 和的函數(shù)即可。pmuv3stopProfiling對于每個分析,傳遞一個pmueventselected 結(jié)構(gòu)數(shù)組作為參數(shù)。

根據(jù)您想要分析的 PMU 事件數(shù)量,您需要分析一次或多次。以下是兩個分析示例。

例一

要分析 TF-A 中的函數(shù)并重點關(guān)注緩存行為,您只能選擇 為單個分析命名enablemmuel3 的數(shù)組 。evtselectcache

image.png

例二

要了解U-Boot 中的工作負(fù)載特征,您可以選擇名為 和 的crc32 陣列 。這樣,您需要對同一代碼進行多次分析才能收集所有分析數(shù)據(jù)。evtselectcacheevtselectwlc

由于該domemcrc 函數(shù)是通過命令調(diào)用的,因此您可以對固件進行一次編程,然后通過多次輸入相同的命令來重復(fù)分析。

image.png

(2)、了解 PMU 分析的實現(xiàn)

該函數(shù)startProfiling 執(zhí)行以下操作。

  • 為 PMU 執(zhí)行必要的初始化。它檢查CPU PMU 支持的事件計數(shù)器數(shù)量是否適合所選事件。然后,它設(shè)置MDCREL2 或 MDCREL3 以在當(dāng)前異常級別啟用 PMU 分析。這是因為固件通常在 EL2/EL3 或安全狀態(tài)下運行,其中禁止分析以防止信息泄漏。
  • 配置每個 PMU 計數(shù)器以分析當(dāng)前異常級別和選定的 PMU 事件。
  • 啟用每個 PMU 計數(shù)器。
  • 讀取每個 PMU 計數(shù)器的當(dāng)前值作為預(yù)分析值。

該函數(shù)stopProfiling 執(zhí)行以下操作。

  • 禁用每個 PMU 計數(shù)器。
  • 讀取每個 PMU 計數(shù)器的當(dāng)前值作為分析后值。
  • 轉(zhuǎn)儲此分析的結(jié)果。
  • 對 PMU 執(zhí)行必要的去初始化。這會禁用工作在 EL2/EL3 或安全狀態(tài)的 PMU。

對于上一部分提到的示例,在 Juno r2 平臺上執(zhí)行分析。分析的輸出如下。

例一

image.png

從輸出中可以看到,它記錄了此分析中每個選定 PMU 事件和周期的預(yù)分析和后分析值。此外,它還計算差異,并將它們記錄在名為 的列中DELTA。

對于 Cortex-A53 CPU,PMU 事件L1DTLBREFILL 包含在 的計數(shù)中L1DCACHEREFILL。因此,您可能會發(fā)現(xiàn) 的計數(shù)值L1DCACHEREFILL 大于 的計數(shù)值L1D_CACHE。

示例二

image.png

正如您在上面看到的,cycles 兩個分析會話的結(jié)果幾乎相同。

從第一個分析結(jié)果中,您可以參考Arm架構(gòu)參考手冊來抽象出一些有意義的指標(biāo),如下所示。

image.png

根據(jù)第二個分析結(jié)果,您可以計算 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.

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2291

    瀏覽量

    96373
  • PMU
    PMU
    +關(guān)注

    關(guān)注

    1

    文章

    123

    瀏覽量

    22303
  • ARMv8
    +關(guān)注

    關(guān)注

    1

    文章

    35

    瀏覽量

    14461
  • Cortex-A53
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    21593
  • TRM
    TRM
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    3477
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何縮短Vivado的運行時

    在Vivado Implementation階段,有時是有必要分析一下什么原因?qū)е?b class='flag-5'>運行時間(runtime)過長,從而找到一些方法來縮短運行時間。
    的頭像 發(fā)表于 05-29 14:37 ?1.5w次閱讀
    如何縮短Vivado的<b class='flag-5'>運行時</b>間

    紫金橋組態(tài)軟件新的功能_運行時組態(tài)

    運行時組態(tài)是組態(tài)軟件新近提出的新的概念。運行時組態(tài)是在運行環(huán)境下對已有工程進行修改,添加新的功能。它不同于在線組態(tài),在線組態(tài)是在工程運行的同時,進入組態(tài)環(huán)境,在組態(tài)環(huán)境中對工程進行修改
    發(fā)表于 10-13 16:17 ?2次下載
    紫金橋組態(tài)軟件新的功能_<b class='flag-5'>運行時</b>組態(tài)

    利用StopWatch監(jiān)控Java代碼運行時間和分析性能

    利用StopWatch監(jiān)控Java代碼運行時間和分析性能。
    的頭像 發(fā)表于 07-21 16:51 ?3190次閱讀

    Go運行時:4年之后

    自 2018 年以來,Go GC,以及更廣泛的 Go 運行時,一直在穩(wěn)步改進。近日,Go 社區(qū)總結(jié)了 4 年來 Go 運行時的一些重要變化。
    的頭像 發(fā)表于 11-30 16:21 ?1050次閱讀

    什么是Kubernetes容器運行時CRI

    起初,Docker是事實上的容器技術(shù)標(biāo)準(zhǔn),Kubernetes v1.5之前的代碼中直接調(diào)用Docker API,實現(xiàn)容器運行時的相關(guān)操作。
    的頭像 發(fā)表于 02-20 16:22 ?1998次閱讀
    什么是Kubernetes容器<b class='flag-5'>運行時</b>CRI

    AN021 測量MCU代碼運行時間的幾種方法

    AN021 測量MCU代碼運行時間的幾種方法
    發(fā)表于 02-27 18:23 ?0次下載
    AN021 測量MCU代碼<b class='flag-5'>運行時</b>間的幾種<b class='flag-5'>方法</b>

    怎樣避免電力電容器運行時漏油

    電力電容器運行中,會因為各種因素出現(xiàn)故障。在電力電容器運行時遇到的故障中,出現(xiàn)滲油和漏油的概率非常大。那么如何避免電力電容器運行時漏油呢?庫克庫伯電氣會在接下來的文章中,針對電力電容器漏油的原因進行分析,提出解決電容器漏油的
    的頭像 發(fā)表于 04-07 16:01 ?1308次閱讀

    優(yōu)化HBM2E運行時性能

    性能仍然是任何復(fù)雜片上系統(tǒng) (SoC) 設(shè)計的關(guān)鍵因素。此外,復(fù)雜性每天都在增加,這給工程師跟蹤設(shè)計性能帶來了挑戰(zhàn),但他們的任務(wù)是不斷提高芯片性能。在運行時,
    的頭像 發(fā)表于 05-26 10:17 ?862次閱讀
    優(yōu)化HBM2E<b class='flag-5'>運行時</b><b class='flag-5'>性能</b>

    JVM運行時數(shù)據(jù)區(qū)之堆內(nèi)存

    說一下 JVM 運行時數(shù)據(jù)區(qū)吧,都有哪些區(qū)?分別是干什么的?
    的頭像 發(fā)表于 08-19 14:35 ?963次閱讀
    JVM<b class='flag-5'>運行時數(shù)據(jù)</b>區(qū)之堆內(nèi)存

    ch32v307記錄程序運行時

    ch32v307記錄程序運行時間 在程序開發(fā)中,很重要的一項任務(wù)就是對程序的運行時間進行評估。對于大型的程序系統(tǒng)來說,它們通常需要處理大量的數(shù)據(jù)或進行復(fù)雜的計算操作。因此,如果程序的運行時
    的頭像 發(fā)表于 08-22 15:53 ?1273次閱讀

    Xilinx運行時(XRT)發(fā)行說明

    電子發(fā)燒友網(wǎng)站提供《Xilinx運行時(XRT)發(fā)行說明.pdf》資料免費下載
    發(fā)表于 09-14 10:01 ?0次下載
    Xilinx<b class='flag-5'>運行時</b>(XRT)發(fā)行說明

    如何保證它們?nèi)萜?b class='flag-5'>運行時的安全?

    緊密耦合的容器運行時繼承了主機操作系統(tǒng)的安全態(tài)勢和攻擊面。運行時或主機內(nèi)核中的任何漏洞及其利用都會成為攻擊者的潛在切入點。
    的頭像 發(fā)表于 11-03 15:24 ?979次閱讀

    jvm運行時內(nèi)存區(qū)域劃分

    JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是Java編程語言的運行環(huán)境。JVM的主要功能是將Java源代碼轉(zhuǎn)換為機器代碼,并且在運行時管理Java程序的內(nèi)存。JVM
    的頭像 發(fā)表于 12-05 14:08 ?732次閱讀

    三菱plc累計運行時間怎么編程

    具有重要意義。本文將詳細(xì)介紹如何使用三菱PLC編程實現(xiàn)累計運行時間的統(tǒng)計功能。 一、概述 累計運行時間是指設(shè)備或系統(tǒng)在一定時間內(nèi)的總運行時間。在工業(yè)生產(chǎn)中,對設(shè)備的累計
    的頭像 發(fā)表于 06-20 11:31 ?3592次閱讀

    PLC設(shè)備運行時間數(shù)據(jù)采集到運維管理平臺如何實現(xiàn)

    在工廠設(shè)備管理工作中,往往需要統(tǒng)計各個設(shè)備的運行時間,能夠衡量其運行性能,主要為了方便管理人員對設(shè)備進行定期維護,以保障設(shè)備處于穩(wěn)定高效的運行
    的頭像 發(fā)表于 06-20 16:02 ?210次閱讀
    PLC設(shè)備<b class='flag-5'>運行時間數(shù)據(jù)</b>采集到運維管理平臺如何實現(xiàn)