viernes, 23 de abril de 2010

Cygwin es lento (I)

Pero mucho, mucho.

Lo más lento es ejecutar los configure, que en Unix tardan segundos y en Cygwin minutos.
La razón es la lentísima creación de processos (spawing) en Cygwin.

Por ejemplo, el configure de FFmpeg.

Primero creamos un entorno óptimo, eliminando los directorios innecesarios de PATH:
export TMPDIR=/tmp
export TEMP=/tmp
export TMP=/tmp
export PATH=/usr/local/bin:/usr/bin:/bin


Esta es mi invocación habitual de configure:
time ksh ./configure --disable-shared --enable-static --enable-gpl --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-avisynth --enable-bzlib --enable-libmp3lame --enable-libx264 --cc=gcc443 --cpu=core2 --enable-zlib --extra-cflags=-DX_DISPLAY_MISSING

real 2m24.004s
user 0m15.938s
sys 0m41.157s


La cuenta no sale: 2m24s -15s -42s = 86 segundos sin currar.

Primer intento de mejorarlo: evitar las reubicaciones de las DLLs.
Para ello, invocamos la línea de comandos de Windows (cmd.exe), vamos al directorio de los binarios de Cygwin, invocamos dash, y lanzamos rebaseall:
cd c:\cygwin\bin
dash
./rebaseall


Volvemos a invocar el configure de FFmpeg y nos da:

real 2m20.758s
user 0m15.713s
sys 0m42.660s


Bueno, hemos ganado 4 segundos.