与 CAS(比较和交换)相比,LL/SC 的优势是啥?
Posted
技术标签:
【中文标题】与 CAS(比较和交换)相比,LL/SC 的优势是啥?【英文标题】:What' s the advantage of LL/SC when compared with CAS (compare-and-swap)?与 CAS(比较和交换)相比,LL/SC 的优势是什么? 【发布时间】:2015-08-19 14:02:22 【问题描述】:在计算机体系结构中,LL/SC 与 CAS(比较和交换)相比有什么优势?我认为 LL/SC 可以在多核系统中解决活锁问题,并解决 ABA 问题,但 CAS 不能。与 CAS 相比,我找不到 LL/SC 的任何优势。谁能告诉我?
【问题讨论】:
有一个基本的比较here。 感谢您的回答。对比太简单了。我想知道详细的性能对比。 【参考方案1】:由于没有人回答,LL/SC 不会遇到 ABA 问题,因为如果 LL 引用的地址被修改,条件存储将失败。此外,它不能活锁,因为一个或多个 LL/SC 对失败意味着另一个成功。 CAS 也可能更昂贵,因为它可能需要刷新无效队列。
【讨论】:
感谢您的回答。现在我知道 LL/SC 完全不会受到 ABA 问题的影响,因为上下文切换会导致 SC 失败。但是,当 LL 和 SC 之间的其他核心发生太多其他 LL(s) 时,就会出现 case livelock,因为其他核心的 LL 会导致 SC 失败。 @winter 我不确定我是否完全理解您的描述。您能否用您不理解或您想知道的内容更新您的问题? 使用 LL/SC 的实现在某些情况下会产生活锁情况。我认为基本情况是两个硬件线程使彼此的 LL/SC 操作无效。这就是为什么在 LC 和 SC 之间可以做的事情受到限制的原因。另请参阅yarchive.net/comp/linux/cmpxchg_ll_sc_portability.html 和 RISC-V 手册,特别讨论 LR/SC 和“受约束的 LR/SC 序列”。 @Flow:这不是一个线程在 它自己的 LL 和 SC 之间所做的事情,这就是问题所在,甚至是 MESI 共享请求(用于对缓存的只读访问)行)会导致 SC 发生故障。 (因为之前拥有它的核心必须从 Modified 或 Exclusive 状态转换出来,并且 SC 依赖于自 LL 以来一直处于这些状态之一的线路,从而保证没有其他核心可以看到原子操作的内部)。我猜高性能多核 CPU 倾向于延迟 MESI 响应,以让 LL/SC 有更多机会完成并避免活锁等。以上是关于与 CAS(比较和交换)相比,LL/SC 的优势是啥?的主要内容,如果未能解决你的问题,请参考以下文章