Saya memiliki pohon direktori yang berisi banyak file kecil, dan sejumlah kecil file yang lebih besar. Ukuran rata-rata file adalah sekitar 1 kilobyte. Ada 210158 file dan direktori di pohon (angka ini diperoleh dengan menjalankan find | wc -l
).
Sebagian kecil file ditambahkan / dihapus / ditulis ulang beberapa kali per minggu. Ini berlaku untuk file kecil, serta ke (jumlah kecil) file yang lebih besar.
Filesystem yang saya coba (ext4, btrfs) memiliki beberapa masalah dengan posisi file pada disk. Dalam rentang waktu yang lebih lama, posisi fisik file pada disk (memutar media, bukan solid state disk) menjadi lebih terdistribusi secara acak. Konsekuensi negatif dari distribusi acak ini adalah bahwa sistem file semakin lambat (seperti: 4 kali lebih lambat dari sistem file baru).
Apakah ada sistem file Linux (atau metode pemeliharaan sistem file) yang tidak mengalami penurunan kinerja ini dan mampu mempertahankan profil kinerja yang stabil pada media yang berputar? Sistem file dapat berjalan pada Fuse, tetapi harus dapat diandalkan.
Jawaban:
Performa
Saya menulis Benchmark kecil ( sumber ), untuk mencari tahu, sistem file apa yang berkinerja terbaik dengan ratusan ribu file kecil:
hapus semua file
sinkronkan dan lepas cache setelah setiap langkah
Hasil (waktu rata-rata dalam detik, lebih rendah = lebih baik):
Hasil:
Sementara Ext4 memiliki kinerja keseluruhan yang baik, ReiserFS sangat cepat dalam membaca file berurutan. Ternyata XFS lambat dengan banyak file kecil - Anda tidak boleh menggunakannya untuk kasus penggunaan ini.
Masalah fragmentasi
Satu-satunya cara untuk mencegah sistem file dari mendistribusikan file melalui drive, adalah untuk menjaga partisi hanya sebesar yang Anda benar-benar membutuhkannya, tetapi perhatikan untuk tidak membuat partisi terlalu kecil, untuk mencegah fragmentasi-intrafile. Menggunakan LVM bisa sangat membantu.
Bacaan lebih lanjut
Arch Wiki memiliki beberapa artikel hebat yang berhubungan dengan kinerja sistem file:
https://wiki.archlinux.org/index.php/Beginner%27s_Guide#Filesystem_types
https://wiki.archlinux.org/index.php/Maximizing_Performance#Storage_devices
sumber
Saya menggunakan ReiserFS untuk tugas ini, terutama dibuat untuk menangani banyak file kecil. Ada teks yang mudah dibaca di funtoo wiki.
sumber
Kinerja ext4 menurun setelah 1-2 juta file dalam direktori. Lihat halaman ini http://genomewiki.ucsc.edu/index.php/File_system_performance yang dibuat oleh Hiram Clawson di UCSC
sumber
XFS terkenal memiliki kinerja yang sangat baik dalam situasi seperti ini. Ini adalah bagian dari mengapa kami menggunakannya di tempat kerja saya untuk toko surat kami (yang dapat berisi ratusan ribu file dalam 1 direktori). Ini memiliki toleransi kesalahan yang lebih baik daripada ReiserFS, digunakan lebih luas, dan umumnya merupakan sistem file yang sangat matang.
Selain itu, XFS mendukung defragmentasi online. Meskipun ia menggunakan teknik alokasi tertunda yang menghasilkan fragmentasi lebih sedikit (vs filesystem lain) untuk memulai.
sumber
syslogd
Pola khas .) Misalnya di sisi saya dalam XFS lebih dari pengaturan MD saya baru saja mengamati, bahwa menghapus file 1,5 GB butuh 4,75 menit (!) Sementara drive disk dibatasi pada batas 100 transaksi / s pada tingkat penulisan lebih dari 2 MB / s. Ini juga berdampak pada kinerja operasi IO paralel lainnya pada drive yang sama dengan buruk, karena drive sudah dimaksimalkan. Tidak pernah melihat hal seperti itu di FS lain (atau sedang diuji dalam tolok ukur).