2010-03-25 16 views
19

que han estado funcionando drush guiones (por drupal) con cygwin en mi máquina ventanas relativamente rápido, pero todavía tienen que esperar aproximadamente un minuto para cualquier comando drush (específicamente caché drush clara a ejecutar).¿Cómo acelerar Cygwin?

Estoy bastante seguro de que tiene algo que ver con la velocidad de cygwin, ya que mis compañeros desarrolladores (que ejecutan linux) pueden ejecutar estos scripts en aproximadamente 5 segundos.

¿Hay alguna manera de hacer que cygwin use más memoria y/o CPU por terminal?

+6

¿Pegar un CD de ubuntu en? :) – Rimian

+2

Esta pregunta supone que el rendimiento de Windows drush es equivalente a Linux Drush y que la memoria o la CPU son limitadas. Esa no es una suposición evidente: simplemente podría ser más lenta. – msw

+3

Pruebe la virtualización ... con soporte de hardware puede ser realmente increíble –

Respuesta

25

El problema con el que se está tropezando no es algún límite arbitrario en Cygwin que pueda hacer desaparecer con un cambio de configuración. Es un aspecto inherente de la forma en que Cygwin tiene que trabajar para lograr que los programas de semántica POSIX generados en virtud de él lo permitan.

La llamada al sistema POSIX fork() no tiene equivalente nativo en Windows, por lo que Cygwin se ve obligado a emularlo en a very inefficient way. Los scripts de Shell provocan una llamada al fork() cada vez que ejecutan un proceso externo, lo que ocurre bastante ya que los lenguajes del script del shell son tan pobres en relación con lo que normalmente llamaríamos un lenguaje de programación. Los programas externos son cómo los scripts de shell obtienen algo de consecuencia.

Existen otras ineficiencias en Cygwin, aunque si las perfila, probablemente descubra que esa es la velocidad más alta. En la mayoría de los lugares, la capa de Cygwin entre un programa creado con ella y el sistema operativo subyacente es bastante delgada. Los desarrolladores de Cygwin se toman muchas molestias para mantener la capa lo más delgada posible a la vez que proporcionan la semántica correcta de POSIX. El grosor poco común actual en la emulación de llamada fork() es inevitable a menos que Microsoft agregue un recurso de tipo nativo fork() a su sistema operativo. Sus incentivos para hacer eso no son muy buenos.

Las soluciones publicadas anteriormente como comentarios no son malas.

Otra posibilidad es ir a través de la secuencia de comandos drush y ver si hay llamadas a programas externos que puede reemplazar con intrinsics shell o construcciones más eficientes. No esperaría una gran mejora en la velocidad al hacer eso, pero tiene la buena propiedad de que también acelerará las cosas en el lado de Linux. (fork() es eficiente en Linux, pero a partir de programas externos sigue siendo una gran velocidad de golpear que puede que no tenga que pagar tan a menudo como lo hace actualmente.) Por ejemplo:

numlines=`grep somepattern $somefile | wc -l` 
if [ $numlines -gt 0 ] ; then ... 

iría más rápido a medida:

if grep -q somepattern $somefile ; then ... 

La primera versión es posiblemente más clara, pero requiere al menos tres invocaciones de programas externos, y con shells primitivos, cuatro. (¿Los ve a todos?) El reemplazo requiere solo una invocación de programa externo.

6

puedes dar a cygwin una mayor prioridad.

Escribe un archivo por lotes, por exampe "cygstart.bat" con el siguiente contenido:

# cygstart.bat

inicio "Cygwin"/alta C: \ cygwin \ Cygwin.bat

El interruptor "/ high" le da al shell una mayor prioridad de proceso.

9

También se fijan en cosas que retrasan el inicio cygwin:

  • recortar sus PATH de Windows (a los huesos desnudos como% SystemRoot% \ system32;% SystemRoot%)
  • Retire las cosas no lo hace necesita de bashrc y bash_profile
  • Mueve las cosas que solo necesitas en la ventana de tu terminal de bashrc a bash_profile
  • Una sorpresa sorprendentemente larga en cygwin es completar bash. Si lo está usando (y debe hacerlo porque es excelente), solo debe completarse la fuente para los comandos que necesita (en lugar de todos los que solían ser los predeterminados). Y, como se mencionó anteriormente, provéalos de bash_profile no bashrc.
+3

Recortar el 'PATH' puede hacer una gran diferencia. :) – Rufflewind