mold 2.0.0 - linker berkecepatan tinggi
(github.com/rui314)- Lisensi berubah dari AGPL ke MIT, menjadi perubahan utama di mold 2.0.0
- Perbaikan bug yang membuat file objek dengan lebih dari 65520 section tidak dapat dibuat saat menggunakan
--relocatable -undefinedkini ditafsirkan sebagai sinonim dari--undefined, bukan-u ndefined, sehingga selaras dengan perilaku GNU linkers dan LLVM lld-nopiediperlakukan sebagai sinonim dari--no-pie- Dukungan tipe relokasi
R_RISCV_SET_ULEB128danR_RISCV_SUB_ULEB128pada RISC-V - Dukungan tipe relokasi
R_PPC64_REL32pada PPC64
1 komentar
Pendapat di Hacker News
mold benar-benar karya yang luar biasa untuk sistem modern.
Saat mencoba membuat build proyek terbaru jadi lebih cepat, saya sadar tahap linking adalah bottleneck yang sangat besar. Meski memakai 24 core * 2 thread, sekitar 30% performa total menganggur karena linker.
Dulu pernah mencoba build dengan mold, tapi saat itu tidak berjalan baik; saya berencana mencobanya lagi.
Saya tidak ingat angka pastinya, tapi perbedaannya cukup besar: yang di gold dan lld memakan beberapa detik turun menjadi di bawah 1 detik dengan mold.
Itu kode C++/Qt yang kompleks.
mold -run ninjabekerja sangat baik di lingkungan saya.Saya sangat senang melihat kabar perubahan lisensi ini. Saya berharap proyek ini juga bisa menghasilkan uang, tetapi dengan lisensi MIT, kemungkinan untuk mengintegrasikannya ke proyek kerja menjadi jauh lebih besar.
Kalau kami benar-benar memakainya, saya akan mencoba meyakinkan perusahaan untuk mensponsori proyek ini.
AGPL pun hanya akan membatasi saat linker yang dimodifikasi secara privat didistribusikan sebagai layanan jaringan, yang bukan skenario realistis untuk tool pengembangan dasar.
Saya penasaran dengan perubahan lisensinya. Bukankah ini file executable? Karena memanggilnya sebagai proses terpisah tidak membuat software yang memanggilnya harus menjadi GPL, dalam kasus umum peralihan ke MIT semestinya tidak berdampak.
Jika para penulis benar-benar menginginkan lisensi yang lebih permisif, alih-alih melisensikan ulang dari AGPL ke MIT, mereka seharusnya beralih ke AGPL dengan pengecualian linking. Contoh proyek GPL dengan pengecualian linking adalah libgit2: https://github.com/libgit2/libgit2#license
Lisensi seperti ini lebih permisif, tetapi tetap memungkinkan mereka menjual lisensi komersial kepada pihak yang membuat perubahan closed source.
Versi macOS,
sold, tampaknya pengecualian.Linker ini secara nyata meningkatkan kepuasan pengembangan di repositori Rust eksplorasi saya yang sedang berkembang menjadi monolit web besar memakai SeaORM dan axum/tokio.
Anda mungkin tidak ingin tahu ukuran direktori
targetsaya, tetapi incremental build terasa jauh lebih gesit.15:55 $ du -Hs --si target/11G target/Mold luar biasa, dan ada beberapa penggunaan favorit saya.
[target.x86_64-unknown-linux-gnu]linker = "clang"rustflags = ["-C", "link-arg=-fuse-ld=mold","-C", "target-cpu=native"]"-fuse-ld=mold"ke CFLAGS juga membuatmakepkglebih cepat.Keputusan yang sangat bijak. Kadang ada momen sulit ketika saya harus mengakui bahwa beberapa hal dalam produk atau kode saya tidak cocok untuk dimonetisasi.
Pasarlah yang memberi tahu, dan meski disayangkan, yang penting adalah mencari hal lain yang dihargai pasar daripada melawannya.
Ada yang tahu apakah perubahan lisensi/strategi bisnis ini juga akan diterapkan ke sold? sold adalah mold untuk macOS.
https://github.com/bluewhalesystems/sold
https://twitter.com/davidecci/status/1665835119331135488
“Repositori ini berisi versi gratis dari linker mold. Jika Anda mencari versi komersial yang mendukung macOS, kunjungi repositori linker sold.”
Tinggal bayar besar untuk pekerjaannya dan membuat dunia lebih baik, bukan?
Itu seharusnya sangat mudah bagi Apple.
Lisensinya berubah dari AGPL ke MIT.
Tapi bagaimana pengrajin sehebat ini seharusnya diberi kompensasi, dan mengapa itu belum terjadi? Rasanya perusahaan, terlepas dari ukurannya, perlu mengalokasikan sejumlah anggaran untuk dependensi atau tool inti dan mempublikasikannya di situs web resmi mereka. Sepertinya kita membutuhkan semacam norma budaya seperti itu.
Saya sempat lupa bahwa ini adalah linker yang cepat
“Mold 2.0.0 adalah rilis mayor baru dari linker cepat kami. Dalam rilis ini, kami mengubah lisensi dari AGPL ke MIT dengan tujuan memperluas basis pengguna. Seperti yang diketahui oleh mereka yang mengikuti perkembangannya, ini bukan keputusan mudah karena kami telah mencoba memonetisasi produk dengan skema lisensi ganda AGPL/lisensi komersial. Sayangnya, pendekatan ini tidak memenuhi ekspektasi. Perubahan lisensi ini adalah hasil dari menerima kenyataan tersebut. Kami tidak ingin terus bersikeras pada strategi yang tidak berjalan dengan baik.”
Itu mengerikan, dan juga cara yang buruk untuk memperlakukan developer yang menulis software untuk OS mereka sendiri
Kita sudah sangat lama terbiasa tidak membayar untuk tool pengembangan level rendah, melainkan membayar biaya dukungan. Mengejutkan juga bahwa mereka mencoba lisensi dengan cara seperti itu
Selama bertahun-tahun saya beberapa kali melihat diskusi tentang linker cepat dan cerita bahwa mengganti satu linker dengan yang lebih cepat membuat waktu kompilasi turun drastis, tetapi biasanya saya tidak benar-benar tahu mengapa linker lambat
Akan bagus kalau ada yang bisa menjelaskannya
Sebagian besar peningkatan performa berasal dari memproses pekerjaan secara paralel, dan pada CPU multicore modern yang kuat, ini menghasilkan peningkatan besar
Jika ingin tahu lebih lanjut, ada presentasi bagus dari Rui tentang Mold: https://www.youtube.com/watch?v=hAt3kCalE0Y
cat. Tinggal menyambungkan binary lalu selesai. Pada masa disk berputar, I/O disk adalah masalahnya, tetapi sekarang sudah lebih berkurangBagian yang memakan waktu adalah pekerjaan menulis ulang isi sambil berjalan. Menelusuri tabel relokasi dan memasukkan alamat ke kode itu murah, dan dead stripping per section juga cukup murah, tetapi untuk melakukan dead stripping pada basic block individual di dalam fungsi dibutuhkan analisis jauh lebih banyak, sehingga memakan waktu
Deduplication string konstan adalah ide bagus, tetapi semuanya harus dialirkan ke semacam hash table. Jika ingin membuat suffix yang sama ikut dibagikan, pekerjaannya bertambah
Deduplication, dead stripping, dan penulisan ulang informasi debug juga memakan waktu. Dalam debug build, bisa ada beberapa GB DWARF yang harus ditulis ulang
Menariknya, fakta bahwa linker bisa diprogram lewat script sehingga kita dapat memberikan program untuk diinterpretasikan tampaknya bukan biaya besar. Mungkin karena script tersebut cukup pendek dan fiturnya juga sampai batas tertentu terbatas
Secara historis, alasan lld sangat cepat adalah karena ia tidak banyak memproses informasi debug atau melakukan deduplication lain. lld berjalan cepat, tetapi binary keluarannya besar
Sudah beberapa tahun saya tidak menangani performa linking, jadi saya tidak terlalu tahu kondisi saat ini. Khususnya, saya tidak tahu mold atau lld berada di posisi mana dalam kompromi antara kualitas output dan performanya sendiri
https://www.airs.com/blog/archives/38
“Sekali lagi, tujuannya adalah kecepatan. Dalam kasus ini, lebih cepat daripada linker kedua saya. Linker itu menjadi jauh lebih lambat selama bertahun-tahun karena ditambahkannya dukungan ELF dan shared library. Dukungan ini tidak dirancang sejak awal, melainkan ditempelkan kemudian. Rencana masa depan untuk linker baru ini juga mencakup dukungan incremental linking, yang juga merupakan cara lain untuk meningkatkan kecepatan.”
Bayangkan aplikasi pada masa awal Unix. Aplikasi sederhana dengan satu tujuan, mungkin hanya satu file sumber, satu object, hanya perlu link ke libc, dan tidak ada hal seperti shared library
Setelah itu, fitur-fitur “wajib” ditambahkan dan kode linker tumbuh secara organik. Terutama pada masa ketika disk berputar menjadi bottleneck, kebenaran fitur lebih penting daripada kecepatan