El falso compartimiento (false sharing) es un fenómeno de rendimiento que ocurre cuando dos variables atómicas independientes caen dentro de la misma línea de caché. Aunque los protocolos de coherencia como MESI trabajan con bloques del tamaño de una línea de caché y no con direcciones individuales, cualquier escritura —aunque sea a variables lógicamente separadas— invalida la línea completa y obliga a los núcleos de la CPU a intercambiarla continuamente, degradando el rendimiento. Casos típicos son contadores por hilo en un array de atómicos o los punteros head y tail de una cola lock-free colocados en el mismo struct.
La solución consiste en separar las variables atómicas para que residan en líneas de caché distintas. En Rust se usa #[repr(align(N))] sobre un tipo envoltorio, en C11 _Alignas(N), en C++11 alignas(N) y en GCC/Clang attribute((aligned(N))). Lo que importa no es la alineación en sí, sino el espaciado resultante.
En x86_64 la línea de caché mide 64 bytes, valor recomendado por libros como Rust Atomics and Locks, de Mara Bos, y Performance Analysis and Tuning on Modern CPUs, de Denis Bakhvalov. Sin embargo, bibliotecas consolidadas como crossbeam-utils y folly de Facebook usan 128 bytes. El motivo es que, desde la arquitectura Intel Sandy Bridge, el prefetcher espacial puede cargar líneas de caché por pares, un comportamiento controlable mediante el MSR "Adjacent Cache Line Prefetcher Disable", que conviene verificar antes de cualquier benchmark.
El artículo incluye un benchmark en Rust que reproduce la mejora con alineación de 128 bytes sobre una instancia AWS c5d.4xlarge con Intel Xeon Platinum 8124M (Skylake). En un Digital Ocean VPS la diferencia no se reprodujo de forma fiable, lo que apunta a que el prefetcher adyacente estaba deshabilitado.
