Esecuzione di operazioni sui file su migliaia di file su NTFS vs HFS, ext3, altri


5

[Crossposted dal mio post Ask HN . Sentiti libero di chiuderlo se la domanda è troppo ampia per il superutente.]

Questo è qualcosa di cui sono curioso da anni, ma non ho mai trovato buone discussioni sull'argomento. Certo, il mio Google-Fu potrebbe semplicemente non riuscire a farmi ...

Mi occupo spesso di progetti che coinvolgono migliaia di file relativamente piccoli. Ciò significa che eseguo spesso operazioni su tutti quei file o su un grande sottoinsieme di essi, copiando la cartella del progetto altrove, eliminando un mucchio di file temporanei, ecc. Di tutte le macchine su cui ho lavorato nel corso degli anni, ho ho notato che NTFS gestisce queste attività in modo costantemente più lento di HFS su un Mac o ext3 / ext4 su un box Linux. Tuttavia, per quanto ne so, la velocità effettiva non è più lenta su NTFS (almeno non significativamente), ma il ritardo tra ogni singolo file è solo un po 'più lungo. Quel piccolo ritardo si aggiunge davvero a migliaia di file.

(Nota a margine: da quello che ho letto, questo è uno dei motivi per cui git è un tale dolore su Windows, dal momento che si basa molto sul file system per il suo database di oggetti.)

Certo, le mie prove sono semplicemente aneddotiche: al momento non ho numeri di prestazioni reali, ma è qualcosa che mi piacerebbe testare ulteriormente (forse con un Mac con doppio avvio su Windows). Tuttavia, la mia genialità insiste sul fatto che qualcuno là fuori lo abbia già fatto.

Qualcuno può spiegare questo, o forse indicarmi la giusta direzione per approfondire ulteriormente me stesso?

Risposte:


3

Non sono un esperto di HFS, ma ho esaminato i filesystem NTFS ed ext3. Sembra che dovresti considerare due cose.

Innanzitutto, i file system ext2 / 3/4 pre-allocano le aree su disco per l'archiviazione dei metadati dei file (permessi, proprietà, blocchi o estensioni che compongono i dati del file). Non penso che NTFS lo faccia. L'equivalente di un "inode" ext3 è il record $ MFT. Comprendo che i record $ MFT non sono necessariamente già allocati quando si crea un file. $ MFT può essere coltivato se necessario. È molto più difficile aumentare il numero di inode in un filesystem ext2 / 3/4.

Non sono al corrente di alcun interno NT, ma tutto sembra come i record $ MFT vengono creati in base alle esigenze, quindi è possibile avere file piccoli, directory, file di grandi dimensioni intervallati.

Per i filesystem in stile FFS di BSD, che sono sicuramente i filesystem ext2 / 3/4, molti sono andati nel raggruppare gli inode su disco e nel separare i file di directory dagli inode. Molto però è andato nella stesura di directory e metadati in modo efficiente e sicuro. Vedi: http://www.ece.cmu.edu/~ganger/papers/softupdates.pdf come esempio.

In secondo luogo, i dati per file di piccole dimensioni vengono conservati nei record $ MFT, se leggo correttamente le cose. Questo non è vero per ext2 / 3/4, ed è per questo che ho menzionato sopra che i file piccoli e quelli di grandi dimensioni sono trattati in modo leggermente diverso.

Mi sembra che NT (il sistema operativo) soffra di contese per $ MFT. Directoies viene aggiornato, che è un aggiornamento del record $ MFT. Vengono creati piccoli file, che è un aggiornamento $ MFT. Il sistema operativo non può ordinare letture e scritture in modo efficiente perché tutti gli aggiornamenti dei metadati e le scritture dei dati vanno tutti allo stesso "file", $ MFT.

Ma, come ho detto, solo una supposizione. La mia conoscenza di NTFS deriva principalmente dalla lettura e solo poco dalla sperimentazione. Potresti ricontrollare la mia ipotesi vedendo se HFT mantiene "directory" separate da "inode" separate da "dati di file". In tal caso, potrebbe essere un grande suggerimento.


Grazie per la tua risposta informativa! Sembra sicuramente che la tabella dei file master sia il colpevole (almeno in parte).
peterjmag,

3
NTFS prealloca lo spazio per la MFT. Vedi msdn.microsoft.com/en-us/library/aa365230(VS.85).aspx - vedi anche le quattro fasi molto dettagliate della crescita dei file NTFS: blogs.technet.com/b/askcore/archive/2009/10/ 16 /…
user4197

Informazioni di supporto eccellenti, user4197, ma tali informazioni confermano che la contesa per $ MFT può essere un problema quando si lavora con molti file di piccole dimensioni i cui metadati vengono aggiornati spesso.
Bruce Ediger,
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.