吴忠躺衫网络科技有限公司

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

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

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

AMU與PMU有哪些差異點(diǎn)呢?

Linux閱碼場(chǎng) ? 來(lái)源:Linux閱碼場(chǎng) ? 2023-01-31 10:40 ? 次閱讀

1. AMU簡(jiǎn)介

AMU是ActivityMonitor Unit的縮寫,在Arm v8.4架構(gòu)中引入。從Arm文檔描述來(lái)看,AMU與PMU(PerformanceMonitor Unit)有類似的性能監(jiān)控功能,但其設(shè)計(jì)初衷是為了系統(tǒng)管理,而PMU的用途是用戶態(tài)程序或者調(diào)試功能。AMU可以為系統(tǒng)性能、功耗管理提供持續(xù)不斷的監(jiān)控并獲取非常有用的信息

在介紹AMU之前,先介紹下PMU幾個(gè)基本概念,對(duì)了解AMU會(huì)有所幫助。PMU用于跟蹤、統(tǒng)計(jì)系統(tǒng)內(nèi)部的一些底層硬件事件,這些事件反映了程序在CPU上執(zhí)行的行為,可以幫助我們對(duì)程序進(jìn)行分析和調(diào)優(yōu):

Event,即事件,例如CPU相關(guān)的事件包括執(zhí)行指令數(shù),時(shí)鐘周期等,cache相關(guān)的事件包括各級(jí)cache訪問(wèn)、refill計(jì)數(shù)等,以及與TLB有關(guān)的事件等。每個(gè)event都有一個(gè)特定的eventid。

Counter,事件計(jì)數(shù)器,數(shù)量固定,以Cortex-A53為例,一共有1+6個(gè)Counter,CycleCounter只用于記錄CPU Cycle數(shù),另外6個(gè)Counter是可配置的Counter,根據(jù)配置選擇的Event進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)器發(fā)生溢出時(shí),計(jì)數(shù)器會(huì)產(chǎn)生overflow中斷。

04c362b2-96ca-11ed-bfe3-dac502259ad0.png

AMUv1架構(gòu)定義(architecturally defined)4個(gè)固定的EventCounter,分別是:

04eb2a0e-96ca-11ed-bfe3-dac502259ad0.jpg

既然是架構(gòu)規(guī)定要實(shí)現(xiàn)的,那么一定是被經(jīng)常用到的Event。未來(lái)可能會(huì)增加固定Counter的數(shù)量,AMU最多可支持16個(gè)固定Counter。

除了固定Counter,還支持最多16個(gè)輔助的Counter,這些Counter可以做成固定的也可以是可配置的,取決于具體實(shí)現(xiàn)。所有AMUEvent Counter都是64位的,在溢出時(shí)沒有提示或者中斷。

2. AMU寄存器

AMU寄存器如下圖所列,

0510730e-96ca-11ed-bfe3-dac502259ad0.jpg

AMU寄存器通過(guò)systemregister接口MRS和MSR指令進(jìn)行訪問(wèn)。

訪問(wèn)控制

可通過(guò)配置控制是否允許更低EL級(jí)別訪問(wèn)AMU寄存器。AMUSERENR_EL0.ENbit控制EL0訪問(wèn)AMU寄存器,可在EL1,EL2,EL3中配置。CPTR_EL2.TAMbit控制來(lái)自EL0和EL1的訪問(wèn),CPTR_EL3.TAMbit控制來(lái)自EL0,EL1和EL2的訪問(wèn)。其他的配置,只允許在最高的EL級(jí)別中進(jìn)行。

Counter寄存器

0532b4f0-96ca-11ed-bfe3-dac502259ad0.jpg

Counter寄存器都有以下特點(diǎn):

都是64位寄存器,并且overflow時(shí)不產(chǎn)生狀態(tài)提示或者中斷;

CPU復(fù)位后Counter寄存器值恢復(fù)為0;

Event Type寄存器

0641eb9a-96ca-11ed-bfe3-dac502259ad0.jpg

EventType寄存器配置了各Counter對(duì)哪個(gè)event進(jìn)行計(jì)數(shù),這點(diǎn)與PMU的PMEVTYPER_EL0寄存器類似。

AMCNTENSET0_EL0/AMCNTENCLR0_EL0可對(duì)各Counterenable/disable進(jìn)行控制,其他寄存器含義可參考ARM文檔,這里不一一介紹。

3. 代碼實(shí)現(xiàn)

在Kernel中通過(guò)CONFIG_ARM64_AMU_EXTN宏進(jìn)行AMU代碼控制,Kernel最早支持AMU的功能,在這個(gè)patch中:

arm64: add support for the AMU extension v1

在arch/arm64/include/asm/sysreg.h中定義了AMU各寄存器的地址

/* Definitions for system register interface to AMU for ARMv8.4
onwards */
#define SYS_AM_EL0(crm, op2) sys_reg(3,
3, 13, (crm), (op2))
#define SYS_AMCR_EL0 SYS_AM_EL0(2,
0)
#define SYS_AMCFGR_EL0        SYS_AM_EL0(2, 1)
#define SYS_AMCGCR_EL0        SYS_AM_EL0(2, 2)
#define SYS_AMUSERENR_EL0        SYS_AM_EL0(2, 3)
#define SYS_AMCNTENCLR0_EL0  SYS_AM_EL0(2, 4)
#define SYS_AMCNTENSET0_EL0        SYS_AM_EL0(2, 5)
#define SYS_AMCNTENCLR1_EL0  SYS_AM_EL0(3, 0)
#define SYS_AMCNTENSET1_EL0        SYS_AM_EL0(3, 1)
#define SYS_AMEVCNTR0_EL0(n)  SYS_AM_EL0(4 + ((n) >> 3), (n)
& 7)
#define SYS_AMEVTYPER0_EL0(n)        SYS_AM_EL0(6 + ((n) >> 3), (n)
& 7)
#define SYS_AMEVCNTR1_EL0(n)  SYS_AM_EL0(12 + ((n) >> 3), (n)
& 7)
#define SYS_AMEVTYPER1_EL0(n)        SYS_AM_EL0(14 + ((n) >> 3), (n)
& 7)
/* AMU v1: Fixed (architecturally defined) activity monitors */
#define SYS_AMEVCNTR0_CORE_EL0        SYS_AMEVCNTR0_EL0(0)
#define SYS_AMEVCNTR0_CONST_EL0        SYS_AMEVCNTR0_EL0(1)
#define SYS_AMEVCNTR0_INST_RET_EL0 SYS_AMEVCNTR0_EL0(2)
#define SYS_AMEVCNTR0_MEM_STALL        SYS_AMEVCNTR0_EL0(3)

在arm-trusted-firmware中,也有AMU寄存器讀寫相關(guān)代碼,還包括上下電時(shí)AMU備份恢復(fù)的操作,代碼主要在lib/extensions/amu/aarch64/和lib/cpus/aarch64/cpuamu_helpers.S。

4. AMU的應(yīng)用

在內(nèi)核中有這么一個(gè)patch,目的是為了讓調(diào)度LoadTracking的FIE計(jì)算更準(zhǔn)確,

arm64: use activity monitors for frequency invariance

在此之前,Kernel中的freq scale計(jì)算都是通過(guò)cpufreq模塊記錄的當(dāng)前頻率和最大頻率來(lái)計(jì)算的,但是實(shí)際頻率可能在Kernel之外的地方發(fā)生變化,與Kernel cpufreq模塊記錄的當(dāng)前頻率不同,或者支持ACPI的cpufreq driver是不知道當(dāng)前頻率的。因此AMU就為獲取CPU平均頻率提供了一個(gè)方法。通過(guò)CPU_CYCLES和CNT_CYCLES的Counter計(jì)數(shù)來(lái)計(jì)算CPU頻率,具體代碼如下。

arch/arm64/kernel/topology.c

/* Initialize counter reference per-cpu variables for the current
CPU */
void init_cpu_freq_invariance_counters(void)
{
this_cpu_write(arch_core_cycles_prev,
        read_sysreg_s(SYS_AMEVCNTR0_CORE_EL0));
this_cpu_write(arch_const_cycles_prev,
        read_sysreg_s(SYS_AMEVCNTR0_CONST_EL0));
}
void topology_scale_freq_tick(void)
{
u64 prev_core_cnt, prev_const_cnt;
u64 core_cnt, const_cnt, scale;
int cpu =
smp_processor_id();
if
(!amu_freq_invariant())
return;
if
(!cpumask_test_cpu(cpu, amu_fie_cpus))
return;
const_cnt =
read_sysreg_s(SYS_AMEVCNTR0_CONST_EL0);
core_cnt = read_sysreg_s(SYS_AMEVCNTR0_CORE_EL0);
prev_const_cnt =
this_cpu_read(arch_const_cycles_prev);
prev_core_cnt =
this_cpu_read(arch_core_cycles_prev);
if (unlikely(core_cnt
<= prev_core_cnt ||
      const_cnt <= prev_const_cnt))
goto
store_and_exit;
/*
  *        /core   arch_max_freq_scale
  * scale = ------- * --------------------
  *        /const  SCHED_CAPACITY_SCALE
  *
  * See validate_cpu_freq_invariance_counters()
for details on
  * arch_max_freq_scale and the use of
SCHED_CAPACITY_SHIFT。
  */
scale = core_cnt -
prev_core_cnt;
scale *=
this_cpu_read(arch_max_freq_scale);
scale = div64_u64(scale
>> SCHED_CAPACITY_SHIFT,
   const_cnt - prev_const_cnt);
scale = min_t(unsigned
long, scale, SCHED_CAPACITY_SCALE);
this_cpu_write(freq_scale, (unsigned long)scale);
store_and_exit:
this_cpu_write(arch_core_cycles_prev, core_cnt);
this_cpu_write(arch_const_cycles_prev, const_cnt);
}

5. AMU與PMU的區(qū)別

前文提到AMU與PMU的設(shè)計(jì)目的不同。除此之外,還有哪些差異點(diǎn)呢?

AMU與PMU具有類似的特性,設(shè)計(jì)的目的有所不同,AMU是為了系統(tǒng)功耗性能管理,PMU是為了用戶態(tài)程序或者調(diào)試目的。從硬件角度都是對(duì)事件進(jìn)行計(jì)數(shù),我們同樣也可以使用PMU的統(tǒng)計(jì)結(jié)果進(jìn)行功耗和性能管理,為什么還要再引入AMU呢?

可能的原因是,PMU有多個(gè)使用場(chǎng)景,如果在性能功耗管理方案上使用了PMU,那么在性能調(diào)試時(shí)也要獲取PMU信息就可能產(chǎn)生沖突,例如使用強(qiáng)大的perf工具抓取PMU信息,尤其在Counter數(shù)量有限的情況下,沖突概率更大。引入AMU是為了給固定的資源專門用來(lái)做系統(tǒng)控制方案,從而釋放PMU資源用作其他目的。

PMU和AMU的軟件使用方式上,也有很大的不同。AMU通過(guò)system register interface就可以訪問(wèn),而PMU需要通過(guò)內(nèi)核的perf接口,軟件開銷遠(yuǎn)超過(guò)AMU。

下圖列出了兩者功能上的一些差異,

066e2066-96ca-11ed-bfe3-dac502259ad0.jpg






審核編輯:劉清

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

    關(guān)注

    31

    文章

    5363

    瀏覽量

    121157
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10902

    瀏覽量

    213000
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2261

    瀏覽量

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

    關(guān)注

    0

    文章

    33

    瀏覽量

    21399

原文標(biāo)題:Perf monitor:從PMU到AMU

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    eMMC與UFS它們之間到底什么差異?

    eMMC是什么意思?UFS是什么意思?eMMC與UFS它們之間到底什么差異?
    發(fā)表于 06-18 08:06

    STM32的三種Boot模式差異

    STM32的三種Boot模式差異?如何去驗(yàn)證這種差異?
    發(fā)表于 11-26 07:15

    STM8和STM32的內(nèi)核什么差異

    STM8和STM32的內(nèi)核什么差異?STM8和STM32的片上外設(shè)有什么差異
    發(fā)表于 02-23 07:39

    如何對(duì)Android 7.1 RK3288 PMU進(jìn)行調(diào)試

    如何對(duì)Android 7.1 RK3288 PMU進(jìn)行調(diào)試?
    發(fā)表于 03-04 06:28

    那么AMUPMU什么不同?

    的事件類似,那么AMUPMU什么不同AMUPMU的區(qū)別在于:
    發(fā)表于 02-03 15:09

    一文淺析AMUPMU的區(qū)別

    的事件類似,那么AMUPMU什么不同?AMUPMU的區(qū)別在于:
    發(fā)表于 02-15 11:35

    Revere AMU系統(tǒng)架構(gòu)參考指南

    本節(jié)定義了硬件加速器的可選引腳級(jí)接口,該接口對(duì)軟件不可見,但允許重用AHA和AMU的標(biāo)準(zhǔn)IP實(shí)現(xiàn)。 本節(jié)介紹了以下程序: ?管理與硬件代理(AHA)的連接?在AHA中配置AMI-HW和AMS?通過(guò)
    發(fā)表于 08-10 06:59

    TinyM0配套例程 PMU例程

    【TinyM0配套例程】PMU例程 PMU例程
    發(fā)表于 11-15 16:53 ?0次下載

    PMU基本介紹

    PMU基本介紹
    發(fā)表于 01-22 19:37 ?53次下載

    PMU測(cè)試儀的設(shè)計(jì)與研究

    隨著pmu在電力系統(tǒng)中的廣泛應(yīng)用,需要現(xiàn)場(chǎng)對(duì)pmu裝置進(jìn)行測(cè)試,保證其測(cè)量數(shù)據(jù)的可靠性,然而pmu的檢測(cè)不同于rtu的檢測(cè),也不用于保護(hù)裝置的暫態(tài)檢測(cè),需要進(jìn)行動(dòng)態(tài)檢測(cè),因此就提出了pmu
    發(fā)表于 08-29 21:29 ?4次下載
    <b class='flag-5'>PMU</b>測(cè)試儀的設(shè)計(jì)與研究

    PMU量測(cè)點(diǎn)優(yōu)化配置新方法

    同步相量測(cè)量裝置(Phasor Measurement Unit,PMU)是基于GPS衛(wèi)星同步時(shí)鐘實(shí)現(xiàn)同步測(cè)量電網(wǎng)母線電壓和線路電流相量的裝置,應(yīng)用于配電網(wǎng)全網(wǎng)運(yùn)行監(jiān)測(cè)控制、區(qū)域保護(hù)控制和電力系統(tǒng)
    發(fā)表于 04-17 10:21 ?1次下載
    <b class='flag-5'>PMU</b>量測(cè)<b class='flag-5'>點(diǎn)</b>優(yōu)化配置新方法

    如何使用WEBENCH PMU優(yōu)化電源設(shè)計(jì)?

    WEBENCH PMU Power Architect-使用PMU優(yōu)化您的電源設(shè)計(jì)
    的頭像 發(fā)表于 08-20 00:13 ?3565次閱讀

    你知道PMUPMU也是區(qū)別的嗎

    在半導(dǎo)體芯片行業(yè)中,一個(gè)詞是我們經(jīng)常能看到的,那就是PMU。可是你知道PMUPMU也是區(qū)別的嗎?通常,在半導(dǎo)體行業(yè)中,
    的頭像 發(fā)表于 10-25 11:06 ?1.4w次閱讀

    雷達(dá)信號(hào)什么特點(diǎn)?和通信信號(hào)的差異在哪里?

    先學(xué)好數(shù)字信號(hào)處理的知識(shí),才能慢慢的理解雷達(dá)信號(hào)處理!先來(lái)看看雷達(dá)信號(hào)什么特點(diǎn)?和通信信號(hào)的差異在哪里?載波的信息都是有用的,但各自用的肯定不一樣!
    的頭像 發(fā)表于 03-04 11:03 ?1.4w次閱讀

    什么是UVLED點(diǎn)光源及其特點(diǎn)和應(yīng)用哪些?

    什么是UVLED點(diǎn)光源?以及它的特點(diǎn)和應(yīng)用案例哪些?下面由柯依努小編為您簡(jiǎn)單概述以下幾點(diǎn)。
    的頭像 發(fā)表于 12-14 13:54 ?3796次閱讀
    百家乐六手变化混合赢家打法| 2024年九运的房屋风水| 百家乐官网波音平台开户导航| 仁化县| 中国足球竞猜| 德州扑克视频教学| 大发888娱乐大发体育| 威尼斯人娱乐城演唱会| 广州百家乐娱乐场| 网上百家乐合法吗| 虎在什么方位做生意好| 百家乐官网规则以及玩法 | 网页百家乐官网| 百家乐过两关| 百家乐投注庄闲法| 百家乐游戏程序出售| 挖掘百家乐赢钱秘籍| 凯旋门百家乐游戏| 做生意什么花风水好| 百家乐官网追号工具| 风水学坐向24山| 百家乐官网赌台| 24楼风水化解| 百家乐输一压二| 百家乐怎么刷反水| 冠军百家乐现金网| 百家乐3宜3忌| 代理百家乐最多占成| 百家乐的方法和公式| 百家乐赌场优势| 线上百家乐赌法| 百家乐mediacorp| 百家乐娱乐网址| 新世百家乐的玩法技巧和规则| 怎么玩百家乐的玩法技巧和规则| 仕達屋百家乐的玩法技巧和规则| 玩百家乐请高手指点| 威尼斯人娱乐城真钱游戏| 大发888娱乐城客服| 88娱乐城2官方网站| 浪卡子县|