官方文档(ARM ARM 文档)的介绍如下所示
翻译一下MPIDR_EL1 相关的英文,如下所示:
作用:
在多处理器系统中,为调度提供一个额外的PE(process element)识别机制
属性:
MPIDR_EL1是一个64位的寄存器
域值:
[63:40]:Reserved, RES0.
[39:32]:Affinity level 3。有关更多信息,请参阅Aff0的描述。
[31]:Reserved, RES1.
[30]:U。表示一个单处理器系统,与多处理器系统中的pe0不同。这个位的可能值是:
0b0 :处理器是多处理器系统的一部分。
0b1 :处理器是单处理器系统的一部分。
[29:25]:Reserved, RES0.
[24]:MT。指示关联的最低级别是否由使用多线程类型方法实现的逻辑PEs组成。这个位的值可能是:
0b0 当PEs的性能关联级别最低,或者使用MPIDR_EL1.MT的PEs被设置为1时,级别0的不同值或者级别1的相同值或更高级别,是相互独立的
0b1 当PEs的性能关联级别最低,或者使用MPIDR_EL1.MT的PEs被设置为1时,级别0的不同值或者级别1的相同值或更高级别的相关性非常高
[23:16] Affinity level 2.
[15:8] Affinity level 1.
[7:0] Affinity level 0. 这个Affinity等级对于确定PE行为最为重要。更高级别的affinity 等级的重要性越低。分配给MPIDR的值的域的集合{Aff2, Aff1, Aff0}在整个系统中必须是不同的
访问MPIDR_EL1:MRS , MPIDR_EL1
以上总结 :看完了其实还不知所以然。其实也就总结两点:aff0/aff1/aff2/aff3这里的值越小越重要,{Aff3, Aff2, Aff1, Aff0} 这个组合的值要唯一。
我们继续查阅Core TRM 手册(以A78 TRM为例),终于找到答案。
总结一下 ,其实就是:
1、aff0 :表示一个core中的第几个thread,大多数core都是single-threaded core,所以大多数core中的该值是0.
2、aff1:表示一个cluster中的第几个cpu
3、aff2/aff3:表示系统中的第几个cluster,这个值由SOC厂商给core的输入信号决定。
原作者:baron
|