rsync es muy lento (factor 8 a 10) en comparación con cp al copiar archivos de nfs-share a dir local

17

Tengo un servidor Ubuntu recién instalado que debería ser el nuevo servidor de respaldo para nuestro almacenamiento VM. El servidor tiene 4 unidades de red, 2 de ellas de 10 Gbit (de hecho, una Intel x540-T2 con el controlador más nuevo disponible) que se utilizan para conectarse a la SAN. Tengo el nfs-share montado localmente y comparé las diferencias de velocidad al copiar un directorio con ~ 30 archivos, alrededor de 15 imágenes vm y los archivos de registro correspondientes. Las imágenes tienen un tamaño de entre 8 GB y 600 GB.

Utilizando:

cp -rf /mnt/nfs-share /backup-storage/

bmon muestra en consecuencia alrededor de 600 MiB / s.

Utilizando

rsync -av /mnt/nfs-share /backup-storage/

bmon muestra algunos paquetes en los primeros segundos, se detiene por unos 30 segundos y luego acumula hasta 60-75 MiB / s. La CPU es de alrededor del 60%.

¿Qué debería / podría cambiar para usar rsynccon el mismo rendimiento que cp?

sendero del alma
fuente

Respuestas:

20

Creo que estas diferencias están bastante bien establecidas entre cpy rsync. Vea este artículo como referencia, titulado: Una mirada al rendimiento de rsync .

extracto:
The four commands tested were:

    rsync $SRC $DEST
    echo $SRC | cpio -p $DEST
    cp  $SRC $DEST
    cat $SRC > $DEST/$SRC

The results for rsync, cpio, cp, and cat were:

user    sys     elapsed hog MiB/s   test
5.24    77.92   101.86  81% 100.53  cpio
0.85    53.77   101.12  54% 101.27  cp
1.73    59.47   100.84  60% 101.55  cat
139.69  93.50   280.40  83% 36.52   rsync

Yo uso rsynca diario. Hay cosas que puede hacer para mejorar la situación.

Por ejemplo, puede intentar usar el -Winterruptor:

-W, --whole-file            copy files whole (w/o delta-xfer algorithm)

También sugeriría asegurarse de tener las versiones 3.x de rsync. Hubo mejoras notables cuando pasamos a las versiones más nuevas.

slm
fuente
15

La forma de hacer que rsync tenga el mismo rendimiento que cp es deletrearlo "cp".

La diferencia entre los dos comandos es significativa a pesar de que el efecto neto puede ser el mismo. En particular, rsync realiza muchas lecturas para ver si algún archivo o parte de un archivo debe copiarse o no.

¿Hay alguna razón por la que quieres usar rsync? Como cp copia "a ciegas", verá un mayor rendimiento sin formato. Si, para un conjunto de condiciones de activación, se utiliza el mecanismo de "transferencia delta" de rsync, verá que las tasas de transferencia disminuyen y el uso de la CPU aumenta bastante en la forma en que informa.

msw
fuente
Soy consciente del comportamiento, pero no esperaba tal efecto. Pensé que, dado CPU-Power e IOPS rsync debería realizarse al menos a 300 MiB / s, especialmente si el archivo a copiar no existe. Todavía no he terminado de probar. La copia de seguridad con rsync sería más conveniente, pero también puedo escribir un script usando cp, dd o lo que se me ocurra. Ahora quiero probar varias posibilidades en diferentes sistemas de archivos para evaluar cuál se adapta mejor.
soulpath
66
Puede llamarme empirista, pero cuando sus expectativas y realidad no están de acuerdo, generalmente no es la realidad la que está equivocada. Hay una docena de razones por las cuales podría incurrir en esta penalidad; incluso las lecturas y escrituras entrelazadas en una SAN pueden tener grandes éxitos de rendimiento dependiendo de los detalles del software.
msw
3
No tenía dudas sobre la realidad, solo sobre rsync, pero debido a estas diferencias, escribiré un script usando cp y algunas sumas de verificación. ¡Gracias por su consejo!
soulpath
No, simplemente no use rsync en un sistema de archivos en red. Su computadora necesita descargar todo el archivo, por lo que pierde toda la ventaja de rsync.
Giacomo Catenazzi
Lamentablemente, esta respuesta es incorrecta en sus detalles. Al copiar entre sistemas de archivos "locales" (y sí, un montaje NFS es un sistema de archivos local en este contexto), rsync no lee el archivo de destino al copiar a menos que habilite explícitamente esta operación contraproducente --whole-file. En esta situación, es muy lento cp.
roaima