历史上的今天
返回首页

历史上的今天

今天是:2024年08月25日(星期日)

正在发生

2020年08月25日 | ARM架构和总线协议如何支持Linux原子操作?

2020-08-25 来源:elecfans

这篇文章探讨ARM架构和总线协议如何来支持的。对于某款ARM处理器和总线CCI,CCN和CMN产品的具体实现,属于实现层面的微架构,一般需要NDA,这里不予讨论。


顺便提一下,在ARMv8 架构下对应的是LDXR (load exclusive register 和STXR (store exclusiveregister)及其变种指令,另外,在ARMv8.1架构中引入atomic instruction, 例如LDADD (Atomic add),CAS(Compare and Swap)等。


Exclusive monitor

首先,作为一个爱问为什么的工程师,一定会想到LDXR/ STXR和一般的LDR/STR有什么区别。这个区别就在于LDXR除了向memory发起load请求外,还会记录该memory所在地址的状态(一般ARM处理器在同一个cache line大小,也就是64 byte的地址范围内共用一个状态),那就是Open和Exclusive。


我们可以认为一个叫做exclusive monitor的模块来记录。根据CPU访问内存地址的属性(在页表里面定义),这个组件可能在处理器 L1 memory system, 处理器cluster level, 或者总线,DDR controller上。


下面是Arm ARM架构 [1] 文档定义的状态转换图

实例说明:

1)CPU1发起了一个LDXR的读操作,记录当前的状态为Exclusive

2)CPU2发起了一个LDXR的读操作,当前的状态为Exclusive,保持不变

3)CPU2发起了一个STXR的写操作,状态从Exclusive变成Open,同时数据回写到DDR

4)CPU1发起了一个STXR的写操作,因为当前的exclusive monitor状态为Open,写失败(假如程序这时用STR操作来写,写会成功,但是这个不是原子操作函数的本意,属于编程错误)

假如有多个CPU,同时对一个处于Exclusive的memory region来进行写,CPU有内部逻辑来保证串行化。


Monitor的状态除了STXR会清掉,从Exclusive变成Open之外,还有其他因素也可以导致monitor的状态被清掉,所以软件在实现spinlock的时候,一般会用一个loop循环来实现,所谓“spin”。


Exclusive monitor实现所处的位置

根据LDXR/STXR 访问的memory的属性,需要的monitor可以在CPU内部,总线,也可以DDR controller(例如ARM DMC-400 [2]在每个memory interface 支持8个 exclusive access monitors)。


一般Memory属性配置为 normal cacheable, shareable,这种情形下,CPU发起的exclusive access会终结在CPU cluster内部,对外的表现,比如cacheline fill和line eviction和正常的读写操作产生的外部行为是一样的。具体实现上,需要结合local monitor的状态管理和cache coherency 的处理逻辑,比如MESI/MOESI的cacheline的状态管理来。


为方便大家理解,下面划出一个monitor在一个假象SOC里面的逻辑图(在一个真实芯片里面,不是所有monitor都会实现,需要和SOC vendor确认)

External exclusive monitor

对于normal non-cacheable,或者Device类型的memory属性的memory地址,cpu会发出exclusive access的AXI 访问(AxLOCK signals )到总线上去,总线需要有对应的External exclusive monitor支持,否则会返回错误。例如, 假如某个SOC不支持外部global exclusivemonitor,软件把MMU disabled的情况下,启动SMP Linux,系统是没法启动起来的,在spinlock处会挂掉。


AMBA AXI/ACE 规范

The exclusive access mechanism can provide semaphore-type operations without requiring the bus to remain dedicated to a particular master for the duration of the operation. This means the semaphore-type operations do not impact either the bus access latency or the maximum achievable bandwidth.

The AxLOCK signals select exclusive access, and the RRESP and BRESP signals indicate the success or failure of the exclusive access read or write respectively.

The slave requires additional logic to support exclusive access. The AXI protocol provides a mechanism to indicate when a master attempts an exclusive access to a slave that does not support it. 

Atomic指令的支持

处理器,支持cache coherency协议的总线,或者DDR controller可以增加了一些简单的运算,比如,在读写指令产生的memory访问的过程中一并把简单的运算给做了。


AMBA 5 [3] 里面增加了对Atomic transactions的支持:

AMBA 5 introduces Atomic transactions, which perform more than just a single access, and have some form of operation that is associated with the transaction.

Atomic transactions are suited to situations where the data is located a significant distance from the agent that must perform the operation. Previously, performing an operation that is atomically required pulling the data towards the agent, performing the operation, and then pushing the result back.

Atomic transactions enable sending the operation to the data, permitting the operation to be performed closer to where the data is located.

The key advantage of this approach is that it reduces the amount of time during which the data must be made inaccessible to other agents in the system.

支持4种Atomic transaction:AtomicStore ,AtomicLoad,AtomicSwap 和AtomicCompare

QA

1)  Local monitor和Global monitor的使用场景

* Local monitor适用于访问的memory属为normal cacheable, shareable或者non-shareable的情况.

* Global monitor ,准确来说,external global exclusive monitor (处理器之外,在外部总线上)用于normal noncacheable或者device memory类型。比如可以用于一个Cortex-A处理器和一个Cortex-M 处理器(没有内部cache)之间的同步。

2)多CPU下,多个LDREX,和STREX的排他性实现

* 各个处理器和总线的实现不同,可以从软件上理解为和data coherency实现相结合,比如M(O)ESI协议[5],这是一种Invalidate-based cache coherence protocol, 其中的key point就是当多个CPU在读同一个cacheline的时候,在每个CPU的内部cache里面都有cacheline allocation, cacheline的状态会变成Shared;但是当某个CPU做写的时候,会把其它CPU里面的cacheline数据给invalidate掉,然后写自己的cacheline数据,同时设置为Modified状态,从而保证了数据的一致性。

* LDREX,本质上是一个LDR,CPU1做cache linefill,然后设置该line为E状态(Exclusive),额外的一个作用是设置exclusive monitor的状态为Exclusive;其他cpu做LDREX,该line也会分配到它的内部cache里面,状态都设置为Shared ,也会设置本CPU的monitor的状态。当一个CPU 做STREX时候,这个Write操作会把其它CPU里面的cacheline数据给invalidate掉。同时也把monitor的状态清掉,从Exclusive变成Open的状态,这个MESI协议导致cachline的状态在多CPU的变化,是执行Write操作一次性改变的。这样在保证数据一致性的同时,也保证了montitor的状态更新同步改变。

3)比如举一个多核的场景,一个核ldrex了,如果本核的local monitor会发生什么,外部的global monitor发生什么,开不开mmu,cache不cache,区别和影响是什么。

Ldrex/strex本来就是针对多核的场景来设计的,local monitor的状态发生改变,不会影响外部的global monitor状态。但是external global monitor的状态发生改变,可以告诉处理器,把local monitor的状态清掉。


Data coherency是通过硬件来支持的。对于normal cacheable类型的memory, MMU和DCache必须使能,否则CPU会把exclusive类型的数据请求发出处理器,这时需要外部monitor的支持。

推荐阅读

史海拾趣

AntennaHome公司的发展小趣事

为了进一步提升品牌影响力和市场知名度,AntennaHome公司积极参与国际电子行业的各大展会。在展会上,公司展示了最新的天线技术和产品,吸引了众多国内外客户的关注。通过与客户的深入交流,公司不仅收获了宝贵的市场信息和合作机会,还进一步提升了品牌在行业内的地位。

Dicon Fiberoptics Inc公司的发展小趣事

DiCon Fiberoptics Inc公司成立于1986年,当时的光纤通信技术正处于快速发展阶段。公司创始人凭借对行业的敏锐洞察和坚定信念,决定投身于这一领域。在创业初期,公司面临着资金紧张、技术壁垒高等诸多挑战。然而,通过不懈努力和持续创新,DiCon成功研发出了多款高性能的光纤通信产品,逐渐在市场上获得了认可。

Fermionics Lasertech Inc公司的发展小趣事

作为一家有社会责任感的企业,Fermionics Lasertech Inc公司始终关注环境保护和社会公益事业。他们积极推行绿色制造理念,采用环保材料和节能技术生产产品;同时,公司还积极参与各类公益活动,回馈社会。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了强大动力。

Denyo Europa Gmbh公司的发展小趣事

随着全球环保意识的提高,Denyo Europa Gmbh公司积极响应号召,致力于绿色环保的生产方式。公司采用环保材料替代传统材料,减少生产过程中的污染排放;同时,公司还加强废弃物的回收和再利用工作,实现资源的循环利用。这些环保实践不仅提升了公司的社会形象,也为公司的可持续发展提供了有力支持。

American Electric公司的发展小趣事

随着全球化进程的加速,American Electric公司开始实施国际化战略。公司积极拓展海外市场,与多个国家的电力企业建立合作关系,共同开展电力项目。同时,公司还在海外设立了多个分支机构,以便更好地服务当地客户。这些举措不仅提高了公司的国际影响力,还为公司的长期发展奠定了坚实的基础。

Chen Yang Technologies GmbH & Co KG公司的发展小趣事

电子行业市场竞争激烈,Chen Yang Technologies也面临着来自各方面的挑战。在某次全球经济危机中,公司遭遇了订单减少、资金紧张等困难。然而,正是在这样的困境中,Chen Yang Technologies展现出了顽强的生命力。公司迅速调整战略,优化成本结构,同时加大研发力度,推出了一系列具有竞争力的新产品。这些举措使得公司成功度过了危机,并在危机后的市场中获得了更大的发展空间。

问答坊 | AI 解惑

高薪诚聘:测量仪器的校准和维修人员!

要求:1.英语流利;2.做过仪器的校正or维修(电子光纤类,例如:示波器/频谱仪/网络分析仪/万用表/信号发生器等);3.至少6年以上工作经验;4.目前薪金7000-20000之间; 有适合者,请发资料至以下邮箱Best regardsJane ChangTEL:020-38878871,22220193FAX: ...…

查看全部问答>

安防企业如何在转型升级中实现二次创业

安防企业如何在转型升级中实现二次创业.之.一本质 国内大部分安防企业目前都处于成长期,都面临着如何规模化及可持续发展两大成长瓶颈,突破成长瓶颈就意味着必须面对转型升级的抉择。     纵观整个安防行业的发展形态,国内安防企业 ...…

查看全部问答>

eboot的一些疑问

编译后eboot能启动到菜单选择那里,再往下就不行了:点F:format flash,提示: ERROR: InitPartitionMgr: failed to initialize partition manager. 源码在这里: if (!BP_Init((LPBYTE)BLOCK_SAVE_START, BLOCK_SAVE_LENGTH, NULL, &RegInfo, N ...…

查看全部问答>

51单片机 I/O 口模拟 SPI 读写 EEPROM

void Spi_Data_Out( uchr length, uchr d ) {         for ( ; length > 0 ; length -- )         {                 Spi_sck = 0;       & ...…

查看全部问答>

大家有知道windows auto 系统吗

专门是为汽车行业车载信息开发的系统?…

查看全部问答>

Bootloader 是那个文件?

弱弱的问一句: \\WINCE600\\OSDesigns\\2451\\2451\\RelDir\\smdk2450_ARMV4I_Release 下的 EBOOT.bin 和 EBOOT.nb0 ,是不是就是大家说的Bootloader 啊 ? 在没有bootloader 的裸片子上,是不是先烧EBOOT.nb0 后就可以烧 NK.nb0 了? …

查看全部问答>

单片机加电时常常死机怎么解决,如何让他上电稳定运行(新手问题)

工作中需要一个单片机控制一组空开继电器,想自己用现成的学习板改造一下用。 但是,加电运行时经偶尔会出现所有指示灯亮,程序不运行。发生机率3/10。 几次考机一夜也发现有死机现象。 我需要他运行稳定,并且断点再通电能自动稳定运行。 请问 ...…

查看全部问答>

QuartusII 为何不能 打开别人的project(急...)

QuartusII 为何不能 打开别人的project?打开QuartusII后选择“FILE”->“open project”选择项目后就出现错误提示:“Error: Can\'t open project -- you do not have permission to write to all the files or create new files in the project\ ...…

查看全部问答>

LPC1768的ISP下载问题

对LPC1768可以进行ISP正常下载,下载后可以正常工作;但是,当重新上电后就工作不了,需要重新下载。为什么呢?…

查看全部问答>

提问+pcb敷铜区域如何添加画通孔

本帖最后由 hjl240 于 2014-3-9 17:42 编辑 看到msp430f5529学习板的触摸按键中间有一个孔,如下: 自己也想做一个这样带孔的触摸按键,,在画pcb时,敷铜完毕之后,不知该怎么在敷铜区域画孔,请大家指教 …

查看全部问答>