Sto guardando questa configurazione:
- Windows Server 2012
- Unità NTFS da 1 TB, cluster da 4 KB, ~ 90% pieno
- ~ 10 M file memorizzati in 10.000 cartelle = ~ 1.000 file / cartella
- File per lo più abbastanza piccoli <50 KB
- Unità virtuale ospitata su array di dischi
Quando un'applicazione accede ai file memorizzati in cartelle casuali, occorrono 60-100 ms per leggere ciascun file. Con uno strumento di test sembra che si verifichi il ritardo all'apertura del file. La lettura dei dati richiede solo una frazione del tempo.
In sintesi, ciò significa che la lettura di 50 file può richiedere facilmente 3-4 secondi, il che è molto più del previsto. La scrittura avviene in batch, quindi le prestazioni non sono un problema qui.
Ho già seguito i consigli su SO e SF per arrivare a questi numeri.
- Uso delle cartelle per ridurre il numero di file per cartella ( Archiviazione di un milione di immagini nel filesystem )
- Esegui
contig
per deframmentare cartelle e file ( https://stackoverflow.com/a/291292/1059776 ) - 8.3 nomi e ora dell'ultimo accesso disabilitati ( Configurazione del file system NTFS per le prestazioni )
Cosa fare per i tempi di lettura?
- Considera che 60-100 ms per file sono ok (non è vero?)
- Qualche idea su come migliorare l'installazione?
- Esistono strumenti di monitoraggio di basso livello in grado di dire esattamente in che cosa viene trascorso il tempo?
AGGIORNARE
Come menzionato nei commenti, il sistema esegue Symantec Endpoint Protection. Tuttavia, disabilitarlo non modifica i tempi di lettura.
PerfMon misura 10-20 ms per lettura. Ciò significherebbe che qualsiasi file letto richiede ~ 6 operazioni di lettura I / O, giusto? Si tratterebbe di ricerca MFT e controlli ACL?
La MFT ha una dimensione di ~ 8,5 GB che è superiore alla memoria principale.