Multi-hilo de Java - caché problema de coherencia y MESI protocolo de coherencia de caché (a)

Caché es una tasa de acceso a la memoria principal de la gran capacidad menor que los principales medios de almacenamiento de memoria, cada procesador tiene su propia memoria caché. Después de la introducción de la memoria caché, el procesador no se ocupa de la aplicación de la lectura de la memoria y las operaciones de escritura a la memoria principal directamente, sino a través de la memoria caché. nombre de variable corresponde a la dirección de memoria, y los datos correspondientes al valor de variable se almacenan en el espacio de memoria correspondiente.

tabla de caché de hash corresponde a un elemento de fijación (ChainedHash tabla). Contiene un número de cubo (Bucket, llamado hardware Set), y cada cubeta puede comprender una pluralidad de entradas de caché (CacheEntry). A partir de la estructura interna
Aquí Insertar imagen Descripción
de las entradas de caché puede ser aún más dividido en Tag, datos de bloque Flag y en el que estas tres partes, los datos de bloque también se denomina una línea de caché (cacheLine), que es los datos entre la memoria caché y los principales medios de memoria para almacenar el mínimo conmutación leen de la memoria o prepararse para escribir datos en la memoria. parte información de etiqueta contiene los datos correspondientes a la dirección de memoria de línea de caché (parte alta de los bits de dirección de memoria). Indicador para indicar la información de estado de la línea de caché correspondiente. La capacidad de la línea de caché (también denominado ancho de la línea de caché) es generalmente un múltiplo de 2, que varían en tamaño entre 16 a 256 byte (byte). Una línea de caché puede almacenar valores de algunas variables, y los valores de una pluralidad de variables pueden ser almacenados en la misma línea de caché.
Aquí Insertar imagen Descripción
El procesador establece la dirección de memoria correspondiente decodificador cuando se realiza operaciones de acceso a la memoria. Se compone de una etiqueta de la decodificación de la memoria del resultado dirección, offset de índice y tres datos parciales. En donde, números de índice correspondiente a la bañera, que puede ser utilizado para localizar la dirección de memoria correspondiente a la bañera;

El barril incluye una pluralidad de entradas de caché pueden etiquetar entrada de caché correspondiente a un número relativo, su papel es para ser comparado con cada uno entradas porción Tag caché en el mismo cubo para localizar una entrada de caché en particular ;. una entrada de caché la línea de caché se puede utilizar para almacenar una pluralidad de variables, offset es el desplazamiento dentro de la ubicación de la línea de caché, su papel es el de determinar una variable de posición de inicio se almacena en una línea de caché.

 

acierto de caché

De acuerdo con los resultados de esta decodificación de direcciones de memoria, si el subsistema de memoria caché es capaz de encontrar la línea de caché correspondiente y la línea de caché en la entrada de caché de la bandera indica que la entrada de caché correspondiente es válido, entonces decimos que la operación genera un golpe correspondiente memoria caché (CacheHit ) 3, de lo contrario, vamos a llamar a la operación de la memoria correspondiente genera un error de caché (CacheMiss).

Desde la perspectiva del rendimiento, la reducción de errores de caché

Comprende un fallo de caché leer perder (Leer señorita) y un fallo de escritura (Write señorita), que corresponden respectivamente a la memoria de lectura y las operaciones de escritura. Cuando se genera un fallo de lectura, las cargas de procesador de datos deben ser leídos y se almacena en la línea de caché correspondiente de la memoria principal. Este proceso dará lugar a un bloqueo del procesador (Stall) y otras instrucciones no puede ser ejecutado, que no es propicio para jugar la potencia de procesamiento del procesador.

Un error de caché es inevitable

Dado que la capacidad total de la memoria caché es mucho menor que la capacidad total de la memoria principal, una línea de caché con un período de tiempo de almacenamiento de datos diferentes pueden ser diferentes, falta de memoria caché es inevitable.

En el sistema Linux, podemos usar el kernel de Linux Potencia herramienta para ver una situación de falta de memoria caché durante la operación del programa.

Comúnmente se hace referencia como un búfer de caché (LI Cache), caché secundaria (L2 Cache), caché de tres niveles (L3 Cache)
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
cache de la CPU a la más estrecha más rápido, pero la capacidad es menor. Ahora, la mayoría de los procesadores tienen dos o tres caché, de abajo hacia arriba como caché L3, L2 caché, caché L1 . Caché se puede dividir en las memorias caché de instrucciones y datos, caché de instrucciones para almacenar en caché los códigos de programa, caché de datos con los datos de caché L1 del programa de caché, la memoria caché, la memoria caché local del núcleo, en la caché de datos L1d 32K y la memoria caché de instrucciones de L1i 32k, L1 necesita 3cycles de acceso, que toma alrededor de 1 ns;

La caché L2, la cache secundaria, la caché local del núcleo, está diseñado como un amortiguador entre la memoria caché L1 y el tamaño de caché L3 compartido es de 256 K, la necesidad de 12cycles acceso L2, que toma alrededor 3ns;

L3 Cache, caché de tres niveles, la misma ranura en todo núcleo compartido caché L3, se divide en una pluralidad de segmentos de 2 M de acceso L3 necesita 38cycles, que toma alrededor 12ns;

Una caché puede estar integrado directamente en el núcleo del procesador, por lo que el acceso es muy eficiente. generalmente comprende dos partes, una parte para las instrucciones de almacenamiento, una parte para el almacenamiento de datos, mientras más cerca la caché del procesador, más rápida será la memoria, el coste de fabricación superior, menor capacidad.

protocolo de coherencia de caché

problema de coherencia de caché

Múltiples hilos simultáneamente acceden a la misma vez que la planta se convierte en una memoria caché compartida en el procesador para llevar a cabo cada uno de estos hilos se mantendrá una copia de la propagación variable compartida, lo que provocó una nueva edición de su copia del procesador de datos después de la actualización, el procesador de cómo otros "consciente" de la actualización y para responder de manera adecuada para asegurar que el procesador pueda leer la posterior lee las actualizaciones compartidas a la tracción variable en el tiempo. Este es el problema de coherencia de caché.

Por ejemplo:

datos de la CPU-0 leer la memoria principal, la CPU-0 búfer de caché, la CPU-1 para hacer la misma cosa, y la CPU 1-modificados en el valor de recuento 2, y se sincroniza a la CPU-1 caché, pero el valor después de este cambio no se escribe en la memoria principal, la CPU-0 el acceso al byte, debido a que el caché no se actualiza, es aún antes de que el valor, que dará lugar a problemas de datos inconsistentes.

sustancia

En esencia, la forma de evitar la pérdida de datos y leer actualizaciones problemas sucios. Varios fabricantes ofrecen una gran cantidad de soluciones y finalmente eligieron el protocolo de coherencia de caché.
de cierre del bus

Cuando una CPU opera en tampón sus datos y transmite una señal al cierre del bus. Las peticiones de otros procesadores serán bloqueados, entonces el procesador puede monopolizar la memoria compartida. clave de bus es equivalente a la comunicación entre la CPU y la memoria bloqueada, por lo que este enfoque podría resultar en una disminución del rendimiento de la CPU, así que después de la familia de procesadores P6, se ha producido de otra manera, la caché está bloqueado.

cerradura caché

Si la línea de caché en el área de memoria caché del procesador está bloqueado durante una operación de bloqueo, cuando se realiza la operación de bloqueo de memoria de escritura no simultánea, la sentencia LOCK procesamiento de señal no está en el autobús, pero para modificar la dirección de buffer interno, entonces el mecanismo de coherencia de caché para garantizar un funcionamiento atomicidad, porque mecanismo de coherencia de caché se detiene mientras los datos modificados es dos o más región de memoria caché del procesador, cuando otros datos de vuelta de escritura del procesador se ha bloqueado línea de caché puede conducir a invalidar la línea de caché . Así que si se declara un mecanismo de bloqueo de la CPU, genera una instrucción LOCK, tendrá dos efectos.

  1. instrucciones de bloqueo prefijo puede causar causa la caché del procesador se vuelve a escribir la memoria, después de que el procesador P6, bus de señal BLOQUEO generalmente no cerraba, pero el caché de bloqueo.
  2. Memoria caché de un procesador se vuelve a escribir causas otra caché del procesador no es válido

X86-basado protocolo MESI problema.

MESI (Modified-exclusiva-Shared-no válida) protocolo es un protocolo ampliamente utilizado de coherencia de caché, protocolo del procesador x86 de coherencia de caché utilizada se basa en el protocolo MESI.

protocolo MESI para controlar el acceso a escritura de datos de memoria es similar a la cerradura, por lo que la misma dirección para la operación de lectura de memoria es complicado, y una operación de escritura en la memoria para la misma dirección es exclusiva, es decir, por la misma dirección de memoria para las operaciones de escritura en cualquiera de las tiempo puede ser ejecutado por un procesador. En el protocolo MESI, un procesador a la memoria debe tener la propiedad de los datos al escribir datos.

Con el fin de garantizar la coherencia de los datos. MESI el estado de la entrada de caché se divide en Modificado (actualizado), Exclusivo (exclusivo), Compartido (compartido) y no válida (no válido) los cuatro, y se define sobre la base de una mensaje de grupo (mensaje) de la coordinación de los distintos procesadores de leer y escribir operaciones de memoria.
protocolo MESI valor del indicador en una entrada de caché tiene las siguientes cuatro posibilidades: • No válido (. no válida denota I). Este estado indica que la línea de caché correspondiente no contiene copias válidas de los datos correspondientes a cualquier dirección de memoria. Este estado es el estado inicial de la entrada de caché. • Shared (compartido, denotado por s). Este estado indica que la línea de caché correspondiente contiene una copia de los datos correspondientes a una dirección de memoria respectiva. Y, el procesador caché también puede contener otras copias de los datos correspondientes a la misma dirección de memoria. En consecuencia, una entrada de caché de estado si el compartida, y también es el valor del Tag valor de entrada de la caché de la misma entrada de caché en otro procesador, entonces el estado de la entrada de caché está también compartió. En esta entrada de caché de estado, la línea de caché que es consistente con los datos contenidos en los datos contenidos en la memoria principal. • Exclusivo (exclusivo, denotado E). Este estado indica que la línea de caché correspondiente contiene una copia de los datos correspondientes a una dirección de memoria respectiva. Entonces, la línea de caché exclusiva de una manera para retener una copia de los datos de la dirección de memoria correspondiente, es decir, todas las demás cachés retiene el procesador no está en copia válida de los datos. En un mil de la entrada de caché de estado, la línea de caché que es consistente con los datos contenidos en los datos contenidos en la memoria principal.







• Modificado (cambiado, denotado M). Este estado indica que la línea de caché correspondiente contiene las actualizaciones de datos de resultados hechas a la dirección de memoria correspondiente. protocolo MESI desde un momento dado sólo un procesador para tener la misma dirección de memoria correspondiente a los datos actualizados, por lo que la memoria caché en una pluralidad de procesadores en el mismo valor de la etiqueta en la entrada de caché, un momento dado sólo para que una entrada de caché en este estado. En esta entrada de caché de estado, la línea de caché de datos que contiene los datos en la memoria principal contiene inconsistente.
protocolo MESI define un conjunto de mensajes (Message) para la lectura de la coordinación de los diversos procesadores, la operación de escritura en memoria, como se muestra en la Tabla 11-1. protocolo HTTP cf., podemos meses mensaje de protocolo en un mensaje de solicitud y un mensaje de respuesta. El procesador se enviará cuando se lee la memoria de realizar, la operación de escritura si es necesario a un bus (Bus) Mensaje de solicitud específica, y cada procesador olfateando adicional (Snoop, también conocida como bloqueo) emitido por el otro bus del procesador mensaje de solicitud y mensaje de respuesta en respuesta a un bus correspondiente bajo ciertas condiciones.
Aquí Insertar imagen Descripción
procesador de protocolo MESI leer y operaciones de escritura?

S discute a continuación para la lectura de datos en el procesador 0.

Datos S proporciona en la dirección de memoria A del procesador y el procesador de procesador 0 Procesador l puede compartir los datos.

S discute a continuación para la lectura de datos en el procesador 0. Procesador 0 encontrará una entrada de caché correspondiente a la dirección A, y lee la entrada de caché y el valor de la etiqueta de la bandera (entrada de caché de estado). Para facilitar la discusión, no estamos aquí para hablar de juego valor de la etiqueta. Processor0 entrada de caché de estado si se encuentra. A continuación, el procesador puede leer es H, E, o directamente a partir de los correspondientes s línea de caché correspondiente a los datos de dirección A, sin tener que enviar los mensajes al bus. entrada de caché de estado del procesador se encuentra en I. 0 si indica que la memoria caché del procesador no contiene una copia válida de los datos de S, entonces las necesidades Leer procesador para enviar un mensaje al 0 bus para leer los datos correspondientes a la dirección A, y otros procesadores procesador l (o de memoria principal) se requiere para proporcionar la ReadResponse de datos de respuesta correspondiente

Cuando se recibe el mensaje ReadResponse procesador 0, se transporta en los datos (datos de bloques que contienen datos de S) en el estado de la línea caché apropiada y actualiza la entrada de caché correspondiente es S. Procesador mensaje Leer respuesta 0 recibida desde la memoria principal puede ser posible también de otros procesadores (procesador I).

Olfateo mensaje de bus del procesador enviado por otro procesador. Procesador Olfateé mensaje Leer cuando la dirección de memoria para ser leído será eliminado del mensaje. Y encontrar la entrada correspondiente en su caché basado en la dirección de la memoria caché. Procesador de E Si no se encuentra la entrada de caché de estado para el I (en el caso que se muestra en la Tabla 11-2). A continuación, la copia de los datos leídos en la memoria caché del procesador a ser, en esta estructura de datos l bloque procesador voluntad tiempo (en lugar de sólo los datos solicitados Processor0 s) correspondiente al mensaje de línea ReadResponse respectivo caché y almacenado, después. relleno "el mensaje. Si el estado de la entrada de caché correspondiente encontró processor1 es M, es posible mensaje processor1 ReadResponse antes de enviar el bus de datos correspondiente línea de caché se escribe en la memoria principal de transmisión del bus .Processor1 ReadResponse, la caché correspondientes la entrada de estado se actualiza a S. Si Procesador encontré entrada de caché de estado I, entonces el procesador 0 ReadResponse el mensaje recibido procede de la memoria principal.

Visto en la memoria Processor0 tiempo, Procesador incluso leer puse al día y esto sigue siendo informado en el procesador de caché I causado por inconsistencias en la caché de datos y la memoria principal de los datos de la memoria correspondientes en el mensaje MESI bajo la coordinación de esta incoherencia no conducirá a Processor0 también leer un valor antiguo rancio.

Un procesador discusión 0 a la dirección para lograr datos de escritura

Un procesador para realizar cualquier memoria debe tener la propiedad de la operación de escritura de datos correspondiente. Al realizar una operación de escritura en memoria, Processor0 en primer lugar encontrar las entradas de caché correspondientes sobre la base de la dirección de memoria A. entrada de caché de estado si se encuentra Processor0 E o M, el procesador indica que los datos correspondientes ya posee, en cuyo caso el procesador puede escribir datos directamente en el estado de la línea de caché correspondiente y actualiza la entrada de caché correspondientes M. El estado de la entrada de caché si no se encuentra Processor0 E, H, las necesidades de procesador para enviar bus Invalidar para obtener la propiedad del mensaje de datos. Después de recibir los otros procesadores invalidará mensajes de entrada de estado de la memoria caché en su caché correspondientes se actualiza a I (correspondiente a eliminar datos duplicados) e invalidar el Reconocimiento Responder mensaje. El procesador (es decir, una operación de escritura en la memoria ejecutado por el procesador) Invalidate mensajes enviados, a continuación, debo recibir todos los datos después de todos los demás procesadores nvalidate Reconocer mensaje es una respuesta a la actualización en la línea de caché correspondiente.
Aquí Insertar imagen Descripción
estado del procesador de la entrada de caché encontrados Si 0 es s. Se indica que el procesador de caché L puede también conserva una copia de los datos (hipótesis I) correspondiente a la dirección A en este necesita tiempo para ser enviada procesador 0 mensajes Invalidate al bus. Procesador 0 será una entrada de caché correspondiente después de recibir todos los otros procesadores InvalidateAcknowledge responder actualizaciones de mensajes el estado E, procesador de 0 obtenidos en este momento la propiedad de dirección de datos A. A continuación, Procesador 0 se puede escribir en la línea de caché de datos correspondiente y actualiza la entrada de caché correspondiente al estado de M. Procesador de entrada de caché de estado se encuentra, si me 0, indica que el procesador no contiene una copia válida de los datos correspondientes a la dirección A (Escenario 2), en este momento 0 necesario para Procesador mensajes autobús Leer Invalidate envió. Procesador 0 Leer respuesta después de recibir el mensaje, y el resto mensaje de invalidación Reconocer respondieron por el procesador, el estado de la actualización a la entrada de caché correspondiente a E, que indica que el procesador ha obtenido la propiedad de los datos correspondientes. estado A continuación, Procesador 0 puede ser una escritura de datos convencional en la línea de caché correspondiente y la entrada de caché correspondiente se actualiza para M. Otros procesadores Invalidate Después de recibir el mensaje o los mensajes leídos Invalidate deben encontrar la entrada de caché correspondiente en la memoria caché del procesador de acuerdo con la dirección contenida en el mensaje. Si el estado de la entrada de la caché del procesador se encuentra que no es I (Escenario 2), el procesador debo declarar entrada de caché correspondiente se actualiza para que, al eliminar una copia del bus de datos y para responder Invalidate mensaje acuse. Visible. Invalidate Invalidate acusar recibo del mensaje y el mensaje de la operación de escritura para la misma dirección de memoria sólo puede ejecutarse por un procesador en un momento dado, evitando así múltiples procesadores actualizar simultáneamente inconsistencias en los datos que pueden resultar de los mismos datos.

Desde la vista de los ejemplos anteriores. En el caso de múltiples hilos convierte llegó compartir, protocolo MESI ha sido capaz de garantizar un hilo es cambios visibles a variables compartidas hilo conductor en otros procesadores de; es el caso, ¿cómo puede la visibilidad de la existencia? Esto es del buffer de escritura y la cola de punto de vista para explicar que revienta.

 

Publicados 136 artículos originales · ganado elogios 6 · vistas 1496

Supongo que te gusta

Origin blog.csdn.net/weixin_42073629/article/details/104731312
Recomendado
Clasificación