4 puan yazan GN⁺ 2024-03-31 | 1 yorum | WhatsApp'ta paylaş

RCU'ya Giriş

  • İşletim sistemi, her gün kullanılan performansa en duyarlı programlardan biridir.
  • İşletim sistemi her zaman daha hızlı olabilir ve çekirdek ile sürücü geliştiricileri kodu optimize etmeye yoğunlaşır.
  • İşletim sistemi büyük ölçekli eşzamanlılık gerektirir; kullanıcı alanı süreçlerini ve thread'leri zamanlar, ayrıca kendi thread'leri ve donanımla etkileşen kesme işleyicilerine sahiptir.

RCU Nasıl Çalışır

  • Sık okunan ama nadiren yazılan verilerde (ör. şu anda bağlı USB cihazları) atomik değişiklik gerektiğinde RCU (Read, Copy, Update) stratejisi kullanılır.
  • Veri okunur, kopyalanıp değiştirilir, ardından işaretçi yeni sürüme atomik olarak güncellenir.
  • Bu yöntem kullanımı kolaydır ve bekleme yaratmaz, ancak bellek sızıntısına yol açabilir.

Bellek Sızıntısı Sorununun Çözümü

  • Bellek sızıntısını önlemek için, güncelleme fonksiyonu içinde eski veriyi silmek yerine, o anda okuma yapan okuyucu kalmadığında silme işlemi ertelenebilir.
  • Okuyucular veriyi okurken yazanın veriyi silmek için beklemesi sağlanarak bellek güvenli biçimde yönetilir.

RCU'nun Gerçek Kullanımı

  • RCU, Linux'ta on binlerce kez kullanılır; Facebook'un Folly C++ kütüphanesinde ve Rust'ın crossbeam-epoch yapısında da yer alır.
  • RCU, performans ve gecikme gereksinimleri doğrultusunda şekillenmiş bir senkronizasyon yaklaşımıdır ve çöp toplamaya benzer bir bellek yönetimi yöntemi sunar.

Çöp Toplama Hakkındaki Yanılgılar

  • Çöp toplamanın elle bellek yönetiminden daha yavaş olduğu yönündeki yaygın kanı, ayrıntılara bakıldığında hızla çöker.
  • free() fonksiyonu bedava değildir; bellek ayırıcı içerde çok sayıda durumu korumak zorundadır.
  • Modern çöp toplayıcılar taşıma ve nesil bazlı optimizasyonlar sunarak yüksek throughput ve iyi cache performansı sağlar.

Kontrol Yanılsaması

  • Geliştiriciler bazen gerçek zamanlı sistemler kurmak ister, ancak pratikte bellek yönetimi üzerinde tam kontrole sahip değildir.
  • İşletim sistemi yalnızca bellek tahsisine dair geliştirici niyetini tahmin eder; bazen basit bir işaretçi erişimi bile disk I/O'suna dönüşebilir.

Sonuç

  • Her yazılım çöp toplamadan fayda görmez, ancak çöp toplama yararlı bir araçtır ve sistem programcıları arasında artık korkulacak bir şey olmamalıdır.

GN⁺'nin Görüşü

  • RCU, çok thread'li ortamlarda veri tutarlılığını korurken eşzamanlılığı artıran etkili bir tekniktir. Bu, yüksek performanslı hesaplama veya gerçek zamanlı sistemlerde çok önemli bir unsurdur.
  • Çöp toplama hakkındaki yaygın kanıları kıran RCU örneği, geliştiricilere bellek yönetimi konusunda yeni bir bakış açısı sunar. Bu, özellikle bellek yönetiminin kritik olduğu sistem programlama alanında daha da önemlidir.
  • RCU'ya benzer işlevler sunan diğer projeler arasında Java'nın ConcurrentLinkedQueue'su ve .NET'in ConcurrentBag'i bulunur; bunlar da lock-free veri yapıları sağlar.
  • RCU tekniğini benimserken sistemin gereksinimleri ve performans hedefleri dikkate alınmalı; bu teknolojinin sağlayacağı faydalar ve olası maliyetler anlaşılmalıdır.
  • Bu makale, geliştiricilerin bellek yönetimi ve eşzamanlılık konularını daha derinlemesine anlamasına, mevcut varsayımları yeniden değerlendirmesine ve yeni çözümleri keşfetmesine yardımcı olabilir.

1 yorum

 
GN⁺ 2024-03-31
Hacker News yorumları
  • MPL ve MaPLe için yenilikçi paralel garbage collection (GC) tekniklerine göz atma önerisi

    • POPL 2024'te Distinguished Paper Award ve ACM SIGPLAN 2023 Paper Award aldı
    • Başlıca öneriler şunlar:
      • kanıtlanabilir derecede verimli paralel garbage collection tabanlı disentanglement
      • kanıtlanabilir derecede verimli otomatik granülerlik kontrolü
  • RCU'yu garbage collection için senkronizasyon mekanizması olarak kullanmak ilginç

    • bellek serbest bırakma sorumluluğunu yazıcı iş parçacığından son okuyucu iş parçacığına devretmek anlamlı
    • performansı artırmak için bellek serbest bırakmayı okuyucu iş parçacığı yerine ayrılmış bir batch sürecine taşımayı düşünmek gerekebilir
  • Bellek yönetimiyle ilgili yaygın bir yanlış anlama

    • programcının bellek yönetimi için en uygun duraklama süresini bildiğine inanılması
    • oyunlar ve kripto para alım satım programlarında programcı gerçekten en uygun duraklama süresini biliyor olabilir
  • RCU kullanım örneği ikna edici, ancak diğer durumlarda garbage collection deneyimi iyi değil

    • en iyi performansı özel bellek yönetimi çözümlerinin sağlayabileceği iddiası gibi okunuyor
    • free() çağrısının belleği işletim sistemine geri verdiği yanılgısına dair tartışma
  • Garbage collection kullanıldığında yeni tahsisler cache yerine RAM'den yapılıyor

    • bunun performans üzerinde büyük etkisi olabilir
    • Julia dilindeki benchmark örneği veriliyor
  • İyi bir tracing garbage collector, throughput açısından manuel bellek yönetimini uzun zaman önce geçti

    • son dönemde çoğu uygulama için latency de kabul edilebilir seviyede
    • asıl önemli unsur bellek kullanımı
  • Garbage collection ile iyi uyuşan şeylerden biri async/await

    • Rust'ta async/await kullanımı bellek yönetimiyle birleşince sorun çıkarıyor
  • RCU motivasyonundan sonra genel garbage collection tartışmasına geçiş biraz şaşırtıcı

  • Yazılım geliştirirken iki durum dikkate alınıyor

    • hot path için özel allocator kullanılıyor, onun dışındaki durumlarda ise garbage collection kullanışlı
  • RCU'dan genel tracing garbage collection'a geçiş zekice bir strateji gibi görünüyor

    • manuel bellek yönetimi sadece malloc/free çağrılarından ibaret değil
  • Sistem programcılarının neyin ne zaman garbage collected olabileceğini belirlemesi zor

  • Rust ve C++'ın yaşam döngüsü yönetimi araçları bellek serbest bırakmayı otomatikleştirmeye yardımcı oluyor, ancak karmaşıklığı basitleştirmiyor