Sobre la conexión gigabit, Teracopy tiene 31 MB / s, pero Windows 8 lo hace a ~ 109 MB por segundo.
¿Qué es exactamente lo que está causando esto? ¿Y puedo habilitar tales velocidades a través de Teracopy? Realmente excavo las características adicionales que tiene Teracopy, seguramente las extrañaré ahora: D
Dos palabras: verificación y caché
Explicación técnica
Este es el procedimiento general para copiar un archivo con el Explorador de Windows:
- Lea una porción de datos de la unidad fuente en la memoria
- Enviar el fragmento a través de los sistemas
- Escribe el fragmento en la unidad de destino
- Si aún no lo ha hecho, regrese al paso 1
Esto parece simple y lo suficientemente corto. Con este algoritmo de transferencia, cada byte del archivo se procesa solo dos veces: una lectura, una escritura.
Pero además, Windows usa memoria (al igual que la unidad) para almacenar en caché algunos datos. Entonces, en lugar de esperar a que el fragmento anterior termine de escribirse, y luego leer el siguiente fragmento, se puede leer un fragmento nuevo mientras el anterior todavía se está escribiendo. Obviamente, esto no puede durar para siempre, pero Windows puede usar toda la memoria libre restante como un búfer temporal para almacenar la mayoría, si no todo, el archivo que se está leyendo en la memoria.
Puede ver el almacenamiento en caché en acción copiando un archivo grande, o una carpeta que contiene muchos archivos, de una unidad a otra, y luego comparando inmediatamente los dos. La comparación será mucho más rápida en ese momento que si lo hace más adelante porque los archivos todavía están en la memoria, por lo que en realidad no los está leyendo desde las unidades.
Dado que la memoria es muy rápida y las velocidades de lectura tienden a ser un poco más rápidas que las velocidades de escritura, la velocidad de transferencia final termina siendo limitada solo por la velocidad de escritura de la unidad de destino.
Teracopy puede hacer dos cosas que pueden ralentizar una transferencia de archivos que Explorer no hace:
A diferencia de Explorer, que solo busca errores básicos durante la transferencia, Teracopy puede verificar que los datos se escribieron correctamente en la unidad de destino para evitar la corrupción de datos que podría ocurrir debido a problemas en los medios de transferencia (red / cable de la unidad / etc. ) o la unidad en sí (sector defectuoso, etc.) Hacer esto significa que tiene que leer el archivo del destino para compararlo con el original.
Dependiendo del algoritmo utilizado y el tamaño del archivo, la verificación se puede optimizar con solo (pero no menos) tres operaciones de unidad para cada archivo / fragmento de archivo en lugar de las dos del Explorador: lea el archivo desde la fuente, escriba el archivo al destino y lea el archivo desde el destino.
Mire lo que sucede cuando copia un archivo con Teracopy (con un algoritmo optimizado para HDD):
- Leer un fragmento de la unidad fuente
- Hash el fragmento leído desde la unidad fuente
- Enviar el fragmento a través de los sistemas
- Escríbelo en la unidad de destino
- Cachés claros
- Lee el fragmento de la unidad de destino
- Hash el trozo de la unidad de destino
- Comparar hashes
- Determinar el siguiente paso
- Si los hash no coinciden, dar error y solicitar al usuario que tome medidas.
- Si los hashes coincidieron y no terminaron, regrese al paso 1
El problema es que si almacena en caché los archivos durante la transferencia, la comparación se vuelve inútil porque no está leyendo los datos reales en la unidad de destino, está leyendo la copia almacenada en caché en la memoria desde la fuente. Por lo tanto, para verificar correctamente, debe borrar el caché. Esto se puede hacer después de cada lectura y escritura (que es una operación adicional que terminaría haciendo innumerables veces para archivos de cualquier tamaño significativo), o solo una vez después de que se haya transferido todo el archivo.
Según la captura de pantalla a continuación, TeraCopy realiza la verificación después de que se transfieren los archivos, no durante. Esto significa que utiliza este algoritmo de transferencia optimizado para CPU / RAM en su lugar:
- Leer un fragmento de la unidad fuente
- Enviar el fragmento a través de los sistemas
- Escríbelo en la unidad de destino
- Si aún no lo ha hecho, regrese al paso 1
- Copia terminada, así que borra los cachés y verifica
- Leer un fragmento de la unidad fuente
- Hash el trozo de la unidad de destino
- Leer un fragmento de la unidad de destino
- Hash el trozo de la unidad de destino
- Comparar hashes
- Determinar el siguiente paso
- Si los hash no coinciden, dar error y solicitar al usuario que tome medidas.
- Si los hashes coinciden y no están terminados, regrese al paso 6
Si bien este algoritmo ejerce una presión ligeramente menor sobre la CPU y la RAM, también ejerce mucha más presión sobre la (s) unidad (es) porque ahora cada archivo debe procesarse cuatro veces: lea el archivo completo desde el origen, escríbalo en el destino , luego léalo nuevamente desde el origen y nuevamente desde el destino.
(Si TeraCopy estuviera optimizado para transferencias de red, podría evitar enviar el archivo completo por segunda vez para verificación y enviar solo los hash que son mucho más pequeños, pero ese no parece ser el caso actualmente, y los controladores de red reciben el mismo tratamiento) como unidad local, por lo que en realidad vuelve a leer la fuente).
Por defecto, TeraCopy no verifica ni utiliza el caché. No verificar que aceleraría la transferencia hacia arriba (o más exactamente, no reducir la velocidad hacia abajo), mientras que no se utiliza la memoria caché que reducir la velocidad.
Solicitud
Para determinar sus resultados de velocidad específicos, deberá verificar su configuración para ver si los ha cambiado. Luego, puede intentar aproximar qué tipo de velocidades obtendría con las diferentes configuraciones (tenga en cuenta que probablemente interactuarán, por lo que no se trata simplemente de sumar o restar).
Dicho esto, hagamos un cálculo superficial usando sus números:
- Transferencia local de archivos: 875 Mbps (es decir, velocidad de la unidad)
- Velocidad de red: 1 Gbps = 119.21 MBps
- Copiar a través del Explorador de Windows: 109 MBps
- Copiar a través de TeraCopy: 34MBps
Inmediatamente, vemos que la transferencia de archivos de Explorer está casi maximizando el rendimiento de su red. Un enlace de 1 Gbps es igual a 1,000,000,000 de bits por segundo, que en unidades binarias de bytes es 119MBps. Explorer registra 109MBps, y los 10MBps restantes (que de manera divertida era su máximo anterior :^Þ
) pueden explicarse fácilmente por sobrecarga, carga de fondo y fragmentación.
(Dado que la velocidad de transferencia es casi igual a la velocidad de la red, podemos suponer que la transferencia de archivos de Explorer es unidireccional y que solo se envía una sola copia de cada archivo). Explorer obtiene 110 MBps por dos accesos de archivo por archivo.
Ahora para TeraCopy. Parece que TeraCopy está obteniendo casi exactamente un tercio de la velocidad de Explorer.
Dependiendo de si su diálogo de preferencias indica o no con precisión el algoritmo que usa, TeraCopy podría enviar el archivo fuente completo dos veces para que pueda verificar la copia. De inmediato, esto reduce el rendimiento a la mitad. Si el caché está activado, entonces eso también reduce la velocidad porque tiene que esperar a que termine cada escritura antes de que pueda enviar un nuevo fragmento. Cuando se combina con la verificación, puede derribarlo aún más.
Su velocidad de transferencia de 34 MBps parece razonable si tiene la verificación activada y desactivada. Si desactiva la verificación y el almacenamiento en caché, debería obtener casi lo mismo que Explorer (aún puede obtener un poco menos o incluso un poco más dependiendo de cuán diferente sea el código de transferencia de archivos que usa TeraCopy del que usa Explorer).
Si está de humor para transferir casi 10 GB, entonces también podría intentar alterar la configuración y rehacer la transferencia para cada una de las cuatro permutaciones y anotar las velocidades que obtiene (para estar seguro, ordene de manera que el caché esté fuera entre carreras:) V+C+, V+C-, V-C+, V-C-
.