weiqi7777

ARMv8之exclusive操作(三) exclusive monitor

0
阅读(885) 评论(1)

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

一、exclusive monitor

exclusive monitor分为2类:

  • local monitor: 实现在cpu内部,针对cacheable属性地址进行监测
  • global monitor:实现在cpu外部,针对non-cacheabal属性和device属性地址进行监测

从上图,能够看出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字节,对于以下的执行序列:

exclusive load byte 地址0

exclusive store word 地址4

硬件实现,就有2种实现方法

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

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

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

因此对于频繁会使用的锁,需要放到不同的cacheline中。

三、global monitor

但是对于global monitor,那么匹配就非常严格了。一般来说,global monitor,会接在互联总线之后,假设互联总线使用AXI协议,连接global monitor,那么global monitor会严格匹配访问地址,访问大小,ID,传输类型等。这些都匹配成功后,exclusive store才会成功。

比如以下2个master,均使用global monitor。操作如下:

master1

master2

exclusive load, 地址0,大小byte

no-burst

 
 

exclusive store,地址0,大小byte

no-burst

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操作。

time

master1

master2

master3

t0

exclusive load,

地址0,大小byte

no-burst, ID:0x0

  

t1

 

exclusive load,

地址0,大小byte

no-burst, ID:0x1

exclusive store

地址0,大小byte

no-burst, ID:0x2

t2

exclusive store,

地址0,大小byte

no-burst, ID:0x0

  

t3

 

exclusive store,

地址0,大小byte

no-burst, ID:0x1

 

1、初始,exclusive monitor状态    

在最开始,exclusive monitor状态如下:

exclusive monitor

监测信息

状态

monitor1

null

open

monitor2

null

open

monitor3

null

open

monitor4

null

open

2、t0操作    

在t0,master1,发出一个exclusive load给global monitor,global monitor将这个记录,记录到monitor1中。

此时exclusive monitor状态如下:

exclusive monitor

监测信息

状态

monitor1

地址0,大小byte

no-burst,ID:0x0

exclusive

monitor2

null

open

monitor3

null

open

monitor4

null

open

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状态如下:

exclusive monitor

监测信息

状态

monitor1

地址0,大小byte

no-burst,ID:0x0

exclusive

monitor2

地址0,大小byte

no-burst,ID:0x1

exclusive

monitor3

null

open

monitor4

null

open

4、t2操作    

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

此时exclusive monitor状态如下:

exclusive monitor

监测信息

状态

monitor1

null

open

monitor2

null

open

monitor3

null

open

monitor4

null

open

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的条件,会严格很多。

  1. 多谢分享啊