Desempenho lento na unidade NTFS com grande número de arquivos

11

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.

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

  1. Conforme mencionado nos comentários, o sistema executa o Symantec Endpoint Protection. No entanto, desativá-lo não altera os tempos de leitura.

  2. 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?

  3. O MFT tem um tamanho de ~ 8,5 GB, que é mais do que a memória principal.

Paul B.
fonte
Para descartar algo, você se importaria de compartilhar uma captura de tela do RAMMap ?
Tomas Dabasinskas 07/04
Você quer dizer a tabela Resumo do arquivo? Agora que você mencionou, vejo um arquivo SYMEFA.DB com 900 MB de memória que me lembra que o Symantec Endpoint Protection está instalado no sistema. Talvez esse seja o culpado? Vou tentar descobrir mais.
Paul B.
Na verdade, eu estava mais interessado no uso Metafile
Tomas Dabasinskas
OK, entendi. O metarquivo mostra um total de 250 MB, 40 ativos e 210 em espera. Parece normal ou não?
Paul B.
Sim, parece que sim
Tomas Dabasinskas

Respostas:

5

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 )
  • RamMap para mostrar alocação de memória
  • Process Monitor para mostrar que cada arquivo lido é precedido por cerca de 4 operações de leitura para conduzir: \ $ Mft e drive: \ $ Directory. Embora eu não tenha encontrado a definição exata de $ Directory, ela também parece estar relacionada à MFT .
Paul B.
fonte
Então, aumentar a memória física melhorou os tempos de resposta? Você não definiu nenhuma configuração de registro?
D-Klotz
1
Sim. Eu já havia brincado com as configurações do registro. Porém, no final, nenhuma alteração foi necessária após a adição de memória.
Paul B.
Memória em espera são regiões de memória prontas para uso dos programas. Mas como eles ainda não são usados, o sistema operacional os utilizará como cache. Uma vez que qualquer programa precisa que a memória vai ser liberado imediatamente
phuclv