Multi-thread Java - problème de cohérence de cache et cache protocole MESI cohérence (b)

mémoire tampon d'écriture et invalidantes

contexte:

MESI protocole de cohérence de cache pour résoudre le problème, mais il y a aussi une performance de sa propre faiblesse - le processeur pour effectuer une opération d'écriture de la mémoire, le processeur doit attendre que toute autre copie des données correspondantes dans son cache et supprimer recevoir ces processeurs répondre Invalider Accusé de réception / lecture du message après que les données de réponse peuvent être écrites dans le cache. Afin d'éviter et de réduire ce délai (Latence) attente pour l'opération d'écriture provoquée par les concepteurs de matériel introduit le tampon d'écriture et de file d'attente busting,

mémoire tampon d'écriture

tampon d' écriture (magasin tampon, aussi appelé écriture tampon) est une capacité de processeur interne est plus petit que le moyen de cache de mémoire de traction à grande vitesse privée 6. Chaque processeur a son tampon d'écriture, un tampon d'écriture peut être interne comprenant une pluralité d'entrées (entrée). Un processeur ne peut pas lire le contenu de la mémoire tampon d'écriture sur un autre processeur.
Insérer ici l'image Description
Après l'introduction du tampon d'écriture, le processeur lors d' une opération d'écriture ferait un tel accord:

Si l'entrée de cache correspondant à l'état E ou M. le processeur peut écrire des données directement à la ligne de cache correspondant sans avoir à envoyer des messages à voler si l'état d'entrée de cache correspondant est s. Ensuite, le processeur écrit d'abord concerné les données (y compris les adresses de mémoire et les données à exploiter) les entrées de mémoire ont été écrites dans le tampon et envoie un message Invalider, si l'on appellera l'opération d'écriture correspondant rencontré un manque d'écriture I entrée de cache correspondant à l'état, (WriteMiss) , le temps sera traité en premier Shao écrit une entrée dans les personnes de mémoire tampon de données d'écriture et d'envoyer des messages ReadInvalidate.

Ainsi, l'introduction d'un tel processeur tampon d'écriture lorsque l'opération d'écriture peut être effectuée sans attendre Invalidate message d'acquittement, ce qui réduit le temps de latence de l'opération d'écriture. Cela permet à l'opération d'écriture exécutée par le processeur dans les autres processeurs répondre Invalider Accusé de réception / Lire le message de réponse cette fois-ci d'autres instructions peuvent être exécutées, améliorant ainsi l'efficacité de l'exécution d'instructions du processeur.

Après l'introduction de la file d'attente d'invalidation (Invalidate file d'attente), le processeur ne supprime pas la copie des données correspondant à l'adresse spécifiée dans le message après réception du message Invalidate, mais le message est stocké dans la file d'attente après que les Reverts d'invalidation invalider les Valider le message, ce qui réduit la radiation le temps d'attente requis opération exécutée par un processeur. Certains processeurs (tels que x86) ne peuvent pas utiliser la file d'attente d'invalidation.

mémoire tampon d'écriture et l'introduction de la file d'attente infirmation apportera de nouveaux problèmes - réordonnancement mémoire et des problèmes de visibilité.

Store and Forward

Ce processeur lit les données directement à partir de la mémoire tampon d'écriture pour mettre en œuvre une technique d'opération de lecture est appelée magasin et en avant (Forwarding Store). Magasin et avant de sorte que l'opération d'écriture peut être effectuée sans affecter le processeur où le processeur pour effectuer le résultat de l'opération de lecture est stockée dans l'opération d'écriture tampon d'écriture.

réordonnancement mémoire revisitée

tampon d'écriture et de casse-file d'attente peut entraîner des réordonnancement de mémoire.

- couche barrière mémoire matérielle est divisée en deux: Load Barrier et  Store Barrierqui est lu barrière et barrière d'écriture.
- un processeur dans certaines conditions de tampon (tel que le tampon d'écriture est pleine, I / 0 instruction est exécutée) va écrire vidange (drain) ou de rinçage (Flush), est sur le point d'écrire le contenu de la mémoire tampon de mémoire cache d'écriture, Cependant, d'un programme ou un ensemble de point de vue de traction variable de mise à jour, le processeur lui - même ne garantit pas que le programme est en temps opportun flush.

Afin d'assurer un processeur mesure partagées variations peuvent être apportées à mettre à jour les autres processeurs synchronisés, tels que le compilateur par le système sous - jacent exige un type particulier d'instructions de barrière de mémoire sont appelés. Stockage barrière de barrière de mémoire (banque d'
instruction barrière) peut amener le processeur à exécuter l'écriture du tampon de rinçage de celui - ci.

Cependant, le vidage du tampon d'écriture est ne résout que la moitié du problème de visibilité. Parce que l'autre moitié est la visibilité du problème en raison d'invalider la file d'attente. L'introduction de infirmation file d'attente elle-même conduira à de nouveaux problèmes si un processeur ne supprime pas la mémoire avant d'effectuer une opération de lecture sur la copie du cache du processeur des données pertinentes en fonction du contenu de la file d'attente non valide, elle peut conduire à le processeur lit les données sont anciennes, des données périmées, de sorte que les mises à jour apportées à d'autres pertes de processeurs.

Pour faire un fil en cours d'exécution sur le processeur peut lire fil supplémentaire en cours d'exécution sur les mises à jour du processeur apportées à une variable partagée, le processeur doit d'abord supprimer la file d'attente d'invalidation du cache selon les messages stockés Invalider correspondant des données en double, de sorte que les autres fils en cours d'exécution sur le processeur met à jour la variable partagée enregistrer réalisé sous l'action de protocole de cohérence de cache peut être synchronisé dans la mémoire cache du processeur.

barrières de mémoire dans une barrière de charge (Load Barrière) Il est utilisé pour résoudre ce problème. file d'attente d'invalidation de la barrière en cours de chargement sur la base du contenu de l'adresse de mémoire spécifiée, l'entrée de cache correspondant à l'état de la mémoire cache sur les processeurs respectifs sont marqués I « ce que le processeur pour l' exécution ultérieure de l'adresse correspondante (invalidation du contenu de file d'attente lire les messages doivent être envoyés lorsque l'adresse spécifiée) de la mémoire lit. Pour les autres mises à jour du processeur apportées aux variables partagées associées synchronisées au cache du processeur.

architectures de processeur différentes prises en charge (autorisée) réordonner mémoire différente. Par exemple, les processeurs modernes adopteront un tampon d'écriture, mais certains processeurs (tels que x86) garantissent une écriture séquentielle, que ces processeurs ne sont pas autorisés StoreStore apparaissent réordonnancement.

visibilité revisitée

Nous disons que le tampon d'écriture est une racine matérielle causer des problèmes de visibilité.

Le processeur dans certaines conditions de tampon (tel que le tampon d'écriture est pleine, I / 0 instruction est exécutée) va écrire vidange (drain) ou de rinçage (Flush), est sur le point d'écrire le contenu de la mémoire tampon de mémoire cache d'écriture, Cependant, d'un programme ou un ensemble de point de vue de traction variable de mise à jour, le processeur lui-même ne garantit pas que le programme est en temps opportun flush. Par conséquent, afin d'assurer un processeur mesure partagées variations peuvent être apportées à mettre à jour les autres processeurs synchronisés, tels que le compilateur par le système sous-jacent exige un type particulier d'instructions de barrière de mémoire sont appelés. Stockage barrière de barrière de mémoire instruction (Barrier Store) peut amener le processeur à exécuter l'écriture du tampon de rinçage de celui-ci.

Cependant, le vidage du tampon d'écriture est ne résout que la moitié du problème de visibilité. Parce que l'autre moitié est la visibilité du problème en raison d'invalider la file d'attente. L'introduction de infirmation file d'attente elle-même conduira à de nouveaux problèmes si un processeur ne supprime pas la mémoire avant d'effectuer une opération de lecture sur la copie du cache du processeur des données pertinentes en fonction du contenu de la file d'attente non valide, elle peut conduire à le processeur lit les données sont anciennes, des données périmées, de sorte que les mises à jour apportées à d'autres pertes de processeurs. Par conséquent, afin de faire un fil conducteur sur le processeur peut lire fil additionnel en cours d'exécution sur les mises à jour de processeur apportées à une variable partagée, le processeur doit d'abord enlever la file d'attente d'invalidation de mémoire cache selon les messages stockés dans Invalidate les données de copies respectives, de sorte que le fil en cours d'exécution sur les autres processeurs à la variable partagée sauvegarde mises à jour effectuées sous l'action du protocole de cohérence de cache peuvent être synchronisés dans le cache du processeur.

barrières de mémoire dans l'usine ainsi que la barrière (barrière de charge) Il est utilisé pour résoudre ce problème. file d'attente d'invalidation de la barrière en cours de chargement sur la base du contenu de l'adresse de mémoire spécifiée, l'entrée de cache correspondant à l'état de la mémoire cache sur les processeurs respectifs sont marqués I « ce que le processeur pour l'exécution ultérieure de l'adresse correspondante (invalidation du contenu de file d'attente lire les messages doivent être envoyés lorsque l'adresse spécifiée) de la mémoire lit. Pour les autres mises à jour du processeur apportées aux variables partagées associées synchronisées au cache du processeur.

Par conséquent, pour résoudre le problème de visibilité a d'abord été fait pour rendre l'écriture de fil à la mise à jour des variables partagées peut atteindre (à mémoriser) cache, de sorte que les mises à jour des autres processeurs sont synchronisés. En second lieu, le processeur lit le fil où vous voulez invalide la file d'attente du contenu « Appliquer » à son cache, de sorte qu'il peut être partagé sur d'autres processeurs deviennent des mises à jour effarés faits pour synchroniser le cache du processeur .

Ceci est réalisé par deux paires à l'aide de la barrière de stockage avec barrière de charge: barrière stockage exécution des threads d'écriture exécutée par le processeur pour protéger le fil mises à jour des variables partagées faites pour lire un fil, il est synchronisé ; barrière de charge lu l'exécution des threads exécutés par le processeur va écrire pour mettre à jour le fil de traction variable partagée a fait synchronisée sur le cache du processeur.

Magasin et de la technologie en avant peuvent également causer des problèmes de visibilité.

 

Publié 136 articles originaux · a gagné les éloges 6 · vues 1495

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42073629/article/details/104731403
conseillé
Classement