20 puan yazan GN⁺ 2025-08-16 | Henüz yorum yok. | WhatsApp'ta paylaş
  • What the Fork, C/C++/Rust dahil çeşitli derleme süreçlerini gerçek zamanlı görselleştiren çapraz platform bir araçtır
  • Mevcut derleme sistemlerindeki yetersiz paralelleştirme, verimsiz süreçler gibi yapısal sorunları kolayca tespit etmeyi sağlar
  • Tüm derleme sistemleri ve programlama dillerinde çalışır; make, ninja, gradle, zig, cargo gibi çeşitli derleme araçlarını destekleyebilir
  • Sistem çağrısı izleme ile her sürecin çalışma süresini, komutunu ve bağımlılık ilişkilerini kutular halinde görselleştirir
  • Derleme optimizasyonu, darboğaz analizi ve CI performansını iyileştirmek için çok kullanışlı bir araçtır

Giriş ve arka plan

  • What the Fork, derlemelerin neden yavaşladığını görsel olarak teşhis etmek için geliştirilen gerçek zamanlı bir derleme görselleştirme aracıdır
  • LLVM projesinde olduğu gibi kod tabanı büyük olduğu için derleme doğal olarak yavaş olabilir; ancak çoğu derleme, verimsiz yapılandırmalar yüzünden gereksiz yere uzun sürer
  • Daha önce derlemedeki sorunları doğrudan görmek veya yapısal problemleri tek bakışta anlamak zordu; bu nedenle böyle bir araca ihtiyaç vardı
  • Bu araç çapraz platform olarak tasarlanmıştır ve tüm derleme sistemleri ile dillere uygulanabilir

Başlıca özellikler ve kullanım

  • What the Fork, basit bir sistem profilleyicisi değil, derlemeye özgü sorunları teşhis eden bir araçtır
  • Örnekler arasında make kullanırken -j bayrağının kullanılmaması, belirli dosya ya da derleme adımlarında zamanın yığılması ve paralel çalışması mümkünken sıralı yürütülen komutların tespiti yer alır
  • Özellikle CI ortamlarında clean build performansını analiz etmek ve optimize etmek için etkilidir
  • Kullanım yöntemi, wtf komutunu derleme komutunun önüne ekleyerek çalıştırmaktır (ör. wtf make, wtf cargo build, wtf npm run build)
  • Derleme başladığında arayüz açılır ve her sürecin ilerleme durumu gerçek zamanlı olarak güncellenir

Arayüz ve görselleştirme yöntemi

  • Her derleme süreci, zaman çizelgesi üzerinde kutu şeklinde gösterilir ve türüne göre renklendirilir
  • Süreçlerin ebeveyn-çocuk ilişkileri iç içe geçmiş bir yapı ile ifade edilir
  • Alt panelde seçilen sürecin çalışma süresi, çalışma dizini ve tam komut argümanları gösterilir

Çalışma prensibi

  • Derleme, birden çok sürecin (ör. bash, clang, ld) birleşiminden oluşur
  • Büyük ölçekli derlemelerde cargo, make, bazel, gradle, xcodebuild gibi çeşitli derleme araçları kullanılır ve bunlar gerçekte çok sayıda komut, bağımlılık, önbellek ve zamanlama işlemi yürütür
  • Yalnızca terminal çıktısıyla iç içe süreçleri (ör. clangın içeride çağırdığı ld gibi) ve ayrıntılı zamanlama yapısını anlamak mümkün değildir
  • Bunun için işletim sistemine göre süreç başlatma ve sonlandırmayı algılayan sistem çağrıları kullanılır (macOS: Endpoint Security API, Linux: ptrace(), Windows: Event Tracing for Windows)
  • Bu yöntemle tüm derleme süreci ve zaman çizelgesi yeniden oluşturulabilir; her adımın yürütme yolu ve süresi belirlenebilir
  • Derleme dışında da çeşitli alt süreçleri izlemek için kullanılabilir

Gerçek örnekler ve gözlemler

  • Çeşitli mühendisler (Delta, Mozilla, Apple) bunu gerçek projelerde kullandıktan sonra beklenmedik sorunlar buldu
  • Örnek 1: Cargo kullanan bir açık kaynak projede dosyaların sıralı derlendiği görüldü ve paralellik eksikliği doğrulandı (10 çekirdekli CPU'da 10 kattan fazla hızlanma potansiyeli tespit edildi)
  • Örnek 2: Ninja ile yapılan LLVM derlemesinde tüm CPU çekirdeklerinin verimli biçimde paralel çalıştığı ve ideal derleme verimliliğinin sağlandığı görüldü
  • Örnek 3: CMake tabanlı bir projede cmake/make/clang'ın iç içe çalıştığı ve Xcode/OS sürümünün yeniden kontrol edilmesinin 85 kez tekrarlandığı verimsiz bir yapı keşfedildi (gerçek işin yalnızca çok küçük bir kısmı yapılıyordu)
  • Örnek 4: xcodebuild kullanan büyük bir Objective-C projesinde derlemenin son bölümünde paralellik eksikliği ve derleme başlamadan önce 6 saniyelik bir boşta kalma durumu görüldü (ninja ise yalnızca 0.4 saniye sonra derlemeye başlıyordu)
  • Örnek 5: Zig, Orca Project'i derlerken bağımlılıkların derleme sırasını rastgele belirlediği için paralelleştirme verimi şansa bağlı hale geliyor. Bazı bağımlılıkların en sonda çalışması nedeniyle paralelliğin düştüğü gözlemlendi
  • Örnek 6: make/go kullanan GitHub CLI projesinde bağımlılık indirme süresinin büyük olduğu görüldü. Bağımlılıkların azaltılmasıyla derleme hızının artması bekleniyor

Kullanım etkisi ve sınırlamalar

  • Görsel zaman çizelgesi analiziyle beklenmedik darboğazlar, gereksiz bağımlılık tekrarları ve yetersiz paralellik görülen alanlar tespit edilebilir
  • Bağımlılık sorunları, gereksiz yeniden çalışma ve belirli araçlardaki verimsizlik gibi yapısal iyileştirme noktaları hızla belirlenebilir ve derleme performansını optimize etmek için doğrudan kullanılabilir
  • Süreçlerin tam komutlarının görülebilmesi daha ayrıntılı analiz sağlar

Beta programı

  • What the Fork, Windows, Linux ve macOS üzerinde çalışır
  • Geri bildirim vermek isteyen bireyler ve ekipler private beta'ya başvurabilir (Google Form bağlantısı sağlanıyor)

Henüz yorum yok.

Henüz yorum yok.