ARMv8/v9系统寄存器详解:MPIDR_EL1的结构与应用
创作时间:
作者:
@小白创作中心
ARMv8/v9系统寄存器详解:MPIDR_EL1的结构与应用
引用
CSDN
1.
https://blog.csdn.net/sinat_32960911/article/details/138754997
MPIDR_EL1是ARMv8/v9架构中的一个重要系统寄存器,用于提供处理器在物理和逻辑配置中的位置信息。本文将详细介绍该寄存器的结构、功能和用途,并通过代码示例展示如何获取当前CPU核心的ID。
寄存器名称: MPIDR_EL1
- 全称:Multiprocessor Affinity Register
- 特权级别:EL1
- 用途:提供了物理CPU核心的唯一标识符。
寄存器结构
ARMv8和ARMv9中MPIDR_EL1的位[63:0]被定义如下:
- [63:40]:保留(RES0)
- [39:32]:多芯片系统中的亲和级别3(Aff3),用于标识芯片,Aff3 在 AArch32 中不支持。
- [31]:保留(RES0)。
- [30]:用来区分处理器是属于单处理器系统还是多处理器系统。这一位为软件提供了一个快速的机制来识别当前的处理器配置,这对于操作系统和其他底层软件在启动或运行期间进行优化和决策非常重要。
- 0b0:表示处理器是多处理器系统的一部分。在这种配置下,系统中存在多个处理核心,它们可以独立执行指令流,同时共享某些资源,如内存。操作系统和应用程序可以利用这些额外的核心来实现并行处理,从而提高性能。
- 0b1:表示处理器是单处理器系统的一部分。这意味着系统中只有一个处理核心,它负责执行所有的指令流。单处理器系统可能因其简化的设计和资源共享需求较少而在某些用途下更为高效。
- [29:25]:保留(RES0)。
- [24]:提供了关于最低亲和级别(Affinity Level 0,或Aff0)的处理元素(PEs,即处理器核心或线程)如何被实现的信息。特别是,它指示这些PEs是否采用了某种形式的多线程实现方法。这一位的含义与PEs之间性能的相互依赖程度相关。
- 0b0:表示具有不同亲和级别0值的PEs(在相同的亲和级别1及更高级别下)的性能主要是独立的。这意味着,这些PEs可以被视为相对独立的执行单元,它们的性能不会由于其他PEs的活动而显著受到影响。在没有采用多线程的实现中,这是常见的情况。
- 0b1:表示具有不同亲和级别0值的PEs(在相同的亲和级别1及更高级别下)的性能高度相互依赖。这表明这些PEs可能共享某些关键资源,如执行单元、缓存或其他硬件资源,从而导致它们的性能受到彼此活动的影响。这种配置通常指的是采用多线程或其他形式的并行性,其中单个物理PE通过以某种方式共享其资源来支持多个逻辑PE。
- [23:16]:亲和级别2(Aff2),在一个簇中,用于标识处理器组或子簇,也就是用于表示当前处于哪个cluster,但是在DSU-120架构中一般只有一个cluster,所以该域的值一读出来都是0.
- [15:8]:亲和级别0(Aff0),用于标识处理器组或子簇中的特定处理器, 通常用来表示CORE ID 使用。
- [7:0]:这是确定处理元素(PE,即处理器核心或线程)行为的最重要的亲和级别,Aff0通常用于标识单个处理核心或线程。这是最低的亲和级别,代表最接近实际硬件的级别。
主要功能和用途
- 核心标识:MPIDR_EL1寄存器中的亲和级别(Affinity levels)提供了一种机制,用于在多核系统中唯一标识每个处理器。这对于实现CPU核心间通信和管理是至关重要的。
- 系统拓扑识别:通过识别不同的亲和级别,软件可以理解和管理系统的拓扑结构,包括处理器的分组、簇的组织以及多芯片系统的布局。
- 调度和管理:操作系统调度器可以利用MPIDR_EL1中的信息来做出更加明智的调度决策,比如基于亲和性的任务调度,以优化性能和能效。
- 中断处理:在中断控制器配置和中断处理方面,MPIDR_EL1提供的核心标识信息可以用来实现更高效的中断分发策略。
亲和级别(Affinity Levels)简介
ARM架构中的亲和级别提供了一种识别和区分PEs的方法。亲和级别分为多个级别,从最低的亲和级别0(Aff0),代表最接近实际硬件的级别,到可能有的更高级别,如Aff1、Aff2等。每一级别代表了PEs在系统中的不同逻辑分组。例如,亲和级别0可以用来区分一个物理处理器内的不同线程或核心,而更高的亲和级别可能代表处理器簇或整个处理器。
CORE ID 获取函数
例如可以通过下面代码获取当前core的ID 是多少。
func get_mpidr_el1
STP X29, X30, [SP, #-16]!
MOV X29, SP
MRS X0, MPIDR_EL1
LDP X29, X30, [SP], #16
RET
endfunc get_mpidr_el1
测试代码:
当前代码中只运行 core0,通过读取 寄存器MPIDR_EL1获取 CORE ID 确定是否可以上文描述一致:
void coreid_get_test(void)
{
uint64_t val, coreid, cluster;
val = get_mpidr_el1();
log_info("mpidr_el1:0x%llx\n", val);
cluster = GET_BITS(val, 16, 8);
coreid = GET_BITS(val, 8, 8);
log_info("Now cpu%d is runing in cluster%d\n", coreid, cluster);
}
测试结果:
关于上文代码中宏GET_BITS的实现见专栏:嵌入式 C 常用算法及函数
热门推荐
Midjourney壁纸创作指南:从水滴到矿物,生成专属手机壁纸
解读各个手指戴戒指的含义,时尚、文化和情感的象征
麒麟摆件客厅如何摆设?为家居风水增添福气
为什么老人说吃碱性蔬菜水果好?到底哪些是碱性食物,详细告诉你
第二十四冠!王楚钦林诗栋助国乒亚锦赛夺冠,王皓笑了
毫无悬念:皮特·赫格塞思将成为美国历史上最悲催的国防部长
医院拒收病人算违法吗?一文详解医疗纠纷处理要点
杨毅解读中国男篮对阵日本男篮:战略调整与实力优势
健康保险的基本类型及特点是什么
如何面对生活与工作压力下的心灵挑战与成长
现代女孩为何追求中式婚姻:传统与现代的融合
西汉灭亡的原因究竟是什么呢
防癌霸王蔬菜:葱属家族的健康密码
从方法到学习资源,一文搞懂儿童识字启蒙
什么是慢性肾衰竭早期
甲状腺结节混合回声是什么意思
适合室内养的风水植物
为何都建议买雅阁而不是思域?全面对比分析
成都附二中医医院科普:朝阳初升,唤醒脾胃的早餐推荐
西汉文治武功如此强大,是如何由盛转衰的?一文说清西汉的兴衰史
仙人掌的作用:七大功效全面解析
中药减肥 具有减肥功效的12种中药
探索梦境的神秘世界,解析心灵的密码与生活启示
美科技股暴跌 对A股科技板块影响几何?
郑州火车站出行全攻略:东、西广场功能详解与换乘指南
虚假的民族英雄僧格林沁:3万铁骑硬冲英法联军,杀敌5人自损3000
租房合同押金纠纷处理指南:协商、调解到诉讼的全流程指引
茶花喜阴还是喜阳,茶花对土壤和温度有什么要求?
新年进步:贺年片上的中国大学
在路上,在景中,看见中国的景深