¿Cómo ralentizar su computadora (con fines de prueba)? [cerrado]

20

Como la mayoría de la gente está de acuerdo, no es una buena idea alentar a los desarrolladores a crear código rápido al darles máquinas lentas . Pero hay un punto en esa pregunta. Mi máquina de desarrollo es rápida, por lo que ocasionalmente escribo código que es inquietantemente ineficiente, pero eso solo se hace evidente cuando lo ejecuto en las máquinas de otras personas.

¿Cuáles son algunas buenas maneras de ralentizar temporalmente una máquina de desarrollo turboalimentada? La noción de "velocidad" incluye varios factores, por ejemplo:

  • Frecuencia de reloj de la CPU.
  • Cantidad de núcleos de CPU.
  • Cantidad de memoria y caché del procesador.
  • Velocidad de varios autobuses.
  • Disco I / O.
  • GPU
  • etc.
Joonas Pulakka
fuente
34
Presione el "botón Turbo" ... no, espere.
LennyProgrammers
66
Aquí está la raíz de su problema: "inquietantemente ineficiente". cambie su hábito de codificación
Darknight
16
@Darknight: No, no es eso. Tienes que primero hacer lo correcto, a continuación, que sea rápido si es necesario . Para saber qué optimizar, debe probar y descubrir cuál es la parte problemática. Hacer las cosas lo más rápido posible, en primer lugar es una pérdida de su tiempo - y es probable que los residuos de hacer las cosas bien .
Joonas Pulakka
1
Bueno, en parte estoy de acuerdo. Sin embargo, si tiene un hábito de codificación eficiente para comenzar; entonces, como "hacer que funcione correctamente", puede pasar menos tiempo más tarde "haciendo que sea más rápido".
Darknight
44
@Darknight: Creo que @Joonas está haciendo una pregunta muy sensata. La idea de que simplemente "cambiar su hábito de codificación" es suficiente no es realista. Aquí hay un ejemplo: ( stackoverflow.com/questions/926266/… ) Y, la idea de que solo puede cronometrarlo en una máquina más lenta sin un IDE supone que eso es suficiente para encontrar errores de rendimiento. Mucha gente habla sobre la creación de perfiles, pero hacerlo (con éxito) es otra cuestión. Lo que realmente me ayudaría (y otros que creo) es lo que Joonas está pidiendo.
Mike Dunlavey

Respuestas:

39

Ejecute sus pruebas en una máquina virtual con memoria limitada y solo un núcleo.

Las máquinas antiguas que la gente todavía puede tener ahora son en su mayoría cosas de la era Pentium 4. Eso no es tan poco realista: estoy usando uno ahora mismo. El rendimiento de un solo núcleo en muchas PC actuales normalmente no es mucho mejor y puede ser peor. El rendimiento de RAM es más importante que el rendimiento de la CPU para muchas cosas de todos modos, y al limitar un poco más severamente que para un viejo P4 de 1GB, compensa eso un poco.

De lo contrario, si está dispuesto a gastar un poco, compre una netbook. Ejecute las pruebas sobre eso.

Steve314
fuente
1
O una vieja computadora portátil.
El problema con las máquinas virtuales es que ninguna de ellas (AFAIK) admite el puerto IEEE 1394 (firewire). Parte de mi software utiliza cámaras conectadas con FireWire, así que ...
Joonas Pulakka
los reales te permiten asignar cualquier dispositivo PCI a la VM
Javier
3
Podría ser un trabajo para Xen: la máquina virtual no tiene un servidor O / S, pero es la capa superior en sí misma. Tiene una gran historia de Unix, pero ahora puede admitir sistemas operativos propietarios. Pero nunca lo usé, y no sé cuánto control puede tener sobre el rendimiento y los recursos de una VM en particular.
Steve314
1
+1 Una VM es altamente sintonizable y proporciona exactamente el entorno que busca para las pruebas. Yo uso VMWare para este propósito.
Gary Rowe
11

La forma de detectar la ineficiencia significativa del algoritmo es perfilar su código. La forma de detectar el uso excesivo de la memoria es entender primero cuánta memoria tiene su objetivo, y luego diseñar en consecuencia, y probar regularmente en ese entorno.

Si está escribiendo código de subprocesos, probar en varias máquinas con diferentes velocidades de CPU ayudará a resaltar errores específicos relacionados con el tiempo en el manejo de su subproceso, pero es imprescindible realizar pruebas agresivas de la lógica del subproceso.

Michael Shaw
fuente
1
No, la creación de perfiles no detectará la ineficiencia algorítmica. Le mostrará dónde está gastando su tiempo el programa si necesita acelerarlo, pero no si necesita acelerarlo.
David Thornley
Creo que me estoy perdiendo la distinción aquí. Si quiere decir que la creación de perfiles no le dirá SI está siendo subóptimo, justo donde está gastando sus ciclos de CPU, entonces estoy de acuerdo. Eso requiere experiencia para hacer ese juicio.
Michael Shaw
44
@David Thornley y @Ptolemy: Creo que la ineficiencia del algoritmo o los puntos críticos del código son secundarios al problema central: "¿Es demasiado lento o no?" Es subjetivo, pero también es la pregunta más importante. Si no se siente lento en la práctica, entonces, ¿qué pasa si su algoritmo es ineficiente? ¡Hace lo que tiene que hacer! O si el programa se siente demasiado lento, independientemente de los algoritmos altamente óptimos, entonces puede que tenga que cambiar el enfoque (arquitectura, lenguaje de programación, ¡algo!) Por completo. Tener algoritmos altamente óptimos no es una excusa para la lentitud del programa :-)
Joonas Pulakka
1
Para revelar la ineficiencia del algoritmo, use conjuntos de datos de tamaño progresivo para las pruebas.
rwong
10

Cualquier cosa que haga para reducir la velocidad de su máquina probablemente sea un truco.

Aquí hay un par de sugerencias:

  • Usa máquinas virtuales
  • Perfile el código en su máquina, buscando cuellos de botella
  • Use una máquina vieja para "pruebas de rendimiento"
Jason
fuente
@matt, ¿qué significa eso?
Johnny
1
@johnny: Quiero decir que estoy votando porque Jason sugirió que se perfilara la aplicación, que con suerte encontraría la fuente de cuellos de botella de rendimiento sin la necesidad de pasar a un sistema más lento.
Matt Ellen
4

Darse cuenta de que esta es una pregunta bastante antigua, pero para cualquier otra persona en esta situación; podrías probar CPUKiller. Básicamente es una pequeña aplicación que puede configurar para consumir diferentes% de su procesador. http://www.cpukiller.com/

Dave
fuente