原子操作多核场景优化
原理
LL/SC(Load-link/Store-condition)原子指令需要把共享变量先load到本核所在的L1 cache中进行修改,在锁竞争少的情况下性能较好,锁竞争激烈时会导致系统性能下降严重。ARMv8.1规范中引入了新的原子操作指令扩展LSE(Large System Extensions),将计算操作放到L3 cache中进行。不仅增大数据共享范围,减少cache一致性耗时,还能在锁竞争激烈时可以提升锁的性能。
在多核、原子锁争抢严重的情况下,建议在GCC编译选项中添加LSE相关选项,减缓锁竞争。
LL/SC指令(ldaxr&stlxr):
LSE指令(ldaddal):
修改方式
GCC6.0以上版本支持(建议使用gcc7.3.0以上版本)。
在编译选项中增加:
-march=armv8-a+lse
或者
-march=armv8.1-a
或者
-march=armv8.2-a
父主题: 优化方法