Solusi 1:
Alasan seseorang membuat struktur direktori semacam ini adalah karena sistem file harus mencari file di dalam direktori, dan semakin besar direktori, semakin lambat operasinya.
Seberapa lambat tergantung pada desain sistem file.
Filesystem ext4 menggunakan B-tree untuk menyimpan entri direktori. Pencarian pada tabel ini diharapkan mengambil O(log n) waktu, yang sebagian besar waktu kurang dari tabel linier naif yang digunakan ext3 dan sistem file sebelumnya (dan jika tidak, direktori terlalu kecil untuk menjadi masalah).
Sistem file XFS menggunakan B+tree sebagai gantinya. Keuntungan dari tabel hash atau B-tree ini adalah bahwa setiap node dapat memiliki banyak anak b , di mana di XFS b bervariasi dan bisa setinggi 254 (atau 19 untuk simpul akar; dan angka-angka ini mungkin kedaluwarsa). Ini memberi Anda kompleksitas waktu O(logb n) , sebuah peningkatan besar.
Salah satu dari sistem file ini dapat menangani puluhan ribu file dalam satu direktori, dengan XFS jauh lebih cepat daripada ext4 pada direktori dengan jumlah inode yang sama. Tetapi Anda mungkin tidak menginginkan satu direktori dengan inode 3M, karena bahkan dengan B+tree, pencarian dapat memakan waktu lama. Inilah yang menyebabkan pembuatan direktori dengan cara ini sejak awal.
Adapun struktur yang Anda usulkan, opsi pertama yang Anda berikan persis seperti yang ditampilkan dalam contoh nginx. Ini akan bekerja dengan baik di kedua sistem file, meskipun XFS masih memiliki sedikit keuntungan. Opsi kedua mungkin berperforma sedikit lebih baik atau sedikit lebih buruk, tetapi kemungkinan akan cukup mendekati, bahkan pada tolok ukur.
Solusi 2:
Dalam pengalaman saya, salah satu faktor penskalaan adalah ukuran inode yang diberikan strategi partisi nama-hash.
Kedua opsi yang Anda usulkan membuat hingga tiga entri inode untuk setiap file yang dibuat. Juga, 732 file akan membuat inode yang masih kurang dari 16KB biasanya. Bagi saya, ini berarti salah satu opsi akan melakukan hal yang sama.
Saya memuji Anda atas hash singkat Anda; sistem sebelumnya yang saya kerjakan telah mengambil sha1sum dari file yang diberikan dan direktori yang disambung berdasarkan string itu, masalah yang jauh lebih sulit.
Solusi 3:
Tentunya salah satu opsi akan membantu mengurangi jumlah file dalam direktori menjadi sesuatu yang tampaknya masuk akal, untuk xfs atau ext4 atau sistem file apa pun. Tidak jelas mana yang lebih baik, harus diuji untuk mengetahuinya.
Tolok ukur dengan aplikasi Anda yang mensimulasikan sesuatu seperti beban kerja sebenarnya sangat ideal. Jika tidak, buatlah sesuatu yang mensimulasikan banyak file kecil secara khusus. Omong-omong, inilah sumber terbuka yang disebut smallfile. Dokumentasinya mereferensikan beberapa alat lain.
hdparm
melakukan I/O berkelanjutan tidak begitu berguna. Itu tidak akan menampilkan banyak I/O kecil atau entri direktori raksasa yang terkait dengan sangat banyak file.