deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Wild 0.10.0, 20 Rust linking çalışmasının tamamında mold'ü geçti; link süresi yeniden derlemenin yaklaşık %1'ine indi

dev.to'daki benchmark'lar, Wild 0.10.0'ın ripgrep ve cargo üzerinde her çalışmada mold 2.42.1, rust-lld ve GNU ld'yi geride bıraktığını ve link süresinin tam bir yeniden derlemenin kabaca %1'ine düştüğünü gösteriyor.

Wild 0.10.0, 20 Rust linking çalışmasının tamamında mold'ü geçti; link süresi yeniden derlemenin yaklaşık %1'ine indi

Ne ölçüldü

efraingaray takma adıyla dev.to'da yazan bir geliştirici, gerçek Rust kodu üzerinde dört aracı karşılaştıran linker benchmark'ları yayınladı: Wild 0.10.0, mold 2.42.1, rust-lld ve GNU ld. İş yükleri ripgrep ve cargo'yddu ve her yapılandırma, sapmaları azaltmak için proje başına 20 kez çalıştırıldı.

Wild, saf link hızında mold ve lld ile yarışan, Rust ile yazılmış görece yeni bir linker. mold, ortaya çıktığından beri derleme sürelerini kısaltmanın popüler bir yolu oldu ve rust-lld, Rust araç zincirleriyle birlikte GNU ld'ye daha hızlı bir alternatif olarak geliyor. Benchmark, Wild'ın artık yerleşik seçeneklerle başa baş edip edemeyeceğini sorguluyor.

Sonuçlar

dev.to gönderisine göre Wild, her projedeki 20 çalışmanın tamamında birinci geldi. Farklar mutlak anlamda küçüktü — bir projede 1,9 ms, diğerinde kabaca 8 ms — ancak bu fark tüm tekrarlar boyunca korundu ve 20 koşu boyunca tutarlılık, tek bir koşudaki farkın büyüklüğünden daha güçlü bir sinyaldir.

İkinci bulgu, sıralamanın kendisinden daha önemli olabilir. Zincirde iki hızlı linkerden biri bulunduğunda, gönderiye göre link süresi test edilen projelerde toplam yeniden derleme süresinin neredeyse %1'ini oluşturuyordu. Bu payla, link adımı artık bir yeniden derlemenin temposunu belirlemiyor: derleme ve önceki derleme aşamaları baskın durumda ve linkten daha fazla milisaniye kazandırmak, uçtan uca derleme sürelerinde neredeyse fark edilmezdi.

Sayılarla arasında küçük bir kaza

Yazar, sonuçların neredeyse yanlış yayınlanacak olduğunu da açıklıyor. Yazı, yanlış ilk rakamları üreten tuzağı ve yayınlanmadan önce bunun nasıl fark edildiğini belgeliyor; ancak dev.to özeti tam olarak neyin ters gittiğini açıklamıyor. Tam ölçümler, yazarın kendi blogundaki daha uzun bir gönderide yer alıyor.

Ayrıntılar olmasa bile bu olay, linker benchmark'larını yanlış yapmanın ne kadar kolay olduğunu gözler önüne seriyor. Isınmış dosya sistemi önbellekleri, artımlı derlemelerden kalan kalıntılar ve zamanlama artefaktları sonuçları bozabilir ve kesin görünen bir karşılaştırma, tamamen yanlış şeyi ölçebilir.

Neden önemli

Link süresi her yeniden derlemede ödenen sabit bir maliyettir; bu yüzden geliştirmenin iç döngüsünün tam ortasındadır. Özellikle uzun derleme sürelerinin yinelenen bir şikayet olduğu Rust dünyasında, linking, tek bir aracı değiştirmenin anında bir kazanç sağlayabildiği nadir yerlerden biriydi — mold ve lld'nin ilk place tutunmasının nedeni de buydu.

Bu rakamlar iki şey öne çıkarıyor. Birincisi, Wild olgunlaştı: her ölçülen koşuda mold'ü tutarlı biçimde geride bırakan bir sürüm, Rust tabanlı bir linkerin artık bir deney değil, pratik bir seçenek olduğunu gösteriyor. İkincisi ve linkerdan daha fazla derleme süresi kazancı umanlar için daha çok düşündürücü olanı, bu boyuttaki projeler için eldeki potansiyel neredeyse tükendi. Linking bir yeniden derlemenin yaklaşık %1'ini oluşturduğunda, kalan süre derleyicide harcanıyor; dolayısıyla bir sonraki anlamlı iyileştirmeler rustc'dan, bağımlılık yönetiminden veya derleme yapısından gelmek zorunda — daha hızlı bir linkerden değil.

Bir uyarıyı akılda tutmak değer: benchmark tek bir makinede iki projeyi kapsıyor ve 1,9 ile 8 ms arasındaki fark, farklı donanımın, daha büyük binary'lerin veya debug info gibi daha ağır link özelliklerinin sıralamayı değiştirebileceği aralığın tamamen içinde. Yine de sonucun yönü açık: hızlı linkerlar işlerini yaptı ve darboğaz başka yere taşındı.

  • #rust
  • #linker
  • #build-tools
  • #benchmarks
  • #developer-tools

İlgili yazılar