Makale, Rust ile yüksek performanslı bir Tensor önbelleği olan Redstone'u geliştirirken karşılaşılan bir performans sorununu ele alıyor. Geliştirici, yazma kilidi çekişmesini azaltmak için RwLock (okuma-yazma kilidi) kullanmanın, okuma ağırlıklı bir iş yükünde verimi artıracağını düşünmüş. Ancak yapılan testlerde, RwLock'un Mutex'ten yaklaşık 5 kat daha yavaş olduğu gözlemlenmiş. Bu durum, "açık" görünen optimizasyonların modern çok çekirdekli sistemlerde nasıl ters tepebileceğinin çarpıcı bir örneği olarak sunuluyor.
Deney, bir En Son Kullanılan (LRU) Tensor önbelleğini kıyaslayarak gerçekleştirilmiş. Apple Silicon M4 donanımında, parking_lot::RwLock kullanılarak .get() işleminin verimini maksimize etmek hedeflenmiş. Geleneksel olarak, RwLock'un okuma ağırlıklı senaryolarda birden fazla iş parçacığının eş zamanlı okuma yapmasına izin vererek büyük bir avantaj sağlaması beklenirken, sonuçlar bu beklentinin aksine olmuş. Makale, bu beklenmedik performans düşüşünün temel nedenini donanım düzeyindeki gerçeklere bağlıyor.
Bu durumun ana sorumlusu "Önbellek Hattı Ping-Pong" (Cache Line Ping-Pong) olarak adlandırılan bir fenomen. RwLock'un .read() fonksiyonunu çağırmak bile donanım düzeyinde bir yazma işlemi gerçekleştiriyor; çünkü kilit uygulayıcıları, o anda kilidi tutan okuyucu sayısını izlemek için dahili bir atomik sayacı artırmak zorunda. Modern CPU'lar veriyi 64 baytlık "Önbellek Hatları" (Cache Lines) halinde taşır. Bir çekirdek okuyucu sayacını artırmak istediğinde, bu sayacı içeren önbellek hattının "Özel" (Exclusive) sahipliğini alması gerekir. Başka bir çekirdek hemen ardından kilidi okumaya çalıştığında, ilk çekirdek değişikliğini L3 önbelleğe/RAM'e yazmalı, ikinci çekirdek bu önbellek hattını dahili veriyolu üzerinden çekmeli ve kendi sayacını artırmak için hattı "Değiştirilmiş" (Modified) olarak işaretleyerek ilk çekirdeğin kopyasını geçersiz kılmalı. Çok hızlı bir önbellek arama işlemi gibi durumlarda, iş parçacıkları asıl işi yapmaktan çok, okuyucu sayacı değişkeninin sahipliği için mücadele ederek zaman kaybediyor.
Modern çok çekirdekli işlemcilerde `RwLock` gibi okuma kilitlerinin, donanım düzeyindeki gizli yazma işlemleri ve önbellek çekişmesi nedeniyle `Mutex`'ten daha yavaş olabileceği, performans optimizasyonlarında derinlemesine donanım anlayışının kritik olduğunu gösteriyor.