Resumen
¿Cómo puede configurar Linux tanto para leer desde un disco / sistema de archivos local como para escribir en un recurso compartido de red al mismo tiempo, en lugar de leer mientras no hay datos en la red, y luego enviar esos datos a través de la red mientras el disco local está ¿ocioso?
Es mucho más rápido leer y escribir al mismo tiempo en lugar de solo realizar una operación y luego la otra de manera alterna.
Detalles
Estoy transfiriendo una gran cantidad de datos de discos locales en una máquina Linux a un dispositivo NAS.
Estoy usando rsync
para copiar, básicamente, /srv/data
en /mnt/nas
que es un soporte de CIFS.
Comenzó bien, leyendo a 100 MB / seg y escribiendo en el NAS a 100 MB / seg (límite de la red de gigabits), con lectura y escritura simultáneamente.
Sin embargo, ahora, unas horas más tarde, descubro que está leyendo desde el disco local, luego detengo la lectura mientras escribe en el NAS, luego, cuando no hay más datos para escribir en el NAS, reanuda la lectura desde el disco de nuevo. La red está inactiva mientras se lee el disco, y el disco está inactivo mientras la red está en uso.
No hace falta decir que leer 200 MB y luego escribir 200 MB lleva mucho más tiempo que leer y escribir esos 200 MB al mismo tiempo.
¿Cómo puedo configurar el núcleo de modo que se adhiera al comportamiento anterior de leer y escribir al mismo tiempo, en lugar de alternar entre leer y escribir, realizando solo una operación a la vez?
Algunas observaciones: cuando el disco local lee a más de 100 MB / seg, todo parece suceder en paralelo muy bien, pero una vez que el disco se ralentiza (parece que ahora solo va a 20 MB / seg por alguna razón) es cuando esta lectura / escritura El cambio parece suceder.
También puedo ejecutar sync
manualmente cada pocos segundos para que las escrituras sucedan en paralelo con las lecturas (aunque obviamente a velocidades reducidas), sin embargo, poner sync
un while
bucle para que se ejecute cada cinco segundos no parece ser la solución correcta ...
El núcleo parece almacenar en caché aproximadamente 1 GB de datos y luego escribirlo en la red lo más rápido posible, lo cual está bien, pero no entiendo por qué el disco lento debe dejar de leerse mientras los datos se envían a través de la red. red.