Le prestazioni EXT4 sono peggiorate sul sistema con molti file di piccole dimensioni


10

Ho un piccolo dispositivo incorporato che ha solo 128 MB di RAM

collegato a questo dispositivo è presente un disco rigido USB2 da 2 TB

Sono stato molto soddisfatto delle prestazioni del dispositivo fino a poco tempo fa quando uno dei due file ha superato una soglia della capacità del disco ha superato una soglia (non sono sicuro di quale)

sul disco ci sono molti piccoli file, a causa della natura dei file dell'applicazione di scrittura sono organizzati in modo molto equilibrato : nessuna directory del nodo foglia ha più di 200 file e ci sono poco più di 800.000 file.

Spero di avere un indizio su qualcosa su cui indagare. Le prestazioni del disco sono diminuite in modo significativo, il dispositivo si è spostato abbastanza bene e poi all'improvviso sono diminuite come una roccia.

La mia ipotesi è che la struttura organizzativa che ho scelto su disco per i miei file abbia in qualche modo danneggiato la capacità delle cache degli inode di rimanere zippy.

come esperimento, ho smontato il disco (svuotamento delle cache, verificato con libero). Quindi da un prompt dei comandi ho navigato in profondità nella struttura della directory. Tutto sommato questa directory (e i suoi figli) aveva solo circa 3200 file contenuti al suo interno, e a questo punto "libero" mostrava> 117 MB di memoria libera

a questo punto, ho digitato il comando 'trova' seguito da 'libero'

'find' ha mostrato circa 3000 file, ma l'utilizzo della memoria è passato da ~ 117 MB a ~ 2 MB

Comprendo i saldi della cache rispetto alla memoria libera e come il kernel considera una pagina vuota una pagina non valida, tuttavia 115 MB di contenuto memorizzato nella cache da una directory di 3000 file indicano un grave divario nella mia comprensione. Spero che qualcuno mi aiuti a capire cosa sta succedendo

posso supporre che un albero bilanciato sia la strada da percorrere per avere molti file?

Risposte:


9

Descrizione del problema molto buona.

Sulla base di quello che hai detto, penso che ciò che stai vedendo sia l'utilizzo della lastra che va in alto. Un esperimento buona potrebbe essere quella di eseguire un cat /proc/meminfoe cat /proc/slabinfosu un ritardo di 3 secondi mentre si va in profondità nella gerarchia fs e scoprire i file 3000. Ciò che sta essenzialmente accadendo è che il kernel attraverserà la struttura di fs e scansiona i singoli file e i loro inode e tutti sono memorizzati. Se controlli /proc/slabinfovedrai un oggetto chiamato ext4_inode_cacheche ti dice quanta memoria prenderà ogni inode. Moltiplicalo per il numero di oggetti (obj_size * no_obj) e otterrai la quantità di memoria utilizzata dall'oggetto. Più in profondità si entra nella gerarchia di fs, più memoria verrà consumata fino a quando il sistema non raggiunge la filigrana alta della zona di memoria. A quel punto, il kernel inizierà a reclamare.

Se sbocchi su meminfo e slabinfo, otterrai i dettagli che stai cercando. Se vuoi che guardi, incollalo;)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.