Saya menyusun kotak Linux yang akan bertindak sebagai server build integrasi berkelanjutan; sebagian besar kami akan membuat hal-hal Java, tapi saya pikir pertanyaan ini berlaku untuk bahasa yang dikompilasi.
Pengaturan sistem file dan konfigurasi apa yang harus saya gunakan? (Misalnya, saya tahu saya tidak akan memerlukan atime untuk ini!) Server build akan menghabiskan banyak waktu membaca dan menulis file kecil, dan memindai direktori untuk melihat file mana yang telah dimodifikasi.
UPDATE: Integritas data adalah prioritas rendah dalam hal ini; itu hanya mesin pembuat ... artefak terakhir akan di-zip dan diarsipkan di tempat lain. Jika sistem file pada mesin build rusak dan kehilangan semua data, kita bisa menghapus dan gambar ulang; build akan terus berjalan seperti sebelumnya.
sumber
Jawaban:
Gunakan ext4fs sebagai sistem file dasar dengan beberapa opsi percepatan seperti
noatime,data=writeback,nobh,barrier=0,commit=300
Kemudian union me-mount tmpfs ramdisk di atas itu sehingga file yang ditulis selama build mendapatkan manfaat dari ramdisk. Ubah prosedur build untuk memindahkan binari yang dihasilkan dari tmpfs di akhir build, atau gabungkan tmpfs kembali ke ext4fs sebelum dilepas.
sumber
barrier=0
Dari wiki lengkung: "Menonaktifkan hambatan saat disk tidak dapat menjamin cache ditulis dengan benar jika terjadi kegagalan daya dapat menyebabkan kerusakan sistem file yang parah dan hilangnya data."Sistem file tercepat? tmpfs terpasang dari RAM yang tersedia, dengan
noatime
pengaturan.Ini hanya dapat dijalankan jika Anda memiliki prosedur untuk memeriksa semua yang diperlukan untuk membangun pohon sumber Anda (karena isi sistem file tmpfs akan hilang ketika Anda reboot), dan jika sumber dan objek masuk ke sudut yang wajar dari RAM yang tersedia ( dengan sisa yang cukup untuk menjalankan kompiler & tautan Anda tanpa bertukar). Yang mengatakan Anda tidak bisa mengalahkan bekerja dari RAM untuk kecepatan ..
sumber
Untuk jawaban Michael Dillon saya dapat menambahkan bahwa Anda dapat membuat sistem file ext4 dengan beberapa opsi:
-i 8096 memberi Anda lebih banyak inode per ukuran, berguna karena membangun lingkungan membuat banyak file.
sumber
Untuk sumber, lebih baik memiliki dukungan kompresi saat terbang, yaitu Reiser4 atau Btrfs . Keduanya "belum untuk produksi", meskipun saya telah mendengar orang menggunakan kedua FSe dengan berat dan bahagia. :-)
Pilihan berikutnya (biasanya saya lakukan) adalah Reiser3 , bukan Ext3 . Ext3 dapat menjadi sedikit lebih cepat saat ini, tetapi Reiser3 tidak memiliki batas waktu format i-node, mendukung perubahan on-line opsi "data =". Ini memiliki "tail" dukungan yang memungkinkan pengetatan file kecil, tetapi jika Anda khawatir tentang kecepatan, "notail" itu.
Baik XFS dan JFS akan merepotkan untuk kasus "banyak file kecil", khususnya jika Anda perlu mengatasinya.
(Lupa menyebutkan EXT4: Ya, ini bahkan lebih cepat, kemudian EXT3. Tetapi semua keterbatasan EXT3 yang disebutkan di atas adalah EXT4 juga).
sumber
Operasi yang Anda uraikan memberikan beberapa petunjuk kunci tentang apa yang harus dilakukan oleh sistem file yang ideal:
Btrfs dan Ext4 adalah tiga di atas, dan yang keempat dipertanyakan. Ext4 mungkin cukup matang untuk itu, tetapi btrf belum selesai membuat kue.
noatime
membantu membuat operasi meta-data lebih efisien, tetapi ketika Anda membuat banyak file baru, Anda masih perlu operasi meta-data menjadi sangat cepat.Saat itulah penyimpanan yang mendasarinya mulai menjadi faktor. Operasi meta-data XFS cenderung terkonsentrasi dalam beberapa blok, yang dapat menyaring operasi. Filesystem Ext-style lebih baik tentang mendekatkan meta-data ke data yang dideskripsikan. Namun, jika penyimpanan Anda cukup abstrak (Anda menjalankan VPS, atau dilampirkan ke SAN) itu tidak masalah secara signifikan .
Setiap sistem file memiliki sedikit speedup yang dapat dilakukan untuk mengeluarkan beberapa poin persentase lebih banyak. Seberapa performan penyimpanan yang mendasarinya akan sangat memengaruhi seberapa banyak keuntungan yang akan Anda lihat.
Dalam istilah penyimpanan, jika Anda memiliki cukup overhead Operasi I / O di penyimpanan Anda, inefisiensi sistem file mulai tidak terlalu menjadi masalah. Jika Anda menggunakan SSD untuk partisi build Anda, pilihan sistem file kurang penting daripada apa yang Anda merasa lebih nyaman untuk digunakan.
sumber
Untuk banyak file kecil, saya akan merekomendasikan Reiser over ext3, xfs, jfs ..., walaupun saya pernah mendengar bahwa ext4 jauh lebih baik (yaitu kebalikan dari apa yang dikatakan poise) daripada inkarnasi sebelumnya untuk pola akses ini.
Reiser mendorong banyak struktur file ke atas pohon inode - sehingga berfungsi sangat baik ketika berhadapan dengan file kecil.
Namun perbedaan perilaku antara filesystem terkemuka relatif kecil dibandingkan dengan manfaat yang akan Anda dapatkan dengan memiliki memori fisik yang cukup untuk cache / buffer secara efektif.
Ini adalah cara jelek untuk menyelesaikan masalah - meskipun relatif sederhana. Jika itu penting, pikirkan tentang menulis handler yang tidak sah untuk mengindeks mod.
OTOH, jika Anda menggunakan flash SSD (yang akan memberi Anda waktu pencarian yang sangat rendah) saya akan merekomendasikan menggunakan fs yang mendistribusikan menulis lebih efektif untuk alasan umur panjang - misalnya JFFS2
sumber