comparch-security / FlexiCAS

A Flexible Cache Architectural Simulator
Other
11 stars 3 forks source link

lock all probe #157

Closed HanJinChi closed 1 month ago

HanJinChi commented 1 month ago

这个PR是PR #150 的延续版本, 一个三级缓存包含私有的L1-A、L1-B、L2-A、L2-B以及末级缓存LLC,地址X存在于二级缓存L2-B和LLC中,B线程从L1-B向L2-B发起acquire 地址X的请求,它在L2-B拿到X对应缓存集合的控制权以及X的缓存锁, 此时A线程向L2-B也发起了probe X的请求,那么可能会出现如下情况: (1)B线程由于access_sync函数在L2-B向L1-B发起了probe X的请求(代码中只要缓存块是M状态就需要发起probe),在发起probe时将L2-B的X对应的meta解锁 (2)A线程在L2-B拿到X的meta锁,也向L1-B发起了probe X的请求,因此也将L2-B中X的meta解了锁,因此同时存在两个线程同时对L1-B发起了probe请求 (3)B线程先完成L1-B的probe X请求,之后回到二级缓存将数据拷贝回L1-B中,A线程返回L2-B后将缓存块无效掉(因此X存在于L1-B中但不存在于L2-B中了)

因此问题出在了access_sync引起的probe上,和PR #150的解决方案相同,如果本级cache不是uncached也不是L1,那么所有发起probe的cache都需要升级缓存集合的权限以阻止其他的probe。