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.
Respuestas:
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
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.
fuente
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 LinuxEl 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
fuente
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?
fuente