Na conexão gigabit, o Teracopy faz 31MB / s, mas o Windows 8 faz ~ 109MB por segundo?
O que exatamente está causando isso? E posso ativar essas velocidades via Teracopy? Eu realmente gosto dos recursos extras que o Teracopy tem, certamente sentirá falta deles agora: D
Duas palavras: verificação e cache
Explicação técnica
Este é o procedimento geral para copiar um arquivo com o Windows Explorer:
- Leia um pedaço de dados da unidade de origem na memória
- Envie a parte através do (s) sistema (s)
- Escreva o pedaço na unidade de destino
- Se ainda não tiver concluído, retorne à etapa 1
Isso parece simples e curto o suficiente. Com esse algoritmo de transferência, cada byte do arquivo é processado apenas duas vezes: uma leitura e uma gravação.
Além disso, o Windows usa memória (assim como a própria unidade) para armazenar em cache alguns dados. Portanto, em vez de esperar que o pedaço anterior termine de ser gravado e depois ler o próximo pedaço, um novo pedaço pode ser lido enquanto o anterior ainda está sendo gravado. Obviamente, isso não pode durar para sempre, mas o Windows pode usar toda a memória livre restante como um buffer temporário para armazenar a maioria, se não todo o arquivo que está sendo lido na memória.
Você pode ver o cache em ação copiando um arquivo grande - ou uma pasta contendo muitos arquivos - de uma unidade para outra e comparando imediatamente as duas. A comparação será muito mais rápido naquele ponto do que se você fizer isso, mais tarde, porque o arquivo (s) ainda estão na memória, por isso não é realmente lê-los a partir de (s) da unidade.
Como a memória é muito rápida e as velocidades de leitura tendem a ser um pouco mais rápidas que as velocidades de gravação, a taxa de transferência final acaba sendo limitada apenas pela velocidade de gravação da unidade de destino.
O Teracopy pode fazer duas coisas que podem retardar a transferência de arquivos que o Explorer não faz:
Diferentemente do Explorer, que verifica apenas erros básicos durante a transferência, o Teracopy pode realmente verificar se os dados foram gravados corretamente na unidade de destino, a fim de evitar a corrupção de dados que pode ocorrer devido a problemas na mídia de transferência (cabo de rede / unidade / etc. ) ou a própria unidade (setor defeituoso, etc.) Isso significa que ele precisa ler o arquivo do destino para compará-lo ao original.
Dependendo do algoritmo usado e do tamanho do arquivo, a verificação pode ser otimizada até (mas não menos que) três operações de unidade para cada arquivo / bloco de arquivos, em oposição às duas do Explorer: leia o arquivo da fonte, escreva o arquivo para o destino e leia o arquivo a partir do destino.
Veja o que acontece quando você copia um arquivo com Teracopy (com um algoritmo otimizado para HDD):
- Leia um pedaço da unidade de origem
- Hash da leitura da parte da unidade de origem
- Envie a parte através do (s) sistema (s)
- Escreva na unidade de destino
- Limpar caches
- Leia o pedaço de volta da unidade de destino
- Hash do pedaço da unidade de destino
- Comparar hashes
- Determinar o próximo passo
- Se os hashes não corresponderem, dê um erro e solicite ao usuário a ação
- Se os hashes corresponderem e não tiverem terminado, volte para a etapa 1
O problema é que, se você armazena em cache os arquivos durante a transferência, a comparação se torna inútil porque você não está lendo os dados reais na unidade de destino, está lendo a cópia em cache na memória da fonte. Portanto, para verificar corretamente, você deve limpar o cache. Isso pode ser feito após cada leitura e gravação (que é uma operação extra que acabaria sendo executada inúmeras vezes para arquivos de qualquer tamanho significativo) ou apenas uma vez após a transferência do arquivo inteiro.
De acordo com a captura de tela abaixo, o TeraCopy realiza a verificação após a transferência dos arquivos, e não durante. Isso significa que ele usa esse algoritmo de transferência otimizado para CPU / RAM:
- Leia um pedaço da unidade de origem
- Envie a parte através do (s) sistema (s)
- Escreva na unidade de destino
- Se ainda não tiver concluído, retorne à etapa 1
- Cópia concluída, caches limpos e verificação
- Leia um pedaço da unidade de origem
- Hash do pedaço da unidade de destino
- Leia um pedaço da unidade de destino
- Hash do pedaço da unidade de destino
- Comparar hashes
- Determinar o próximo passo
- Se os hashes não corresponderem, dê um erro e solicite ao usuário a ação
- Se os hashes corresponderem e não tiverem terminado, volte para a etapa 6
Embora esse algoritmo exerça um pouco menos pressão sobre a CPU e a RAM, ele também exerce muito mais pressão sobre as unidades, porque agora cada arquivo precisa ser processado quatro vezes: leia o arquivo inteiro da fonte, escreva-o no destino , leia-o novamente a partir da fonte e novamente a partir do destino.
(Se o TeraCopy fosse otimizado para transferências de rede, evitaria enviar o arquivo inteiro uma segunda vez para verificação e enviar apenas os hashes muito menores, mas que atualmente não parecem ser o caso, e os drivers de rede são tratados da mesma maneira. como unidade local, na verdade, ele relê a fonte.)
Por padrão, o TeraCopy não verifica ou usa o cache. Não verificar iria acelerar a transferência para cima (ou mais precisamente, não retardar para baixo), apesar de não usar o cache iria retardá-lo.
Inscrição
Para determinar seus resultados específicos de velocidade, você teria que verificar suas configurações para ver se as alterou. Em seguida, tente aproximar o tipo de velocidade que você obteria com as diferentes configurações (lembre-se de que elas provavelmente irão interagir, portanto, não é uma simples questão de adicionar ou subtrair).
Dito isto, vamos fazer um cálculo superficial usando seus números:
- Transferência local de arquivos: 875 Mbps (ou seja, velocidade da unidade)
- Velocidade da rede: 1Gbps = 119.21 MBps
- Copie através do Windows Explorer: 109 MBps
- Copie através do TeraCopy: 34MBps
Logo de cara, vemos que a transferência de arquivos do Explorer está quase maximizando o rendimento da sua rede. Um link de 1 Gbps é igual a 1.000.000.000 de bits por segundo, que em unidades binárias de bytes , é de 119 MBps. O Explorer está com um clock de 109 MBps, e os 10 MB restantes (que eram divertidamente o máximo anterior :^Þ
) podem ser facilmente explicados por sobrecarga, carga em segundo plano e fragmentação.
(Como a taxa de transferência é quase igual à velocidade da rede, podemos supor que a transferência de arquivos do Explorer seja unidirecional e apenas uma cópia de cada arquivo seja enviada.) O Explorer recebe 110 MBps para dois acessos de arquivo por arquivo.
Agora para TeraCopy. Parece que o TeraCopy está obtendo quase exatamente um terço da velocidade do Explorer.
Dependendo de sua caixa de diálogo de preferências indicar com precisão o algoritmo usado, o TeraCopy pode realmente estar enviando o arquivo de origem inteiro duas vezes para que possa verificar a cópia. Imediatamente, isso reduz o rendimento pela metade. Se o cache estiver ativado, isso também reduz a velocidade, pois é necessário aguardar a conclusão de cada gravação antes de poder enviar um novo bloco. Quando combinado com a verificação, pode derrubá-lo ainda mais.
Sua taxa de transferência de 34 MBps parece razoável se você tiver a verificação ativada e o armazenamento em cache. Se você desativar a verificação e o cache, deverá obter o mesmo valor do Explorer (você ainda pode obter um pouco menos ou até um pouco mais, dependendo da diferença entre o código de transferência de arquivo usado pelo TeraCopy e o usado pelo Explorer).
Se você deseja transferir quase 10 GB, tente alterar as configurações e refazer a transferência para cada uma das quatro permutações e anote as velocidades que obtém (por segurança, faça o pedido para que o cache seja off entre execuções:) V+C+, V+C-, V-C+, V-C-
.