前段时间公司将一个软件平台从intel平台移植到loongson 3a平台,遇到了几个莫名奇妙的问题。
现象是两次取内存的值不一样,场景基本上是两个进程共享内存,一个读,一个写。
由于是应对国产化的潮流而进行的一个预研的项目,投入的时间不多,问题最后也没有解决。
当时怀疑是cache alias的问题,因为loongson 3a 的L1 cache使用逻辑index,物理tag,
但最后研究手册发现他利用16k页,利用这种巧妙的方式避免了cache alias的问题。
最近查阅相关资料,新找到了几个方向,先记下来,如果有机会(公司比较扣,借的厂家的设备,最后也是到期了厂家不借了,项目终止。现在依然没设备)的话,处理下。
1、loonson 3a平台上,字、双字的内存读写不是原子的,或者在某些条件下不是原子的。
2、编译器优化导致了指令乱序
3、若指令序 导致CPU执行时指令乱序
下面把查阅的指令归档一下,到时候深入的研究研究。
Memory-Barriers-Are-Like-Source-Control-Operations
User-space-RCU-Memory-barrier-menagerie
what-every-programmer-should-know-about-memory
时间: 2024-10-29 03:20:41