Kinerja EXT4 menjadi sangat buruk pada sistem dengan banyak file kecil

10

Saya memiliki perangkat tertanam kecil yang hanya memiliki 128MB RAM

yang terpasang pada perangkat ini adalah hard disk 2TB USB2

Saya sangat senang dengan kinerja perangkat hingga saat ini ketika jumlah file telah melewati ambang batas kapasitas disk telah melewati ambang batas (saya tidak yakin yang mana)

pada disk terdapat banyak file kecil, karena sifat dari penulisan aplikasi file diatur dalam cara yang sangat seimbang - tidak ada direktori leaf node memiliki lebih dari 200 file dan hanya ada lebih dari 800.000 file.

Saya berharap untuk mendapatkan petunjuk tentang sesuatu untuk diselidiki. Performa disk telah turun secara signifikan, perangkat ini berjalan dengan baik dan kemudian kinerja tiba-tiba turun seperti batu.

Asumsi saya adalah bahwa struktur organisasi yang saya pilih pada disk untuk file saya entah bagaimana telah merusak kemampuan cache inode untuk tetap zippy.

sebagai percobaan, saya turun disk (pembilasan cache, diverifikasi dengan gratis). Kemudian dari command prompt saya menavigasi jauh ke dalam struktur direktori. Semua memberi tahu direktori ini (dan anak-anaknya) hanya memiliki sekitar 3200 file yang terkandung di bawahnya, dan pada titik ini 'gratis' menunjukkan memori bebas 117MB

pada titik ini, saya mengetik perintah 'find' diikuti oleh 'gratis'

'find' menunjukkan sekitar 3000 file, tetapi penggunaan memori meningkat dari ~ 117MB menjadi ~ 2MB

Saya memahami saldo cache vs memori bebas, dan bagaimana kernel menganggap halaman kosong sebagai halaman yang buruk - namun 115MB konten yang di-cache dari direktori 3000 file mengarah ke kesenjangan serius dalam pemahaman saya. Saya berharap seseorang akan membantu saya memahami apa yang terjadi

dapatkah saya menganggap pohon seimbang adalah cara yang harus ditempuh untuk memiliki banyak file?

macet
sumber

Jawaban:

9

Deskripsi masalah yang sangat bagus.

Berdasarkan apa yang Anda katakan, saya pikir apa yang Anda lihat adalah penggunaan pelat menjadi tinggi. Sebuah percobaan yang baik akan menjalankan cat /proc/meminfodan cat /proc/slabinfolebih penundaan 3 detik saat Anda pergi jauh ke dalam hirarki fs dan menemukan 3000 file. Apa yang pada dasarnya terjadi adalah bahwa kernel akan melintasi struktur fs dan memindai masing-masing file dan inode-nya dan semuanya disimpan dalam memori. Jika Anda memeriksa, /proc/slabinfoAnda akan melihat objek bernama ext4_inode_cacheyang memberi tahu Anda berapa banyak memori yang dibutuhkan oleh masing-masing inode. Lipat gandakan ini dengan no objek (obj_size * no_obj) dan Anda mendapatkan jumlah memori yang digunakan oleh objek. Semakin dalam Anda masuk ke hierarki fs, semakin banyak memori yang akan dikonsumsi hingga sistem mencapai tanda air tinggi di zona memori. Di titik mana, kernel akan mulai mengklaim kembali.

Jika Anda membuka meminfo dan slabinfo, Anda akan mendapatkan detail yang Anda cari. Jika Anda ingin saya melihatnya, lewati saja;)

Soham Chakraborty
sumber