棋子 · 2020年05月06日

ARMv8之exclusive操作(三) exclusive monitor

为了支持exclusive操作,硬件会增加exclusive monitor来支持。

一、exclusive monitor
exclusive monitor分为2类:

local monitor: 实现在cpu内部,针对cacheable属性地址进行监测

global monitor:实现在cpu外部,针对non-cacheabal属性和device属性地址进行监测
image.png
从上图,能够看出local monitor和global monitor所处的位置。

每个cpu,均有一个local monitor,如果要检测的地址,是cacheable属性,并且没有shareable属性,也就是该地址,只有该cpu访问,那么只需要使用local monitor即可。

如果要监测的地址,是cacheable属性,并且有shareable属性,也就是该地址,除了本cpu访问,还会有其他cpu访问,那么需要local monitor和coherency logic配合。这里coherency logic的主要作用,是保证整个cluster中,当一个local monitor状态从exclusive状态切换到open状态,那其他的local monitor状态也要从exclusive状态切换到open状态。

如果要检测的地址,是non-cacheable属性,那么就需要global monitor。

二、local monitor
一般来说,local monitor是以cacheline为单位,比如一个cacheline大小是64字节,对于以下的执行序列:
image.png
硬件实现,就有2种实现方法

地址和访问大小严格匹配,因此②步操作是失败的

地址和访问大小不严格匹配,只要在一个cacheline中即可,因此②步操作是成功

以上两种实现,均是可以的,但是为了硬件设置简单,一般选择第二种,也就是地址和访问大小不严格匹配,只要在一个cacheline中即可。

比如如下,两个线程的锁,放在不同的地方。线程0的锁,放在了地址0x0080_0028,线程1的锁,放在了地址0x0080_0030。这两个锁,均是在一个cacheline中。当线程0执行STXR指令,将自己的exclusive monitor状态切换到open之后,也把线程1的exclusive monitor状态切换到了open状态。因此线程1,执行STXR就会失败。

image.png
因此对于频繁会使用的锁,需要放到不同的cacheline中。
三、global monitor
但是对于global monitor,那么匹配就非常严格了。一般来说,global monitor,会接在互联总线之后,假设互联总线使用AXI协议,连接global monitor,那么global monitor会严格匹配访问地址,访问大小,ID,传输类型等。这些都匹配成功后,exclusive store才会成功。

比如以下2个master,均使用global monitor。操作如下:
image.png
master1,exclusive load,global monitor中,检测地址0,状态切换到OPEN状态。第master2,exclusive store,地址,大小,以及传输类型等,和master1均一样,但是因为是不同的master,因此从互联总线这,发出的ID,是不一样的。因此master2的exclusive store是失败的。但是master1的exclusive monitor状态,依然是exclusive状态。

global monitor中,一般会实现多个exclusive monitor,用来检测多个exclusive操作。假设global monitor中,有4个exclusive monitor。

对于以下的master操作。
image.png
1、初始,exclusive monitor状态
在最开始,exclusive monitor状态如下:
image.png
2、t0操作
在t0,master1,发出一个exclusive load给global monitor,global monitor将这个记录,记录到monitor1中。

此时exclusive monitor状态如下:
image.png
3、t1操作
在t1,master2,发出一个exclusive load给global monitor,global monitor将这个记录,记录到monitor2中。

master3,发出一个exclusive store给global monitor,global monitor将这个操作,和当前的exclusive monitor进行比较,发现没有一个记录ID为0x2的,因此exclusive store是failed的。global monitor直接回OK。exclusive store如果成功,需要回EXOK。

此时exclusive monitor状态如下:
image.png
4、t2操作
在t2,master1发出一个exclusive store给global monitor。global monitor将这个操作,和当前的exclusive monitor进行比较,发现monitor1记录的检测信息,和当前exclusive store一致,表示操作成功,global monitor给master1回EXOK。并且将其他的monitor检测信息给清掉,将状态切换到open状态。

此时exclusive monitor状态如下:
image.png
5、t3操作
在t3,master2发出一个exclusive store给global monitor。global monitor将这个操作,和当前的exclusive monitor进行比较,发现没有一个记录ID为0x1的,因此exclusive store是failed的。global monitor直接回OK。exclusive store如果成功,需要回EXOK。

exclusive monitor状态不变。

可见,global monitor相比于local monitor,exclusive store的条件,会严格很多。


系列文章

原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。
推荐阅读
关注数
23601
内容数
1045
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息