2010-11-03 6 views
9

Me sorprende cuánto tiempo se tarda en fusionar un cambio muy pequeño de cualquier rama en particular en el tronco; 1-2 minutos para fusionarse en unas pocas líneas de texto que han cambiado en un solo archivo de texto que tiene solo 2k de longitud.Lo que determina la velocidad de una operación de fusión de SVN 1.6

Me gustaría, si es posible, hacer una fusión mucho más rápida pero no sé por dónde empezar. He hecho un google rápido y las posibles razones de fusiones lentas parece incluir todas y cada una de las siguientes opciones: -

  • gran tamaño de recompra (tanto en términos de tamaño en el disco y el número de revisiones).
  • árbol de fuentes grande (aparentemente SVN tiene que arrastrarse por el árbol con el fin de trabajar a cabo cambios)
  • La versión de SVN servidor/cliente
  • archivos muy grandes (varios MB) (no tenemos muy grande solo archivos, así que dudo que esto nos afecte)

Supongo que realmente quiero saber cómo averiguar cuál de los puntos anteriores está haciendo que las fusiones sean tan lentas.

Ahora estoy a oscuras sobre si trabajar en el cliente o trabajar en el servidor es lo que más tiempo lleva (sospecho que es el cliente dado que el uso de la CPU no es masivo en el servidor). Pensé que podría ser la gran cantidad de mergeinfo que ha acumulado más de 100 de fusiones, pero hice una prueba en la que eliminé toda la información de fusión de un par de ramas y luego hice una fusión y encontré la misma lentitud.

Entonces, lo que me gustaría preguntar es: - * ¿Cómo se podría diagnosticar/perfilar la actividad de SVN? * Según la información a continuación, ¿hay algo realmente obvio que pueda estar causando el bajo rendimiento?

Gracias

Chris

Aquí están algunos hechos/cifras sobre nuestra configuración SVN

  • repositorio SVN Nuestra cuenta con alrededor de 32.000 revisiones.
  • tamaño Repo en el disco: 8,3 GB
  • Nuestros ramas de desarrollo tienen cada uno alrededor de 1.400 carpetas con versiones (19.000 ficheros versionados)
  • SVN servidor: 1.6.6 (r40053) (alojada en Apache que se ejecuta en Ubunto Lucid Lynx)
  • Estoy usando tortuga 1.6.9 en Win7 (aunque otros miembros del equipo usan SmartSVN e informan el mismo tipo de velocidad).

Edición

Podría valer la pena añadir que cuando la rama/fusionar, nos rama desde el tronco y siempre fusionamos toda la rama de nuevo al tronco. Entonces todo mergeinfo está en la carpeta de troncales (y ramas).

Conclusiones

En mi caso, que parecía ser el acceso al disco que era el cuello de botella en el proceso de fusión - cuando moví mi árbol de código fuente de mi disco duro a mi SSD, la misma combinación fue de 50 +/- 5s a 7 +/- 1s.
Ver el proceso SVN de tortuga en el explorador de procesos durante la fusión fue bastante revelador: mientras hacía una fusión en mi HDD, los bytes de E/S estaban entre 500kb/sy 3Mb/s durante la mayor parte del tiempo. En la SSD, los bytes de E/S eran de hasta 10-20 Mb/s. [De manera bastante confusa, algunas fusiones en mi HDD eran de velocidad comparable (y los bytes de E/S eran similares) que los de mi SSD. En estos casos, supongo que muchos de los archivos que se estaban leyendo ya estaban en el caché de archivos de Windows. ]

encontré la siguiente todo aumento de la velocidad de combinación

  • La fusión de & a una carpeta más profunda por la jerarquía de origen: esto no es realmente una opción para nosotros en la "vida real", porque seguimiento de la fusión se vuelve casi imposible si no se registra en la carpeta "trunk-level", pero muestra que la fusión de árboles mucho más pequeños hace que el proceso sea mucho más rápido.
  • Reduciendo el tamaño del conjunto de trabajo que se combina con las ayudas (siempre que use la opción de combinación de profundidad de "conjunto de trabajo" y no completamente recursiva) - así que simplemente eliminando las carpetas (de mi conjunto de trabajo bajo el tronco) .

Respuesta

1

También puede intentar combinar en un árbol más corto para encontrar si vuelve más rápido para ver si el árbol más pequeño hace la diferencia.

Nota: Se ha producido una gran cantidad de fusión relacionados mejoras en la versión más reciente comprobar el siguiente enlace

http://svn.apache.org/repos/asf/subversion/tags/1.6.11/CHANGES

Actualización a última podría ayudar.

+0

Parece ser el acceso al disco que lleva la mayor parte del tiempo con mi fusión, por lo que la fusión de árboles más pequeños es más rápida - ver comentarios al final de mi pregunta –

0

Una cosa que he notado durante la fusión es que las fusiones que utilizan el directorio de nivel superior son muy rápidas. De modo que la fusión de una rama de entidad de nuevo a troncal o la fusión de un rango de revisión desde el troncal a su rama de característica es rápida. Pero fusionar los cambios de un archivo específico en algún lugar de la copia de trabajo es extremadamente lento. Por esta razón, siempre ramifico todo el tronco y luego cambio los archivos que necesito para luego fusionar todo. Entonces, si su rama se creó a partir del subdirectorio de un tronco, esta podría ser la razón por la cual es muy lenta.

+0

Gracias por la respuesta Nikola. Nosotros también seguimos su patrón de bifurcación/fusión (es decir, siempre se bifurca desde la carpeta troncal y no desde una subcarpeta) –

0

Otro factor es el delta relativo entre las dos ramas. Entonces, por ejemplo, si se ramifica de la cajuela y luego se fusiona con la cajuela en la rama un mes después, esto llevará mucho tiempo, en términos relativos. Por otro lado, si se fusiona desde el tronco a su sucursal todos los días, esto será relativamente rápido.

Cuestiones relacionadas