Apa filesystem tercepat untuk build developer?


10

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.



Bacalah tautan yang diberikan gravyface, tetapi juga pastikan untuk menyisihkan partisi yang akan Anda buat, Anda dapat menguji jawaban yang Anda dapatkan di sini. Jika Anda punya uang, lihat apakah Anda dapat berhenti menggunakan disk (menggunakan ramdisk, atau tmpfs cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem )
menjadi yang paling sulit

Jawaban:


6

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.


Meskipun lebih cepat, patut diperhatikan: barrier=0Dari 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."
ideasman42

6

Sistem file tercepat? tmpfs terpasang dari RAM yang tersedia, dengan noatimepengaturan.

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 ..


Ini adalah jawaban yang bagus, tetapi bukan yang saya cari; itu lebih banyak RAM daripada yang saya mampu. (Mungkin dalam beberapa tahun ketika RAM setengah harga!)
Dan Fabulich

@Dan - Seberapa besar pohon sumber Anda? :-)
voretaq7

Pohon sumber tidak terlalu besar, tetapi objek yang dibangun dan file uji terlalu besar untuk masuk ke memori tanpa bertukar.
Dan Fabulich

2

Untuk jawaban Michael Dillon saya dapat menambahkan bahwa Anda dapat membuat sistem file ext4 dengan beberapa opsi:

mkfs.ext4 -O dir_index,extent -i 8096 /dev/<disk>


dir_index
    Use hashed b-trees to speed up lookups in large directories.

extent 
    Instead of using the indirect block scheme for storing the location of data blocks in an inode, use extents instead.  This is a  much  more  efficient  encoding  which  speeds  up filesystem access, especially for large files.

-i 8096 memberi Anda lebih banyak inode per ukuran, berguna karena membangun lingkungan membuat banyak file.


0

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).


0

Operasi yang Anda uraikan memberikan beberapa petunjuk kunci tentang apa yang harus dilakukan oleh sistem file yang ideal:

  • Akses r / w acak besar-besaran selama proses pembangunan.
  • Banyak, banyak file yang diperbarui dalam waktu singkat, sehingga operasi meta-data yang cepat sangat penting.
  • Penanganan efisien dari banyak file kecil pada sistem file yang mungkin sangat berat.
  • Cukup matang untuk tidak mengambil risiko kehilangan data dalam kasus tepi yang jarang dan tidak jelas.

Btrfs dan Ext4 adalah tiga di atas, dan yang keempat dipertanyakan. Ext4 mungkin cukup matang untuk itu, tetapi btrf belum selesai membuat kue. noatimemembantu 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.


Saya sebenarnya TIDAK terlalu peduli dengan kehilangan data. (Diperbarui pertanyaan untuk diklarifikasi.) Maksud saya, kehilangan data bukanlah hal yang baik, tapi saya tidak menyimpan data penting; Saya sedang memproses banyak file dan memindahkan data ke tempat lain. Jika saya mampu membeli RAM, saya hanya akan menggunakan tmpfs seperti yang direkomendasikan voretaq7 di atas.
Dan Fabulich

0

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.

dan memindai direktori untuk melihat file mana yang telah dimodifikasi.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.