Eu estou olhando para esta configuração:
- Windows Server 2012
- Unidade NTFS de 1 TB, clusters de 4 KB, ~ 90% cheios
- ~ 10 milhões de arquivos armazenados em 10.000 pastas = ~ 1.000 arquivos / pasta
- Arquivos geralmente muito pequenos <50 KB
- Unidade virtual hospedada na matriz de disco
Quando um aplicativo acessa arquivos armazenados em pastas aleatórias, leva de 60 a 100 ms para ler cada arquivo. Com uma ferramenta de teste, parece que o atraso ocorre ao abrir o arquivo. A leitura dos dados leva apenas uma fração do tempo.
Em resumo, isso significa que a leitura de 50 arquivos pode levar de 3 a 4 segundos, o que é muito mais do que o esperado. A gravação é feita em lote, portanto o desempenho não é um problema aqui.
Eu já segui conselhos sobre SO e SF para chegar a esses números.
- Usando pastas para reduzir o número de arquivos por pasta ( Armazenando um milhão de imagens no sistema de arquivos )
- Execute
contig
para desfragmentar pastas e arquivos ( /programming//a/291292/1059776 ) - 8.3 nomes e hora do último acesso desativados ( Configurando o sistema de arquivos NTFS para desempenho )
O que fazer com os tempos de leitura?
- Considere 60-100 ms por arquivo como ok (não é, não é?)
- Alguma idéia de como a configuração pode ser melhorada?
- Existem ferramentas de monitoramento de baixo nível que podem dizer exatamente quanto tempo é gasto?
ATUALIZAR
Conforme mencionado nos comentários, o sistema executa o Symantec Endpoint Protection. No entanto, desativá-lo não altera os tempos de leitura.
O PerfMon mede 10 a 20 ms por leitura. Isso significaria que qualquer leitura de arquivo leva ~ 6 operações de leitura de E / S, certo? Seriam as pesquisas de MFT e ACL?
O MFT tem um tamanho de ~ 8,5 GB, que é mais do que a memória principal.
fonte
Respostas:
O servidor não tinha memória suficiente. Em vez de armazenar em cache os dados do metarquivo NTFS na memória, todo acesso a arquivos exigia várias leituras de disco. Como sempre, o problema é óbvio quando você o vê. Deixe-me compartilhar o que obscureceu minha perspectiva:
O servidor mostrou 2 GB de memória disponível no Gerenciador de Tarefas e no RamMap. Portanto, o Windows decidiu que a memória disponível não era suficiente para armazenar uma parte significativa dos dados do metarquivo. Ou alguma restrição interna não permite usar o último bit de memória para dados de metarquivo.
Após a atualização, o Gerenciador de tarefas RAM não mostraria mais memória sendo usada. No entanto, o RamMap relatou vários GB de dados de metarquivo sendo mantidos como dados em espera. Aparentemente, os dados em espera podem ter um impacto substancial.
Ferramentas usadas para a análise:
fsutil fsinfo ntfsinfo driveletter:
mostrar o tamanho da NTFS MFT (ou NTFSInfo )fonte