- 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.