Pelas minhas observações como desenvolvedor Java trabalhando em estações de trabalho Windows, o NTFS é lento comparado aos sistemas de arquivos Linux. A pergunta é: existe algo no driver NTFS que possa ser ajustado manualmente, por exemplo, para fornecer mais memória para cache? Habilitar alguns algoritmos experimentais? Se não estiver disponível, talvez exista outro sistema de arquivos que possa ser usado no Windows, talvez comercial, que seja mais rápido que o NTFS?
Para deixar claro, não estou procurando melhorar as velocidades de compilação para projetos Maven, gostaria de obter uma melhoria geral para o sistema operacional. Tenho a sensação de que o NTFS está desatualizado e lento há muito tempo em comparação com os sistemas de arquivos Linux. Parece-me estranho que o sistema operacional mais popular do planeta tenha apenas um sistema de arquivos que ainda requer desfragmentação manual. Talvez lá é uma alternativa?
Atualização: Aqui está o que é lento, de acordo com minhas observações. Estou construindo / empacotando um projeto, o que significa muitas operações de leitura / gravação no disco. O sistema de compilação é multiplataforma (Java, Maven), para que eu possa executar exatamente as mesmas ações quando inicializado no Ubuntu, por exemplo.
No Linux, minhas compilações são pelo menos 1/3 mais rápidas. Daí a pergunta sobre o sistema de arquivos. Me desculpe se está fora de lugar.
Respostas:
Embora eu adorasse ver algo como o ZFS disponível para hosts do Windows, o NTFS não é um sistema de arquivos horrível. Ele suporta a maioria dos recursos "modernos" do sistema de arquivos (atributos estendidos, registro no diário, ACLs, etc.), mas é prejudicado pelo Explorer e pela maioria dos outros aplicativos que não suportam nenhum deles.
Uma coisa que absolutamente prejudicará seu desempenho é ter entradas "demais" em um diretório. Depois de passar algumas milhares de entradas em um diretório, tudo fica lento. Literalmente, a máquina inteira irá parar de aguardar que o NTFS crie ou remova entradas quando isso estiver acontecendo.
Eu costumava trabalhar com um aplicativo que gerava documentos baseados em HTML para assemblies .NET; criaria um arquivo por propriedade, método, classe, espaço para nome, etc. Para montagens maiores, veríamos 20 + k arquivos, todos despejados em um único diretório. A máquina passaria algumas horas durante a compilação bloqueada no NTFS.
Em teoria, o Windows suporta plug-ins de sistema de arquivos, o que tornaria o ZFS nativo, ext3 ou o que for possível (até o FUSE). Na prática, as APIs não são documentadas, portanto você fica completamente sozinho.
Agora, como você está desenvolvendo Java, você pode instalar um sistema operacional diferente em sua máquina ou usar uma VM em cima do Windows?
Além disso, você pode tentar alguns benchmarks de sistema de arquivos independentes de plataforma (iozone, bonnie ... provavelmente existem outros mais modernos que eu não conheço de cabeça, talvez até alguns escritos em Java) para ver se é na verdade, o sistema de arquivos está te impedindo ou se é outra coisa. Otimização prematura e tudo isso ...
fonte
Eu acho que a solução real seria reescrever seu sistema de compilação para que ele usasse a API nativa do sistema de arquivos do Windows, em vez da API unix (fopen etc) por baixo da estrutura de portabilidade. Mas isso não vai acontecer, então basicamente você está preso a qualquer nível de desempenho que eles considerassem aceitável.
Freqüentemente, ao usar sistemas não escritos originalmente para Windows, você descobre que o deslocamento de diretório foi muito mal tratado; portanto, verifique se você possui uma árvore de diretórios muito plana.
fonte
Há um sistema de arquivos suportado pelo novo sistema operacional Windows E é mais rápido que o NTFS. É exFAT. Existe a possibilidade de usá-lo para a unidade do sistema. Mas não se sabe quais complicações podem ter.
Certamente você pode usá-lo para outras partições. É mais rápido com operações aleatórias de leitura / gravação. Perfeito para um SSD, por exemplo.
fonte
opendir()
chamada (ou equivalente).Você tem um programa antivírus em execução na verificação de acesso / gravação para a pasta do seu projeto?
Compilar envolve ler e gravar muitos arquivos pequenos em rápida sucessão, o que pode sobrecarregar o antivírus. Adicione a pasta do projeto à lista de pastas excluídas e veja se isso melhora a situação.
No Linux, você (provavelmente) não possui nenhum software antivírus ....
fonte