¿Por qué scp con compresión es más lento que sin?

10

Necesitaba transferir un archivo de disco virtual KVM de 20 GB , almacenando el sistema de archivos raíz de una VM CentOS 6.5, de un servidor de laboratorio a otro. El gran tamaño del archivo y el hecho de que una vez comprimí un archivo de disco virtual de este tipo a unos cientos de megabytes me hicieron habilitar instintivamente la compresión, scppero me sorprendió ver una velocidad de transferencia bastante baja. Luego intenté bzip2en combinación con sshy caty me sorprendió. Aquí está el resumen de los métodos y el rendimiento promedio.

  • scp -C vm1-root.img [email protected]:/mnt/vdisks/, 11 MB / s.
  • bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img", 5 MB / s. Este resultado aún menor provocó la búsqueda en la red.
  • scp -c arcfour -C vm1-root.img [email protected]:/mnt/vdisks/, 13 MB / s. Este uso de -c arcfourcomo se sugirió en una respuesta en serverfault. Apenas ayudó. Finalmente, deshabilité la compresión.
  • scp vm1-root.img [email protected]:/mnt/vdisks/, 23 MB / s.

¿No debería la compresión haber sido más rápida?

EDITAR: No sé por qué la pregunta ha sido rechazada. Pensé que hay algo que aprender aquí.

Después de recibir la ssh(1)sugerencia de la página de manual de @sven, probé un par de métodos alternativos de transferencia de archivos que no implican compresión, ambos con mejores resultados.

  • cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img", 26 MB / s.

  • nc -l 5678 > /mnt/vdisks/vm1-root.imgen el receptor y nc 192.168.161.62 5678 < vm1-root.imgen el transmisor, 40 MB / s. El puerto 5678es arbitrario y estaba disponible.

¡El uso ncresultó ser el método de copia más rápido!

En el pasado, scp -Cfuncionó muy bien siempre que pensé que lo haría. Por ejemplo, al transferir syslogs ( /var/log/messages*) de pocos GB de tamaño. Una velocidad de transferencia sin comprimir de unos pocos cientos de KB / s aumentaría a 1-2 MB / s. Este ejemplo cae en el caso de una conexión lenta como se ha señalado en la página del manual.

Tengo un caso en el que una imagen de disco virtual recién creada para una partición de 20 GB tiene un tamaño comprimido de solo 200 MB. ¡Con una velocidad de transferencia de aproximadamente 25 MB / s, podríamos hacer la copia en solo 8 segundos en lugar de más de 13 minutos! Claramente, scpsin compresión es ineficiente en este caso y scp -Ces aún peor.

Supongo que la principal lección aprendida aquí es que scp -Cdebe considerarse como una conveniencia. Si un archivo se puede comprimir significativamente, entonces es mejor comprimirlo primero en el origen, transferir el formulario comprimido y finalmente comprimirlo en el destino. Las herramientas que realizan la compresión y descompresión rápidamente (por ejemplo, pbzip2 ) serán de mayor ayuda.

pdp
fuente

Respuestas:

9

Citando man ssh(que es la base utilizada por scp):

La compresión es deseable en las líneas de módem y otras conexiones lentas, pero solo ralentizará las cosas en las redes rápidas.

El problema es que comprimir los datos lleva más tiempo que simplemente enviarlos a través de la red.

Sven
fuente
Estaba preguntando específicamente por qué la velocidad de transferencia era más baja, pero sospecho que ssh realmente calcula esto dividiendo el tamaño de los datos por el tiempo total que lleva toda la operación, y no separando la parte donde comprime los datos y la parte donde los copia. red.
Ernie
@Ernie: si puede transmitir datos con una velocidad de 20 MB / s, y el sistema solo puede entregarlos con 15 MB / s porque la compresión es muy lenta, se transmitirá con solo 15 MB / s. Eso es todo al respecto.
Sven
@Ernie: la velocidad de transferencia impresa scpincluye el tiempo dedicado a la compresión / descompresión. Los valores informados parecerían sorprendentes si este no fuera el caso.
pdp
0

Además, además de la compresión, nc obtiene la mejor tasa porque tampoco se cifra. Y la compresión sin pérdidas se basa en la búsqueda de secciones redundantes de los datos, que cuando se realiza a nivel de red, puede ver un máximo de bytes [tamaño de búfer] donde, cuando se hace con todo el archivo primero, son bytes [tamaño de archivo] dentro del cual cazar y procesar frases de bytes duplicados.

También para mover imágenes de disco, debe usar una herramienta compatible con el sistema de archivos como ntfsclone / partclone porque incluso la compresión no puede vencer simplemente omitiendo los bloques no asignados: su velocidad de transferencia es infinita si no tiene que transferir ningún dato. Además, no olvide destruir los archivos de intercambio e hibernación en una partición de Windows o si está copiando basura, simplemente se descartará y se recreará de todos modos.

Tony Butler
fuente