Masalah Performa Sistem File macOS Mengganggu Developer yang Menggunakan Git dan Package Manager

Tim Komunitas BigGo
Masalah Performa Sistem File macOS Mengganggu Developer yang Menggunakan Git dan Package Manager

Semakin banyak developer yang mengalami masalah performa signifikan saat bekerja dengan repositori Git dan package manager seperti pnpm di macOS. Masalah ini tampaknya berasal dari cara sistem file APFS milik Apple menangani sejumlah besar file kecil, menciptakan bottleneck yang dapat membuat tugas-tugas pengembangan umum menjadi sangat lambat.

Masalah ini menjadi begitu terlihat sehingga developer telah membuat repositori benchmark khusus untuk menguji dan mendokumentasikan masalah performa ini. Tes-tes tersebut berfokus pada dua operasi umum yang dilakukan developer setiap hari: membersihkan repositori Git dan menginstal dependensi package. Operasi-operasi ini melibatkan pembuatan, pembacaan, dan penghapusan ribuan file kecil - tepat jenis beban kerja yang tampaknya memicu masalah performa APFS.

Snapshot Time Machine Menciptakan Overhead Tambahan

Salah satu penyebab utama tampaknya adalah snapshot APFS yang dibuat oleh Time Machine. Setiap kali sistem backup berjalan, ia membuat snapshot dari seluruh sistem file, yang menambah overhead signifikan pada operasi file. Ini sangat bermasalah untuk workflow pengembangan yang melibatkan pembuatan dan penghapusan file yang sering.

Sistem snapshot menciptakan badai sempurna masalah performa. Ketika developer bekerja dengan repositori Git atau menginstal package, mereka membuat dan menghapus ribuan file. Setiap operasi ini harus dilacak oleh sistem snapshot, menciptakan pekerjaan tambahan untuk sistem file.

Snapshot APFS: Fitur yang memungkinkan sistem file menangkap keadaan file pada titik waktu tertentu, digunakan oleh Time Machine untuk backup

Operasi I/O Paralel Mengalami Kesulitan di APFS

Masalah signifikan lainnya adalah bagaimana APFS menangani operasi input/output paralel pada direktori yang sama. Tidak seperti beberapa sistem file lain yang dapat secara efisien mengelola beberapa proses yang membaca dan menulis file secara bersamaan, APFS tampaknya kesulitan dengan beban kerja ini. Ini menciptakan bottleneck ketika tools pengembangan modern mencoba mempercepat operasi dengan bekerja pada beberapa file sekaligus.

Masalah ini sangat akut karena baik Git maupun package manager seperti npm dan pnpm dirancang untuk bekerja dengan banyak file secara paralel. Ketika tools ini menghadapi bottleneck sistem file, keuntungan performa dari pemrosesan paralel benar-benar hilang.

Faktor Perbandingan Performa:

  • Masalah APFS: Overhead snapshot, bottleneck I/O paralel, penguncian direktori
  • Masalah Windows: Filter sistem file, pemindaian Windows Defender, kompatibilitas nama file 8.3
  • Keunggulan Linux: Penanganan I/O paralel yang lebih baik, lebih sedikit operasi sistem file latar belakang
  • Operasi Pengujian: Pembersihan repositori Git, instalasi package manager, operasi file massal

Solusi Sementara Memberikan Hasil yang Beragam

Developer telah menemukan beberapa solusi sementara, meskipun masing-masing memiliki trade-off. Beberapa mengecualikan direktori pengembangan mereka dari backup Time Machine, yang dapat meningkatkan performa tetapi menghilangkan file penting dari perlindungan backup. Yang lain beralih menggunakan virtual machine Linux atau container Docker, meskipun pendekatan ini dapat memperkenalkan overhead performa tersendiri.

Saya mengecualikan node_modules dan folder dependensi lainnya dari backup, tetapi proyek pada dasarnya adalah hal utama yang saya inginkan. Saya mungkin memiliki repo online, tetapi biasanya ada branch lokal yang ingin saya backup secara otomatis.

Solusi sementara yang paling ekstrem melibatkan penggunaan RAM disk atau sistem file khusus dalam virtual machine untuk melewati APFS sepenuhnya. Meskipun efektif, solusi ini memerlukan pengetahuan teknis yang signifikan dan dapat memperumit workflow pengembangan.

Solusi Umum untuk Masalah Performa Sistem File macOS:

  • Kecualikan direktori pengembangan dari backup Time Machine
  • Gunakan mesin virtual Linux untuk pekerjaan pengembangan
  • Implementasikan RAM disk untuk operasi file sementara
  • Gunakan Docker dengan OverlayFS (meskipun ini dapat menimbulkan overhead tersendiri)
  • Konfigurasikan pengecualian perangkat lunak keamanan untuk direktori pengembangan

Windows dan Linux Menunjukkan Performa yang Lebih Baik

Tes perbandingan mengungkapkan bahwa operasi serupa pada sistem Windows dan Linux selesai secara signifikan lebih cepat daripada di macOS. Ini menunjukkan masalah ini spesifik pada bagaimana macOS menangani operasi sistem file daripada masalah dengan tools pengembangan itu sendiri.

Namun, situasinya tidak sepenuhnya jelas. Sistem Windows juga dapat mengalami masalah performa ketika software keamanan atau filter sistem file aktif. Perbedaan utamanya adalah bahwa ini sering dapat dikonfigurasi atau dinonaktifkan sementara, sementara karakteristik performa APFS tertanam dalam sistem file itu sendiri.

Dampak yang Lebih Luas pada Pengembangan

Masalah performa ini lebih dari sekadar ketidaknyamanan - mereka mempengaruhi produktivitas developer dengan cara yang dapat diukur. Operasi sederhana yang seharusnya memakan waktu detik dapat berlangsung hingga menit, dan build kompleks atau instalasi dependensi dapat menjadi sangat lambat.

Masalah ini menyoroti ketegangan yang lebih luas antara praktik pengembangan modern dan desain sistem file. Tools pengembangan saat ini dioptimalkan untuk bekerja dengan ribuan file kecil secara paralel, tetapi sistem file tidak selalu dirancang dengan kasus penggunaan ini sebagai prioritas. Seiring workflow pengembangan terus berkembang, performa sistem file untuk beban kerja spesifik ini menjadi semakin penting.

Package manager: Tools seperti npm, pnpm, dan yarn yang secara otomatis mengunduh dan mengelola dependensi software untuk proyek pengembangan

Referensi: disk-perf-git-and-pnpm