2017-05-07 2 views
3

Une question simple: est-ce qu'un LOCK CMPXCHG est possible sur une mémoire non mise en cache, c'est-à-dire que les pages marquées dans la table de pages ne sont pas mises en cache?LOCK CMPXCHG sur la mémoire non mise en cache?

+0

Pourquoi pas? Je ne me souviens de rien dans les manuels qui dise le contraire. Si quelque chose c'est la mémoire cacheable qui est traitée spécialement. –

+0

C'est possible, juste lent. – harold

+0

C'est plus facile avec la cohérence de cache je pense. Avec la cohérence de cache, le noyau peut simplement conserver la cacheline dans le cache jusqu'à ce que l'opération soit terminée. Sans, je ne peux pas imaginer un moyen plus réaliste que de verrouiller le "bus". –

Répondre

2

Le contenu de cette réponse ressemble étroitement au contenu de this Dr Dobbs' article, en particulier la section « Verrouillage », que je consultais pour comprendre le verrouillage sur un QuickPath Interconnect (QPI) a permis des systèmes.
En tant que tel, ce message a été marqué comme un "wiki de communauté".

Oui, il est possible.

Le 8086 avait pas de cache, mais a pu perform atomic operations.
Cela a été accompli grâce à l'introduction du signal de #lock dans le FSB. Lorsque ce signal a été affirmé, aucune nouvelle transaction pourrait être lancée par un agent que celui de verrouillage pourrait être exécuté (en fait, not even the locking one sometimes) -thereby quiescing le système.

Avec l'introduction de la mise en cache, la nécessité d'un verrou de bus a été réduit. Le processeur peut exploiter son cache en retardant snooping request d'autres agents pendant la durée du verrouillage.
Toutefois, le verrou de bus hérité a été conservé en raison de la rétrocompatibilité et parce que la variable protégée pouvait span two cache rows.

Lorsque le FSB a été abandonné en faveur de QPI (penser à l'abandon de l'architecture du moyeu et des systèmes multi-socket), le signal de #lock a été abandonné aussi.

Maintenant, l'un des agents QPI est conçu comme un Quiesce maître (QM). Lorsqu'un processeur veut un verrou, il demande à QM, qui à son tour informe les autres agents, y compris les agents DMA, d'arrêter toute demande future.
Lorsque chaque agent a accusé réception du message QM, il informe le demandeur de verrouillage que le système est verrouillé. L'opération atomique est alors effectuée, et à la fin, un déverrouillage demandé est présenté au QM. Enfin, la QM informera les autres agents que de nouvelles transactions sont à nouveau autorisées.
De cette manière, les mécanismes de verrouillage du sous-système de mémoire entier sont toujours présents et fonctionnels dans des conceptions modernes.

+0

Bonne réponse. Pour être clair, la discussion sur l'interaction des protocoles QPI et de mise en cache s'applique-t-elle aux systèmes à socket unique? Ce n'est pas clair pour moi. La plupart des mécanismes discutés sont pour maintenir la cohérence entre plusieurs sockets (où QPI est le chemin entre eux) mais dans un système de socket unique vous n'avez pas cette complexité puisque le L3 peut agir comme arbitre (ie, les threads de coordination échangent principalement). données à travers L3 qui est le premier niveau partagé de cache). Je ne sais pas sur les agents compatibles DMA comme les cartes vidéo ou stoage. Peut-être qu'ils l'utilisent? – BeeOnRope

+0

@BeeOnRope, je ne sais pas honnêtement.[Ce document] (http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/pcie_lockedoperations.doc) de Microsoft semble suggérer que le complexe racine PCIe est responsable de verrouiller le bus PCIe. Il peut être contrôlé par le cache L3 (Agissant en tant que QM) ou il peut être le QM lui-même (le complexe racine PCIe est-il connecté via QPI?) –