在非高速缓存的内存上锁定CMPXCHG?

问题描述:

一个简单的问题:在非高速缓存的内存上是否可能存在LOCK CMPXCHG,即在页表中标记为非高速缓存的页面?在非高速缓存的内存上锁定CMPXCHG?

+0

为什么不呢?我不记得手册中的任何其他说法。如果有的话,它是专门处理的可缓存内存。 –

+0

这很可能,只是缓慢。 – harold

+0

我认为使用缓存一致性会更容易。通过缓存一致性,核心可以将缓存行保留在缓存中,直到操作完成。 没有,我无法想象一个比锁定“公共汽车”更现实的方式。 –

这个答案的内容非常相似的this Dr Dobbs' article的内容,特别是“锁定”一节中,我咨询了解(QPI)上亦有QuickPath Interconnect架构锁定功能的系统。
因为这个帖子已被标记为“社区wiki”。

是的,这是可能的。

8086没有缓存但能够perform atomic operations
由于在FSB中引入了#lock信号,所以完成了此操作。当这个信号被声明时,任何代理都不能启动新的事务 - 只有锁定的一个可以被执行(实际上,not even the locking one sometimes) - 因此quiescing系统。

随着缓存的引入,减少了对总线锁的需求。处理器可以通过在锁定期间延迟来自其他代理的任何snooping request来操作其缓存。
但是,由于向后兼容性以及保护变量可能会保留传统总线锁,因此保留变量可能为span two cache rows

当FSB,而推荐的QPI(认为集线器体系结构和多插槽系统的的放弃的)下降,#lock信号被放弃了,太。

现在,其中一个QPI代理被设计为Quiesce Master(QM)。当处理器想要锁定时,它会询问QM,QM会通知其他代理(包括DMA代理)来停止任何未来的请求。
当每个代理都已向QM确认时,它会通知锁请求者系统已锁定。然后执行原子操作,完成后,向QM呈现所请求的解锁。最后,QM将继续通知其他代理商再次允许新交易。
以这种方式,用于锁定整个存储器子系统的机制在现代设计中仍然存在并且功能强大。

+0

很好的答案。需要说明的是,关于QPI和缓存协议交互的讨论是否适用于单插槽系统?我不清楚。所讨论的大部分机制都是为了保持多个套接字之间的一致性(其中QPI是它们之间的路径),但是在单个套接字系统中,您没有这种复杂性,因为L3可以主要充当仲裁器(即协调线程主要交换数据通过L3,这是缓存的第一个共享级别)。我不知道有DMA功能的代理,如视频卡或存储。也许他们用它? – BeeOnRope

+0

@BeeOnRope,我不太清楚。来自Microsoft的[本文档](http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/pcie_lockedoperations.doc)似乎表明,PCIe根联合体负责锁定PCIe总线。它可能由L3缓存控制(表现为QM),或者它可能是QM本身(是通过QPI连接的PCIe根联合体?) –