stringtranslate.com

Coherencia de caché basada en directorios

En ingeniería informática , la coherencia de caché basada en directorios es un tipo de mecanismo de coherencia de caché , en el que se utilizan directorios para gestionar cachés en lugar de espionaje de bus . Los métodos de espionaje de bus escalan de forma deficiente debido al uso de difusión . Estos métodos se pueden utilizar para apuntar tanto al rendimiento como a la escalabilidad de los sistemas de directorio. [1]

Formato vectorial de bits completo

Diagrama del formato de directorio de vector de bits completo, donde E = exclusivo, S = compartido, M = modificado y U = sin almacenar en caché

En el formato de vector de bits completo, para cada línea de caché posible en la memoria , se utiliza un bit para rastrear si cada procesador individual tiene esa línea almacenada en su caché . [ cita requerida ] El formato de vector de bits completo es la estructura más simple de implementar, pero la menos escalable. [1] El SGI Origin 2000 utiliza una combinación de vector de bits completo y vector de bits grueso según la cantidad de procesadores. [2]

Cada entrada de directorio debe tener 1 bit almacenado por procesador por línea de caché, junto con bits para rastrear el estado del directorio. Esto hace que el tamaño total requerido sea (número de procesadores) × número de líneas de caché , con una relación de sobrecarga de almacenamiento de (número de procesadores)/(tamaño de bloque de caché × 8) .

Se puede observar que la sobrecarga del directorio aumenta linealmente con la cantidad de procesadores. Si bien esto puede estar bien para una pequeña cantidad de procesadores, cuando se implementa en sistemas grandes, los requisitos de tamaño para el directorio se vuelven excesivos. Por ejemplo, con un tamaño de bloque de 32 bytes y 1024 procesadores, la relación de sobrecarga de almacenamiento se convierte en 1024/(32×8) = 400%. [ cita requerida ]

Formato de vector de bits gruesos

Diagrama del formato del directorio de vectores de bits gruesos

El formato de vector de bits grueso tiene una estructura similar al formato de vector de bits completo, aunque en lugar de rastrear un bit por procesador para cada línea de caché, el directorio agrupa varios procesadores en nodos , almacenando si una línea de caché está almacenada en un nodo en lugar de en un procesador. Esto mejora los requisitos de tamaño a expensas del ahorro de tráfico de bus (procesadores por nodo - 1) × (líneas totales) bits de espacio. [2] Por lo tanto, la sobrecarga de la relación es la misma, solo reemplazando el número de procesadores con el número de grupos de procesadores. Cuando se realiza una solicitud de bus para una línea de caché que tiene un procesador en el grupo, el directorio transmite la señal a todos los procesadores en el nodo en lugar de solo a las cachés que la contienen, lo que genera tráfico innecesario a los nodos que no tienen los datos almacenados en caché. [ cita requerida ]

En este caso, la entrada del directorio utiliza 1 bit para un grupo de procesadores para cada línea de caché. Para el mismo ejemplo del formato Full Bit Vector, si consideramos 1 bit para 8 procesadores como un grupo, entonces la sobrecarga de almacenamiento será 128/(32×8)=50%. Esto es una mejora significativa con respecto al formato Full Bit Vector.

Formato de directorio disperso

Un caché solo almacena un pequeño subconjunto de bloques en la memoria principal en un momento determinado. Por lo tanto, la mayoría de las entradas en el directorio pertenecerán a bloques no almacenados en caché. En el formato de directorio disperso, el desperdicio se reduce almacenando solo los bloques almacenados en caché en el directorio. [ cita requerida ] Considere un procesador con un tamaño de caché de 64 KB con un tamaño de bloque de 32 bytes y un tamaño de memoria principal de 4 MB. El número máximo de entradas que puede tener el directorio en el formato de directorio disperso es 2048. Si el directorio tiene una entrada para todos los bloques en la memoria, el número de entradas en el directorio será 131072. Por lo tanto, es evidente que la mejora de almacenamiento proporcionada por el formato de directorio disperso es muy significativa.

Formato de árbol binario con balance numérico

En este formato el directorio está descentralizado y distribuido entre los cachés que comparten un bloque de memoria. Los diferentes cachés que comparten un bloque de memoria se organizan en forma de árbol binario . El caché que accede primero a un bloque de memoria es el nodo raíz . Cada bloque de memoria tiene la información del nodo raíz (HEAD) y el campo Contador de compartición (SC). El campo SC tiene el número de cachés que comparten el bloque. Cada entrada de caché tiene punteros a los siguientes cachés compartidos conocidos como L-CHD y R-CHD. Una condición para este directorio es que el árbol binario debe estar equilibrado en número, es decir, el número de nodos en el subárbol izquierdo debe ser igual o mayor en uno que el número de nodos en el subárbol derecho. Todos los subárboles también deben estar equilibrados en número. [3]

Formato de directorio encadenado

En este formato, la memoria contiene el puntero de directorio a la última caché que accedió al bloque y cada caché tiene el puntero a la caché anterior que accedió al bloque. Por lo tanto, cuando un procesador envía una solicitud de escritura a un bloque en la memoria, el procesador envía invalidaciones a lo largo de la cadena de punteros. En este directorio, cuando se reemplaza un bloque de caché, necesitamos recorrer la lista para cambiar el directorio, lo que aumenta la latencia . Para evitar esto, ahora se utilizan ampliamente las listas doblemente enlazadas en las que cada copia en caché tiene punteros a la caché anterior y a la siguiente que acceden al bloque. [4]

Formato de puntero limitado

El formato de puntero limitado utiliza un número determinado de punteros para rastrear los procesadores que almacenan en caché los datos. Cuando un nuevo procesador almacena en caché un bloque, se elige un puntero libre de un grupo para apuntar a ese procesador. Hay algunas opciones para manejar los casos en los que el número de participantes excede el número de punteros libres. Un método es invalidar uno de los participantes, utilizando su puntero para el nuevo solicitante, aunque esto puede ser costoso en los casos en los que un bloque tiene una gran cantidad de lectores, como un bloqueo. Otro método es tener un grupo separado de punteros libres disponibles para todos los bloques. Este método suele ser eficaz ya que el número de bloques compartidos por una gran cantidad de procesadores normalmente no es muy grande. [ cita requerida ]

Referencias

  1. ^ ab Reihnhart, Steven; Basu, Arkaprava; Beckmann, Bradford; Hill, Mark (11 de julio de 2013). "Coherencia de directorios de CMP: una granularidad no sirve para todos" (PDF) . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  2. ^ ab Laudon, James; Lenoski, Daniel (1 de junio de 1997). El origen de SGI: un servidor ccNUMA altamente escalable. Actas del 24.º simposio internacional anual sobre arquitectura informática.
  3. ^ Seo, Dae-Wha; Cho, Jung Wan (1 de enero de 1993). "Esquema de coherencia de caché basado en directorios utilizando un árbol binario con balance numérico". Microprocesamiento y microprogramación . 37 (1): 37–40. doi :10.1016/0165-6074(93)90011-9.
  4. ^ Chaiken, D.; Campos, C.; Kurihara, K.; Agarwal, A. (1990-06-01). "Coherencia de caché basada en directorios en multiprocesadores a gran escala". Computadora . 23 (6): 49–58. CiteSeerX 10.1.1.461.8404 . doi :10.1109/2.55500. ISSN  0018-9162. S2CID  683311.