¿Puedo acelerar el tenedor de cygwin?

15

Me encontré con una publicación discutiendo la velocidad de la bifurcación en Cygwin, dando una 'tasa de bifurcación' esperada en Windows XP de alrededor de 30-50 por segundo ( enlace )

Tengo un dúo Core 2 (1.79GHz) que esperaría obtener resultados comparables, pero solo administra alrededor de 8 bifurcaciones por segundo (y a veces mucho menos):

$ while (true); do date --utc; done | uniq -c
      5 Wed Apr 21 12:38:10 UTC 2010
      6 Wed Apr 21 12:38:11 UTC 2010
      1 Wed Apr 21 12:38:12 UTC 2010
      1 Wed Apr 21 12:38:13 UTC 2010
      8 Wed Apr 21 12:38:14 UTC 2010
      8 Wed Apr 21 12:38:15 UTC 2010
      6 Wed Apr 21 12:38:16 UTC 2010
      1 Wed Apr 21 12:38:18 UTC 2010
      9 Wed Apr 21 12:38:19 UTC 2010

¿Puedes sugerirme algo que pueda hacer para acelerar las cosas? Esta máquina actúa mucho más lentamente en Cygwin que otras que he usado antes, que en realidad eran mucho más lentas.

Actualizar

Permítanme justificar mi pregunta: no creo que tener una bifurcación más rápida mejore mágicamente mi vida, pero creo que este punto de referencia es un buen proxy para los problemas de rendimiento que veo en bash debido al uso normal de ejecutables externos para calcular valores. Encuentro que obtengo una notable velocidad en Cygwin al revisar mis scripts de inicio de shell y completar bash e intentar reemplazar los comandos externos con comandos internos; en Linux esto no es un problema. Sin embargo, a menudo, esto no es posible, y mi PC está tardando ~ 14 segundos en iniciar un shell con un caché cálido y sin carga.

Andrew Aylett
fuente
1
Cygwin siempre será lento, más lento. Incluso VirtualBox / VMWare brindaría un rendimiento más rápido, o si necesita un entorno de desarrollo, use msys. Pero esto ... no sé ... nunca encontré realmente utilizable Cygwin.
Apache
¡+1 para el bonito y sencillo punto de referencia de horquilla! Simplemente ejecuté esto en un VPS Linux de 5 $ / mes para compararlo con mi computadora portátil i7 con Windows, y el VPS obtuvo 30 veces más.
Mark K Cowan

Respuestas:

2

Esto no tiene nada que ver con que fork sea lento.

He visto a Cygwin correr lento cuando el directorio "home" de Windows estaba en una unidad de red. Cada comando buscaría allí binarios que ralentizaran enormemente las cosas.

ve si

while (true); do /bin/date --utc; done | uniq -c

es más rápido, si es así, ese es probablemente tu problema

de lo contrario, intente ejecutar bash a través de strace / ltrace (si incluso funcionan en cygwin) y vea qué está haciendo cuando se tarda 1 segundo en ejecutar la fecha.

usuario23307
fuente
1
Desafortunadamente, codificar los caminos no hace una diferencia apreciable. strace funciona en Cygwin, pero nada me llama la atención cuando miro el rastro.
Andrew Aylett
1

Me temo que no hay mucho que puedas hacer al respecto.

Windows no tiene una fork()syscall nativa, por lo que Cygwin tiene que emular esto. Sin embargo, la implementación de esta emulación es muy ineficiente. (Ver Preguntas frecuentes sobre Cygwin )

MSYS2, que a menudo se usa en aplicaciones en las que uno quiere un entorno de línea de comandos similar a Linux posiblemente con todas las funciones en Windows, se basa en Cygwin, por lo que también se ve afectado por esto.

En realidad es tan malo, que un fork()en Windows es al menos un orden de magnitud más lento que en Linux

msys2bash-windows-box$ time { date; }
Sa, 24. Feb 2018 16:51:44

real    0m0,046s
user    0m0,000s
sys     0m0,000s

msys2bash-windows-box$ while (true); do /bin/date --utc; done | uniq -c
     13 Sa, 24. Feb 2018 15:57:18
     17 Sa, 24. Feb 2018 15:57:19
     16 Sa, 24. Feb 2018 15:57:20


bash-linux-box$ time { date; }
Sat Feb 24 15:51:54 UTC 2018

real    0m0.002s
user    0m0.000s
sys     0m0.000s

bash-linux-box$ while (true); do date --utc; done | uniq -c
    211 Sat Feb 24 15:56:35 UTC 2018
    286 Sat Feb 24 15:56:36 UTC 2018
    260 Sat Feb 24 15:56:37 UTC 2018

El ejemplo anterior muestra la diferencia entre un i5-2500k @ 4GHz, 32GiB RAM Windows 10 Pro box frente a un débil VPS RAM de 1GiB de un núcleo

luxifer
fuente
0

No estás viendo tenedores; está viendo fork, exec, llamada del sistema para leer la hora del día, formatear y convertir la salida. Sin mencionar lo que sea tiempo compartido en paralelo.

¿Sobre qué base dice que las otras máquinas "en realidad eran más lentas"? Hay muchas cosas que contribuyen a la velocidad real de una computadora y a la percepción del usuario de la velocidad de la computadora. ¿Qué tipo de cosas haces cuando las horquillas / seg son una buena medida del rendimiento? ¿Cuál es la velocidad de memoria, la arquitectura y la cantidad? ¿Velocidad de E / S de disco y almacenamiento en búfer?

¿Cuál crees que hará más bifurcaciones por segundo: un Core i7 con Vista con 512 MB de RAM o un Celeron con un Linux mínimo con 2 GB?

mpez0
fuente
@ mpez0: Consulte mi justificación actualizada. Para responder a sus preguntas específicamente, mi base para decir que eran más lentas es que eran de una arquitectura más antigua con una velocidad de reloj más lenta, menos RAM (y más lenta) y un disco más antiguo y más lento, pero aún XP. Linux casi siempre será más rápido en la bifurcación, porque usa un modelo de bifurcación en el núcleo donde Windows no lo hace. Tengo un P3 que puntúa ~ 60 en ese punto de referencia :).
Andrew Aylett