20 poin oleh GN⁺ 2025-08-16 | Belum ada komentar. | Bagikan ke WhatsApp
  • What the Fork adalah alat lintas platform yang memvisualisasikan berbagai proses build seperti C/C++/Rust secara real-time
  • Memudahkan untuk memahami masalah struktural seperti kurangnya pemrosesan paralel dan proses yang tidak efisien pada sistem build yang ada
  • Dapat berjalan pada semua sistem build dan bahasa pemrograman, serta mendukung berbagai alat build seperti make, ninja, gradle, zig, cargo, dan lainnya
  • Melalui pemantauan system call, alat ini memvisualisasikan waktu eksekusi, perintah, dan hubungan dependensi tiap proses dalam bentuk kotak
  • Sangat berguna untuk optimasi build, analisis bottleneck, dan peningkatan performa CI

Pengenalan dan latar belakang

  • What the Fork adalah alat visualisasi build real-time yang dikembangkan untuk mendiagnosis secara visual penyebab build menjadi lambat
  • Pada proyek seperti LLVM, kompilasi bisa lambat karena ukuran kode yang besar, tetapi pada kebanyakan build, waktu yang terlalu lama sering kali disebabkan oleh konfigurasi yang tidak efisien
  • Sebelumnya, sulit untuk memeriksa masalah build secara langsung atau memahami persoalan strukturalnya dalam sekali lihat, sehingga alat seperti ini dibutuhkan
  • Alat ini dirancang lintas platform dan dapat diterapkan pada semua sistem build dan bahasa

Fitur utama dan cara penggunaan

  • What the Fork bukan sekadar profiler sistem biasa, melainkan alat untuk mendiagnosis masalah yang spesifik pada build
  • Contohnya meliputi tidak digunakannya flag -j saat memakai make, konsentrasi waktu pada file atau tahap kompilasi tertentu, serta deteksi perintah yang berjalan berurutan padahal bisa diparalelkan
  • Sangat efektif terutama untuk analisis dan optimasi performa clean build di lingkungan CI
  • Cara pakainya adalah menjalankan perintah wtf di depan perintah build (misalnya wtf make, wtf cargo build, wtf npm run build, dan sebagainya)
  • Saat build dimulai, UI akan berjalan dan memperbarui status tiap proses secara real-time

UI dan metode visualisasi

  • Setiap proses build ditampilkan pada timeline dalam bentuk kotak, dengan warna berbeda sesuai jenisnya
  • Hubungan parent-child antarproses direpresentasikan dalam struktur bertingkat
  • Panel bawah menampilkan waktu eksekusi, direktori kerja, dan informasi lengkap argumen perintah dari proses yang dipilih

Cara kerja

  • Build adalah gabungan dari banyak proses (misalnya bash, clang, ld)
  • Build berskala besar menggunakan berbagai alat seperti cargo, make, bazel, gradle, xcodebuild, dan semuanya pada praktiknya menjalankan banyak perintah, dependensi, cache, dan penjadwalan
  • Dari output terminal saja, tidak mungkin memahami proses bertingkat seperti proses internal (ld yang dipanggil dari clang, misalnya) maupun struktur timing yang rinci
  • Untuk itu, alat ini memanfaatkan system call yang mendeteksi awal dan akhir proses pada tiap OS (macOS: Endpoint Security API, Linux: ptrace(), Windows: Event Tracing for Windows, dan lainnya)
  • Dengan pendekatan ini, seluruh proses build dan timeline dapat direkonstruksi, sehingga jalur eksekusi dan waktu dari setiap tahap bisa diidentifikasi
  • Selain build, alat ini juga dapat dimanfaatkan untuk melacak berbagai subprocess lain

Contoh nyata dan hasil pengamatan

  • Beberapa engineer (dari Delta, Mozilla, dan Apple) benar-benar menerapkannya pada proyek mereka dan menemukan masalah yang tak terduga
  • Contoh 1: Pada proyek open source yang menggunakan Cargo, file dikompilasi secara berurutan sehingga terlihat kurangnya paralelisme (pada CPU 10 core, ada potensi peningkatan kecepatan lebih dari 10x)
  • Contoh 2: Pada build LLVM berbasis Ninja, semua core CPU menjalankan pekerjaan paralel secara efisien sehingga tercapai efisiensi build yang ideal
  • Contoh 3: Pada proyek berbasis CMake, ditemukan struktur tidak efisien berupa eksekusi bertingkat cmake/make/clang serta pemeriksaan ulang versi Xcode/OS yang berulang sampai 85 kali (padahal pekerjaan sebenarnya sangat sedikit)
  • Contoh 4: Pada proyek Objective-C besar yang memakai xcodebuild, terdeteksi kurangnya pemrosesan paralel pada fase akhir build dan adanya periode tidak aktif selama 6 detik sebelum build dimulai (sementara ninja mulai kompilasi hanya setelah 0,4 detik)
  • Contoh 5: Saat Zig mengompilasi Orca Project, urutan build dependensi ditentukan secara acak sehingga efisiensi paralel berubah tergantung keberuntungan. Teramati bahwa beberapa dependensi berjalan paling akhir dan menurunkan paralelisme
  • Contoh 6: Pada proyek GitHub CLI yang menggunakan make/go, waktu unduh dependensi sangat besar. Mengurangi dependensi diperkirakan dapat meningkatkan kecepatan build

Dampak penggunaan dan keterbatasan

  • Melalui analisis timeline visual, pengguna dapat mengidentifikasi area bottleneck yang tak terduga, pengulangan dependensi yang tidak perlu, dan bagian yang kurang paralel
  • Masalah dependensi, rework yang tidak perlu, dan inefisiensi pada alat tertentu dapat cepat dipahami sebagai titik perbaikan struktural, sehingga langsung berguna untuk optimasi performa build
  • Melihat perintah lengkap tiap proses juga memungkinkan analisis yang lebih mendetail

Program beta

  • What the Fork berjalan di Windows, Linux, dan macOS
  • Individu dan tim yang ingin memberikan masukan dapat mendaftar ke private beta (tautan Google Form disediakan)

Belum ada komentar.

Belum ada komentar.