Este artículo no cita ninguna fuente . ( abril de 2010 ) ( Aprenda cómo y cuándo eliminar este mensaje de plantilla ) |
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_a
posible que deba volver a leer continuamente x
desde la memoria principal (en lugar de desde la caché) aunque inc_b
la modificación simultánea de y
debería ser irrelevante.
Enlaces externos [ editar ]
- Fácil comprensión sobre el uso compartido falso
- Blog de C ++ today, False Sharing vuelve a aparecer!
- Artículo del Dr. Dobbs: Elimine el uso compartido falso
- Tenga cuidado al intentar eliminar el uso compartido falso en Java
Referencias [ editar ]
- Bolosky, WJ y Scott, ML 1993. Uso compartido falso y su efecto en el rendimiento de la memoria compartida En el 4º Simposio de USENIX sobre experiencias con sistemas distribuidos y multiprocesador, San Diego, California, 22 al 23 de septiembre de 1993. Asociación USENIX, Berkeley, CA, 3 -3.