在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PMU : TrustedFirmware運行時的性能數據的統計方法

冬至子 ? 來源:Arm精選 ? 作者:baron ? 2023-12-06 16:34 ? 次閱讀

思考: 如何統計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 庫的組件

image.png

第 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。

image.png

(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 事件都是相關的,以確保分析數據具有可比性。

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

image.png

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

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

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

在PMU庫中,armv8pmuv3fn.c 提供了參考實現。

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

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

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

例一

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

image.png

例二

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

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

image.png

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

該函數startProfiling 執行以下操作。

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

該函數stopProfiling 執行以下操作。

  • 禁用每個 PMU 計數器。
  • 讀取每個 PMU 計數器的當前值作為分析后值。
  • 轉儲此分析的結果。
  • 對 PMU 執行必要的去初始化。這會禁用工作在 EL2/EL3 或安全狀態的 PMU。

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

例一

image.png

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

對于 Cortex-A53 CPU,PMU 事件L1DTLBREFILL 包含在 的計數中L1DCACHEREFILL。因此,您可能會發現 的計數值L1DCACHEREFILL 大于 的計數值L1D_CACHE。

示例二

image.png

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

從第一個分析結果中,您可以參考Arm架構參考手冊來抽象出一些有意義的指標,如下所示。

image.png

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計數器
    +關注

    關注

    32

    文章

    2278

    瀏覽量

    95644
  • PMU
    PMU
    +關注

    關注

    1

    文章

    109

    瀏覽量

    21915
  • ARMv8
    +關注

    關注

    1

    文章

    35

    瀏覽量

    14322
  • Cortex-A53
    +關注

    關注

    0

    文章

    33

    瀏覽量

    21493
  • TRM
    TRM
    +關注

    關注

    0

    文章

    13

    瀏覽量

    3374
收藏 0人收藏

    評論

    相關推薦

    如何縮短Vivado的運行時

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

    紫金橋組態軟件新的功能_運行時組態

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

    利用StopWatch監控Java代碼運行時間和分析性能

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

    Go運行時:4年之后

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

    什么是Kubernetes容器運行時CRI

    起初,Docker是事實上的容器技術標準,Kubernetes v1.5之前的代碼中直接調用Docker API,實現容器運行時的相關操作。
    的頭像 發表于 02-20 16:22 ?1701次閱讀
    什么是Kubernetes容器<b class='flag-5'>運行時</b>CRI

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

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

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

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

    優化HBM2E運行時性能

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

    JVM運行時數據區之堆內存

    說一下 JVM 運行時數據區吧,都有哪些區?分別是干什么的?
    的頭像 發表于 08-19 14:35 ?811次閱讀
    JVM<b class='flag-5'>運行時數據</b>區之堆內存

    ch32v307記錄程序運行時

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

    Xilinx運行時(XRT)發行說明

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

    如何保證它們容器運行時的安全?

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

    jvm運行時內存區域劃分

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

    jvm管理的內存包括哪幾個運行時數據內存

    JVM(Java虛擬機)是Java程序的運行環境,它提供了內存管理機制來管理Java程序所需的運行時數據內存。這些運行時數據內存包括堆內存、棧內存、方法區(元
    的頭像 發表于 12-05 14:09 ?687次閱讀

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

    具有重要意義。本文將詳細介紹如何使用三菱PLC編程實現累計運行時間的統計功能。 一、概述 累計運行時間是指設備或系統在一定時間內的總運行時間。在工業生產中,對設備的累計
    的頭像 發表于 06-20 11:31 ?2865次閱讀
    主站蜘蛛池模板: l欧美18一19sex性 | 亚洲欧美一区二区三区另类 | 4438成人成人高清视频 | 日本大片在线看 | 四虎影永久在线观看精品 | 欧美天堂在线观看 | 色偷偷成人网免费视频男人的天堂 | 欧美精品黑人性xxxx | 亚洲成网 | 婷婷丁香久久 | 第三级视频在线观看 | 国产色爽女小说免费看 | 天堂视频在线免费观看 | 第四色男人天堂 | wwwww色| 日本不卡在线观看免费v | 手机在线观看免费视频 | 亚洲bbb | 免费黄色的视频 | 男女做性无遮挡免费视频 | 亚洲国产综合人成综合网站00 | 一区二区三区视频观看 | 久久国产精品视频 | 深夜视频免费在线观看 | 国产精品嫩草影院一二三区 | 亚洲va欧美va国产综合久久 | 视频一区视频二区在线观看 | 2022年国产精品久久久久 | 不卡无毒免费毛片视频观看 | 国产一区二区中文字幕 | 国产在线观看色 | 天天色天天看 | 国产精品久久久久久久久久妇女 | free chinese 国产精品 | 性欧美zoz0另类xxxx | 无毒在线| 在线网址你懂的 | 久久瑟 | 91免费视频网 | 奇米影视久久 | 黄网站在线观看 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品