首页 > 代码库 > volatile memory barrier等一些资料

volatile memory barrier等一些资料

前段时间公司将一个软件平台从intel平台移植到loongson 3a平台,遇到了几个莫名奇妙的问题。

现象是两次取内存的值不一样,场景基本上是两个进程共享内存,一个读,一个写。

由于是应对国产化的潮流而进行的一个预研的项目,投入的时间不多,问题最后也没有解决。

当时怀疑是cache alias的问题,因为loongson 3a 的L1 cache使用逻辑index,物理tag,

但最后研究手册发现他利用16k页,利用这种巧妙的方式避免了cache alias的问题。

最近查阅相关资料,新找到了几个方向,先记下来,如果有机会(公司比较扣,借的厂家的设备,最后也是到期了厂家不借了,项目终止。现在依然没设备)的话,处理下。

1、loonson 3a平台上,字、双字的内存读写不是原子的,或者在某些条件下不是原子的。

2、编译器优化导致了指令乱序

3、若指令序 导致CPU执行时指令乱序

 

下面把查阅的指令归档一下,到时候深入的研究研究。

        CPU Cache and Memory Ordering

        C-volatile关键字深度剖析

        LINUX内核内存屏障

        Memory-Barriers-Are-Like-Source-Control-Operations

        Memory-Consistency-Models

        MIPS-R4000-Microprocessor

        User-space-RCU-Memory-barrier-menagerie

        what-every-programmer-should-know-about-memory

 

volatile memory barrier等一些资料