De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

En informática , el uso compartido falso es un patrón de uso que degrada el rendimiento y que puede surgir en sistemas con cachés distribuidos y coherentes del tamaño del bloque de recursos más pequeño administrado por el mecanismo de almacenamiento en caché. Cuando un participante del sistema intenta acceder periódicamente a datos que nunca serán alterados por otra parte, pero esos datos comparten un bloque de caché con datos que están alterados, el protocolo de almacenamiento en caché puede obligar al primer participante a recargar toda la unidad a pesar de la falta de una necesidad lógica. . El sistema de almacenamiento en caché no es consciente de la actividad dentro de este bloque y obliga al primer participante a soportar la sobrecarga del sistema de almacenamiento en caché requerida por el verdadero acceso compartido de un recurso.

Con mucho, el uso más común de este término es en cachés de CPU multiprocesador moderno , donde la memoria se almacena en líneas de alguna potencia pequeña de dos palabras (por ejemplo, 64 bytes alineados contiguos ). Si dos procesadores operan con datos independientes en la misma región de dirección de memoria que se pueden almacenar en una sola línea, los mecanismos de coherencia de la caché en el sistema pueden forzar la línea completa a través del bus o interconectarse con cada escritura de datos, forzando la memoria atascada además de desperdiciar el ancho de banda del sistema. . El uso compartido falso es un artefacto inherente de los protocolos de caché sincronizados automáticamente y también puede existir en entornos como bases de datos o sistemas de archivos distribuidos, pero la prevalencia actual se limita a los cachés de RAM.

Ejemplo [ editar ]

struct  foo  {  int  x ;  int  y ;  }; estructura  estática foo  f ;/ * Las dos funciones siguientes se ejecutan simultáneamente: * /int  sum_a ( vacío ) {  int  s  =  0 ;  para  ( int  i  =  0 ;  i  <  1000000 ;  ++ i )  s  + =  f . x ;  return  s ; }void  inc_b ( void ) {  para  ( int  i  =  0 ;  i  <  1000000 ;  ++ i )  ++ f . y ; }

Aquí, es sum_aposible que deba volver a leer continuamente xdesde la memoria principal (en lugar de desde la caché) aunque inc_bla modificación simultánea de ydebería ser irrelevante.

Enlaces externos [ editar ]

Referencias [ editar ]