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é , donde los directorios se utilizan para administrar cachés en lugar de espiar el bus . Los métodos de espionaje de autobuses no escalan bien debido al uso de la radiodifusió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 vectorial de bits completo, donde E=Exclusivo, S=Compartido, M=Modificado y U=Sin caché

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

Cada entrada del directorio debe tener 1 bit almacenado por procesador por línea de caché, junto con bits para rastrear el estado del directorio. Esto lleva a 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 el número 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 pasa a ser 1024/(32×8) = 400%. [ cita necesaria ]

Formato vectorial de bits gruesos

Diagrama de formato de directorio vectorial de bits gruesos

El formato vectorial de bits gruesos tiene una estructura similar al formato vectorial 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é se almacena en un nodo en lugar de en un línea. Esto mejora los requisitos de tamaño a expensas del ahorro de tráfico de autobús (procesadores por nodo) × (líneas totales) bits de espacio. [2] Por lo tanto, la proporción de gastos generales es la misma, simplemente reemplazando el número de procesadores por el número de grupos de procesadores. Cuando se realiza una solicitud de bus para una línea de caché que tiene un procesador del grupo, el directorio transmite la señal a cada procesador del 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. almacenado en caché. [ cita necesaria ]

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 Vector de bits completo, si consideramos 1 bit para 8 procesadores como grupo, entonces la sobrecarga de almacenamiento será 128/(32×8)=50%. Esta es una mejora significativa con respecto al formato Full Bit Vector.

Formato de directorio disperso

Un caché sólo almacena un pequeño subconjunto de bloques en la memoria principal en un momento determinado. Por lo tanto, la mayoría de las entradas del directorio pertenecerán a bloques no almacenados en caché. En el formato de directorio disperso, el desperdicio se reduce al almacenar solo los bloques almacenados en caché en el directorio. [ cita necesaria ] 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 del almacenamiento proporcionado por el formato de directorio disperso es muy significativo.

Formato de árbol binario balanceado

En este formato el directorio está descentralizado y distribuido entre las cachés que comparten un bloque de memoria. Las diferentes cachés que comparten un bloque de memoria están dispuestas 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 de contador de uso compartido (SC). El campo SC tiene la cantidad 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 tener un número equilibrado, es decir, el número de nodos en el subárbol izquierdo debe ser igual o uno mayor que el número de nodos en el subárbol derecho. Todos los subárboles también deben tener un número equilibrado. [3]

Formato de directorio encadenado

En este formato, la memoria contiene el puntero del directorio al último caché que accedió al bloque y cada caché tiene el puntero al caché anterior que accedió al bloque. Entonces, cuando un procesador envía una solicitud de escritura a un bloque en la memoria, 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 listas doblemente enlazadas en las que cada copia almacenada en caché tiene punteros al caché anterior y siguiente que accede al bloque. [4]

Formato de puntero limitado

El formato de puntero limitado utiliza una cantidad determinada 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 que apunte a ese procesador. Hay algunas opciones para manejar casos en los que el número de participantes excede el número de punteros libres. Un método consiste en invalidar a uno de los participantes, utilizando su puntero para el nuevo solicitante, aunque esto puede resultar costoso en los casos en que un bloque tiene una gran cantidad de lectores, como un bloqueo. Otro método es tener un grupo separado de punteros gratuitos disponibles para todos los bloques. Este método suele ser eficaz ya que la cantidad de bloques compartidos por una gran cantidad de procesadores normalmente no es muy grande. [ cita necesaria ]

Referencias

  1. ^ ab Reihnhart, Steven; Basu, Arkaprava; Beckmann, Bradford; Hill, Mark (11 de julio de 2013). "Coherencia del directorio CMP: una granularidad no sirve para todos" (PDF) . {{cite journal}}: Citar diario requiere |journal=( ayuda )
  2. ^ ab Laudon, James; Lenoski, Daniel (1 de junio de 1997). The SGI Origin: un servicio 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 que utiliza 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. (1 de junio de 1990). "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.