Semakin ramai pembangun mengalami masalah prestasi yang ketara apabila bekerja dengan repositori Git dan pengurus pakej seperti pnpm pada macOS. Masalah ini nampaknya berpunca daripada cara sistem fail APFS Apple mengendalikan sejumlah besar fail kecil, mewujudkan kesesakan yang boleh menjadikan tugas pembangunan biasa menjadi sangat perlahan.
Masalah ini telah menjadi begitu ketara sehingga pembangun telah mencipta repositori penanda aras khusus untuk menguji dan mendokumentasikan masalah prestasi ini. Ujian tersebut memfokuskan kepada dua operasi biasa yang dilakukan pembangun setiap hari: membersihkan repositori Git dan memasang kebergantungan pakej. Operasi ini melibatkan penciptaan, pembacaan, dan pemadaman beribu-ribu fail kecil - tepat jenis beban kerja yang nampaknya mencetuskan masalah prestasi APFS.
Petikan Time Machine Mewujudkan Overhed Tambahan
Salah satu punca utama nampaknya adalah petikan APFS yang dicipta oleh Time Machine. Setiap kali sistem sandaran berjalan, ia mencipta petikan keseluruhan sistem fail, yang menambah overhed yang ketara kepada operasi fail. Ini amat bermasalah untuk aliran kerja pembangunan yang melibatkan penciptaan dan pemadaman fail yang kerap.
Sistem petikan mewujudkan ribut sempurna masalah prestasi. Apabila pembangun bekerja dengan repositori Git atau memasang pakej, mereka mencipta dan memadamkan beribu-ribu fail. Setiap operasi ini mesti dijejaki oleh sistem petikan, mewujudkan kerja tambahan untuk sistem fail.
Petikan APFS: Ciri yang membolehkan sistem fail menangkap keadaan fail pada masa tertentu, digunakan oleh Time Machine untuk sandaran
Operasi I/O Selari Terjejas pada APFS
Satu lagi isu penting adalah cara APFS mengendalikan operasi input/output selari pada direktori yang sama. Tidak seperti beberapa sistem fail lain yang boleh menguruskan berbilang proses membaca dan menulis fail secara serentak dengan cekap, APFS nampaknya bergelut dengan beban kerja ini. Ini mewujudkan kesesakan apabila alat pembangunan moden cuba mempercepatkan operasi dengan bekerja pada berbilang fail sekaligus.
Masalah ini amat akut kerana kedua-dua Git dan pengurus pakej seperti npm dan pnpm direka untuk bekerja dengan banyak fail secara selari. Apabila alat ini menghadapi kesesakan sistem fail, keuntungan prestasi daripada pemprosesan selari dinafikan sepenuhnya.
Faktor Perbandingan Prestasi:
- Isu APFS: Overhed snapshot, kesesakan I/O selari, penguncian direktori
- Isu Windows: Penapis sistem fail, imbasan Windows Defender, keserasian nama fail 8.3
- Kelebihan Linux: Pengendalian I/O selari yang lebih baik, operasi sistem fail latar belakang yang lebih sedikit
- Operasi Ujian: Pembersihan repositori Git, pemasangan pengurus pakej, operasi fail besar-besaran
Penyelesaian Sementara Memberikan Hasil Bercampur
Pembangun telah menemui beberapa penyelesaian sementara, walaupun setiap satu datang dengan pertukaran. Ada yang mengecualikan direktori pembangunan mereka daripada sandaran Time Machine, yang boleh meningkatkan prestasi tetapi mengeluarkan fail penting daripada perlindungan sandaran. Yang lain telah beralih kepada menggunakan mesin maya Linux atau bekas Docker, walaupun pendekatan ini boleh memperkenalkan overhed prestasi sendiri.
Saya mengecualikan node_modules dan folder kebergantungan lain daripada sandaran, tetapi projek adalah perkara utama yang saya mahukan. Saya mungkin mempunyai repositori dalam talian, tetapi biasanya terdapat cabang tempatan yang saya mahu disandarkan secara automatik.
Penyelesaian sementara yang paling ekstrem melibatkan penggunaan cakera RAM atau sistem fail khusus dalam mesin maya untuk memintas APFS sepenuhnya. Walaupun berkesan, penyelesaian ini memerlukan pengetahuan teknikal yang ketara dan boleh merumitkan aliran kerja pembangunan.
Penyelesaian Biasa untuk Isu Prestasi Sistem Fail macOS:
- Kecualikan direktori pembangunan daripada sandaran Time Machine
- Gunakan mesin maya Linux untuk kerja pembangunan
- Laksanakan cakera RAM untuk operasi fail sementara
- Gunakan Docker dengan OverlayFS (walaupun ini boleh memperkenalkan overhed tersendiri)
- Konfigurasikan pengecualian perisian keselamatan untuk direktori pembangunan
Windows dan Linux Menunjukkan Prestasi yang Lebih Baik
Ujian perbandingan mendedahkan bahawa operasi serupa pada sistem Windows dan Linux selesai dengan lebih pantas berbanding macOS. Ini menunjukkan isu tersebut khusus kepada cara macOS mengendalikan operasi sistem fail dan bukannya masalah dengan alat pembangunan itu sendiri.
Walau bagaimanapun, keadaan tidak sepenuhnya jelas. Sistem Windows juga boleh mengalami masalah prestasi apabila perisian keselamatan atau penapis sistem fail aktif. Perbezaan utama ialah ini selalunya boleh dikonfigurasi atau dilumpuhkan sementara, manakala ciri prestasi APFS terbina dalam sistem fail itu sendiri.
Kesan yang Lebih Luas kepada Pembangunan
Masalah prestasi ini lebih daripada sekadar kesulitan - ia mempengaruhi produktiviti pembangun dengan cara yang boleh diukur. Operasi mudah yang sepatutnya mengambil masa beberapa saat boleh memanjang kepada beberapa minit, dan binaan kompleks atau pemasangan kebergantungan boleh menjadi sangat perlahan.
Masalah ini menyerlahkan ketegangan yang lebih luas antara amalan pembangunan moden dan reka bentuk sistem fail. Alat pembangunan hari ini dioptimumkan untuk bekerja dengan beribu-ribu fail kecil secara selari, tetapi sistem fail tidak semestinya direka dengan kes penggunaan ini sebagai keutamaan. Apabila aliran kerja pembangunan terus berkembang, prestasi sistem fail untuk beban kerja khusus ini menjadi semakin penting.
Pengurus pakej: Alat seperti npm, pnpm, dan yarn yang secara automatik memuat turun dan menguruskan kebergantungan perisian untuk projek pembangunan
Rujukan: disk-perf-git-and-pnpm