2010-11-11 14 views
8

Tengo un repositorio con 30k + archivos pequeños, y solo puedo acceder al servidor a través de Internet a través del https://. La salida es muy, muy lenta. En el orden de las horas La velocidad de la conexión a Internet es ~ 20Mbs y la máquina local es 3Ghz multi-core & 10k RPM HD.¿Puede un checkout SVN ser de subprocesos múltiples?

(svn:// protocolo no es una opción, por desgracia.)

Así que mi pregunta:

Puede svn hacer una obtención paralelo multi-hilo de una copia de trabajo?

Parece que el check de svn va archivo por archivo en orden secuencial. Hay una demora minúscula entre cada archivo y supongo que esa es la solicitud/respuesta http y posiblemente los retrasos de mi sistema de archivos local. (Tal vez un poco de latencia del sistema de archivos del servidor así?)

Gracias

+0

Me imagino (aunque no lo he comprobado) que el tiempo de salida estará dominado por el ancho de banda de E/S. Me interesaría saber si ese no es el caso. –

+0

Un truco tan obvio como el que está tratando de intentar es claramente una indicación de que algo está fundamentalmente mal con el medio ambiente. Quizás sería mejor que hicieras otra pregunta que describa tu situación y pidas sugerencias sobre cómo se podrían optimizar mejor las cosas. Por ejemplo, ¿por qué hay 30,000 archivos en un solo repositorio SVN? Tal vez es hora de dividirlos un poco? –

+2

@spencer El repositorio es grande, pero esto no depende de mí. Sé que otros diseños son mejores, pero como esto no está bajo mi control, no hice esa pregunta. – nonot1

Respuesta

9

No conozco un comando, pero podría escribir un pequeño script de Python (o la herramienta de su elección) para ayudar. "svn list" le da el nombre de cada subdirectorio. Luego puede hacer un checkout de cada subdirectorio en el fondo para que ocurran en paralelo. Es posible que deba hacer esto en el nivel 2/3/lo que sea más profundo dependiendo de la estructura de su directorio y de dónde residan todos los archivos minúsculos.

Supongo que no tiene 30K archivos en el mismo directorio, por supuesto.

+0

Eso no es una mala idea. Probablemente también puedas usar una serie de cajas poco profundas. ¿Alguna herramienta ya hace esto? – nonot1

0

Aunque no puedo pensar en ninguna razón por la cual no podía SVN pago y envío más de un archivo a la vez, que no conozco ningún cliente SVN eso lo hace

-1

¿No dependería mucho del tiempo de ping del servidor?

Si el ping es largo, es posible que no pueda hacer nada al respecto.

También existe la posibilidad de que el enrutador que maneja el firewall se esté quedando atrás y utilice algo así como la inspección de paquetes con estado, es decir, mirando cada paquete. el enrutador se puede cambiar para permitir que las cosas del escaneo del paquete de escape del servidor svn.

+1

El tiempo de ping o 'latencia' en teoría solo afecta el tiempo que tarda el primer paquete en llegar. Debido a que SVN realiza una gran cantidad de solicitudes secuenciales de ida y vuelta, la idea de utilizar el paralelismo es muy válida. Si el cuello de botella era puro ancho de banda, el paralelismo no ayudaría en absoluto. – Evert

0

¿Pueden ser escasos los checkouts (versiones más nuevas de SVN,> = 1.6 o así) para ayudar a mejorar el rendimiento?

time svn co --depth=empty http://URI 

cd svn_repo_root/ 

time svn up --depth=infinity * 

Además, tal vez sea útil para suministrar servidor y/o cliente con los SSD con el fin de trabajar el sistema operativo en torno mal o el rendimiento implementación de servidor/cliente de SVN en el caso de múltiples operaciones de búsqueda de muchos archivos pequeños (debido a Latencia de tiempo de búsqueda domina completamente las operaciones del sistema de archivos en el caso de archivos pequeños; la búsqueda es un problema mucho menor con los SSD.

Y tal vez vale la pena garantizar el caché de todos los archivos en el servidor antes de verificar las cosas, escribiendo una secuencia de comandos para analizar a través de todo el árbol de repositorio en el servidor.

2

Puede usar GNU Parallel para las comprobaciones de svn paralelas. Ejemplo-

svn ls 'https://foo/bar' | parallel svn export 'https://foo/bar/'{} 

Esto iniciará cajas SVN paralelas bajo el directorio 'bar'.

Cuestiones relacionadas