2 puan yazan GN⁺ 2023-11-11 | 1 yorum | WhatsApp'ta paylaş

Rust derleyicisinin paralel frontend’iyle daha hızlı derleme

  • Rust derleyicisinin frontend’i, paralel yürütme kullanarak derleme sürelerini önemli ölçüde azaltabiliyor.
  • Paralel frontend deneysel bir özellik ve nightly derleyicide -Z threads=8 seçeneğiyle denenebiliyor.
  • 2024 yılında kararlı derleyicide yayınlanması planlanıyor.

Derleme süresi ve paralellik

  • Rust derleme süresi sürekli bir ilgi konusu ve derleyici performansı çalışma grubu derleyici performansını yıllardır istikrarlı biçimde iyileştiriyor.
  • 2023’ün ilk 10 ayında derleme süresi ortalama %13, bellek kullanımı %15 ve ikili dosya boyutu %7 azaldı.
  • Derleyici zaten büyük ölçüde optimize edildiği için yeni iyileştirmeler bulmak zorlaştı ve paralellik büyük ama zor bir geliştirme alanı olarak kaldı.

Mevcut süreçler arası paralellik

  • Bir Rust programı derlenirken Cargo, birden çok crate’i derlemek için birden fazla rustc sürecini paralel olarak çalıştırır.
  • Crate’ler arası bağımlılık az olduğunda paralel yürütme iyi çalışır, ancak bağımlılıklar arttıkça paralel yürütme azalır.

Mevcut süreç içi paralellik: backend

  • Derleyici frontend ve backend olarak ayrılır; backend kod üretiminden sorumludur ve LLVM bunu paralel olarak işler.
  • Frontend ise ayrıştırma, tür denetimi gibi işleri yapar, ancak bu haftaya kadar paralel yürütmeyi kullanamıyordu.

Yeni süreç içi paralellik: frontend

  • Frontend artık Rayon kullanarak ince taneli paralellikle derleme işlerini yürütebiliyor.
  • Paralel frontend etkinleştirilip 8 thread kullanacak şekilde ayarlandığında, frontend çalışma süresinin belirgin biçimde azaldığı görülebiliyor.

Her şeyin bir araya gelmesi

  • Rust derleme süreci uzun zamandır Cargo üzerinden süreçler arası paralellikten ve backend’deki süreç içi paralellikten yararlanıyordu; artık frontend de süreç içi paralellikten faydalanabiliyor.
  • Derleyici, oluşturulan thread sayısını çekirdek sayısını aşmayacak şekilde sınırlamak için jobserver protokolünü kullanır.

Nasıl kullanılır

  • Nightly derleyici paralel frontend etkin olarak yayınlandı, ancak varsayılan olarak tek thread modunda çalışıyor.
  • Kullanıcılar -Z threads seçeneğiyle çok thread’li moda geçebilir.

Performans etkisi

  • Tek thread modunda paralel frontend çalıştırmak, önceye kıyasla derleme süresini %0 ila %2 yavaşlatabilir.
  • Çok thread’li modda derleme süresi %50’ye kadar azalabilir, ancak etki kodun özelliklerine ve build yapılandırmasına göre değişir.

Doğruluk

  • Tek thread modunda güvenilirliğin yüksek olması bekleniyor.
  • Çok thread’li modda bilinen hatalar ve deadlock’lar olabilir; derleyicinin ürettiği ikili dosyalar hangi frontend kullanılırsa kullanılsın aynı olmalıdır.

Geri bildirim

  • Paralel frontend ile ilgili sorunlar varsa, "WG-compiler-parallel" etiketli issue’lara bakılabilir ve yeni issue gönderilebilir.

Gelecek çalışmalar

  • Paralel frontend’in performansını iyileştirme ve çok thread’li moddaki hataları çözme çalışmaları sürüyor.
  • -Z threads seçeneğini kararlı hale getirip 2024’teki kararlı sürümde varsayılan olarak çok thread’li modda çalıştırma planı bulunuyor.

GN⁺ görüşü

Bu yazıdaki en önemli nokta, Rust derleyicisinin frontend’inin artık paralel yürütmeyi destekleyerek derleme süresini ciddi ölçüde kısaltabilmesi. Bu, Rust geliştiricilerine derleme hızında büyük bir avantaj sağlar ve daha verimli bir geliştirme ortamı oluşturmaya katkıda bulunur. Paralel frontend’in devreye alınması, Rust topluluğu için heyecan verici bir gelişme ve performans iyileştirmesine yönelik süregelen çabaların bir sonucu olarak görülebilir.

1 yorum

 
GN⁺ 2023-11-11
Hacker News yorumu
  • Rust derleme hızındaki iyileşmeye dair beklenti
    • Rust'ın derleme hızının yavaş olması bir dezavantaj olarak gösteriliyor; özellikle büyük depolarda çalışırken CI/CD maliyetlerini artırıyor ve geliştirme süresini geciktiriyor. Önbelleğin temizlenmesi gerektiğinde (Docker hatası nedeniyle zaman zaman oluyor) bu durum özellikle sorunlu. Bu ilerlemeye verilen tepki olumlu.
  • Rust derleme hızıyla ilgili kişisel deneyim
    • Uzun zaman önce Rust kullanırken derleme hızı yavaştı, ancak yakın zamanda yeniden kullanınca derleme süresini neredeyse hiç dert etmediğini söylüyor. Yine de proje büyüdükçe derleme gecikmesi hissedilebiliyor; bu yüzden bu tür iyileştirmeler kişisel olarak çok sevindirici.
  • Rust derleme süreciyle ilgili soru
    • Rust'ın frontend'inin borrow check'i bitirdikten sonra mı backend'in çalışmaya başlaması gerektiği soruluyor. Backend, borrow check hataları bulursa spekülatif olarak yaptığı işi çöpe atamaz mı diye merak ediliyor.
  • Rust binary crate derlemesine dair gözlem
    • Library crate'lerden farklı olarak binary crate'ler varsayılan olarak büyük ve tekil yapıda oluyor; bu yüzden derleme paralelleşmiyor ve en büyük crate seri hale gelme eğilimi gösteriyor. Bu soruna yönelik iyileştirmeler memnuniyet verici.
  • CPU çekirdeklerinin kullanımıyla ilgili soru
    • Derleme sırasında CPU çekirdek sayısının otomatik kullanılmasının sağlanıp sağlanamayacağı, yoksa başka makinelerde de kullanılan bir yapılandırma dosyasına sabit bir değer mi yazılması gerektiği soruluyor.
  • Çok iş parçacıklı moddaki hatalara dair uyarı
    • Çok iş parçacıklı modda bilinen hatalar ve deadlock'lar var; derleme takılırsa bu sorunlardan biriyle karşılaşmış olabilirsiniz. -Z threads seçeneğini kullanırken temkinli olunması gerektiği belirtiliyor.
  • Rust derleme hızının mevcut durumuna dair olumlu değerlendirme
    • Birkaç yıldır Rust kullanmadıktan sonra yeniden deneyince derleme hızının neredeyse anında olduğunu söylüyor. ChatGPT gibi araçlar sayesinde geçmişte çözmesi zor olan Rust sorunlarını artık kolayca çözebildiğini, bu yüzden mevcut durumun çok iyi olduğunu düşünüyor.
  • Rust derleme optimizasyonunun yönüne dair soru işareti
    • Rust derlemesinin zaten dosya düzeyinde yüksek derecede paralelleştirildiği, bu nedenle tek bir dosyanın derlenmesini hızlandırmanın daha üst düzey dosya paralelliğinden kaynak çalıyor olup olmadığı konusunda endişe dile getiriliyor. Buna dair somut veri eksikliği de bir sorun olarak görülüyor.
  • Rust derleme hızındaki iyileştirmeyi memnuniyetle karşılayan yorum