Investigating Split Locks on x86-64
Les « split locks » sont des opérations atomiques qui touchent une valeur répartie sur deux lignes de cache, forçant les CPU x86 à retomber sur un mécanisme de type « bus lock » lorsque l’accès ne peut être confiné à une seule ligne. L’auteur a mesuré l’impact avec un test de latence cœur-à-cœur basé sur lock cmpxchg, des microbenchmarks mémoire et deux charges de Geekbench 6 (filtre photo très générateur de misses et compression d’actifs moins sensible), en variant fréquences et cœurs actifs pour isoler les effets. Les résultats montrent des effets très variables selon l’architecture : Arrow Lake, Zen 5 et Zen 2 subissent des pénalités extrêmes (notamment sur les misses L1/L2/L3), tandis qu’Alder Lake, Skylake, Piledriver et Goldmont Plus réussissent mieux à limiter ou isoler la perturbation. Linux active par défaut une atténuation qui détecte les split locks et insère des délais de l’ordre de millisecondes pour éliminer l’effet de « noisy neighbor », ce qui améliore la qualité de service mais peut sembler excessif sur des systèmes grand public. La recommandation est d’éviter les split locks côté logiciel parce qu’ils entraînent des régressions sévères et imprévisibles, et d’inciter le matériel et les OS à des optimisations ciblées plutôt qu’à des mesures punitives, d’autant que les split locks ne bloquent pas l’exécution concurrente mais aggravent les coûts lorsque les accès dépassent un certain niveau de cache.