2010-05-26 9 views
10

Tengo que construir un simulador con C#. Este simulador debería poder ejecutar un segundo subproceso con velocidad de CPU configurable y tamaño de RAM limitado, p. 144MHz y 50 MB.
Por supuesto que sé que un simulador nunca puede ser tan preciso como el hardware real. Pero trato de obtener un rendimiento casi similar.
Por el momento estoy pensando en crear un hilo que detendré/dormir de vez en cuando. Dependiendo de la velocidad de CPU deseada, el simulador debe ajustar el tiempo de inactividad de este hilo y, por lo tanto, simular una frecuencia de CPU diferente. Para medir la velocidad alcanzada, pensé en usar PerformanceCounters. Pero con este enfoque tengo el problema de que no sé cómo limitar el tamaño de la RAM que podría usar el subproceso.
¿Tiene alguna idea de cómo realizar un simulador de este tipo?
Cómo simular diferentes frecuencias de CPU y limitar RAM

Gracias de antemano!

+0

+1 como me gustaría saber la respuesta. Pero me temo que estás en aguas muy profundas –

+0

Mira asignadores de arena para limitar la memoria a un total específico. – WhirlWind

+3

tenga en cuenta que la velocidad de reloj no es realmente una buena medida de rendimiento. En un núcleo de mi Core2Duo desclasificado a 1GHz obtengo un rendimiento significativamente mejor que en un Pentium de 2.5 GHz. Si estás tratando de descubrir cómo funcionaría tu software en un dispositivo específico, deberías tratar de obtener un emulador del real. chip. – back2dos

Respuesta

1

Si usted está preocupado con la simulación de un entorno de sistema operativo a continuación una respuesta sería utilizar un entorno virtual máquinas donde puede controlar los parámetros de memoria y CPU, etc.

El roscado de pausa \ parada puede ayudarle a simular Frecuencia de la CPU, pero esto va a ser terriblemente impreciso, ya que cuando pausas el hilo, se des-programará, luego le corresponde al sistema operativo volver a programarlo en algún punto "aleatorio" en el tiempo, es decir, un punto que tienes sin control.

En cuanto a la limitación de la memoria, iniciar un nuevo proceso que será el anfitrión de su código es una opción, y luego limitar la memoria de ese proceso, por ejemplo:

http://www.codeproject.com/KB/threads/Setting_Max_Memory_Limit.aspx

Esta realidad no va a simular OS global limitaciones de memoria sin embargo.

+0

Para todas las máquinas virtuales que vi hasta ahora existe el problema de que no puedo configurar la velocidad de la CPU.Además, tengo el problema de que puedo limitar el tamaño de la memoria para toda la VM solamente y no para un proceso/subproceso en particular. El segundo enfoque con comenzar un nuevo proceso y controlarlo es una buena idea. – geiserbua

+1

Generalmente, puede especificar qué porcentaje del recurso de la CPU está asignado a la máquina virtual, por lo que proporciona una forma "aproximada" de restringir el recurso de la CPU. Puedes hacer esto en Hyper-V al menos. PD: si te gustan las respuestas de las personas, vota sobre ellas. :) –

3

Limitar la memoria es fácil con las máquinas virtuales como vmware. Puede cambiar la velocidad de la CPU con algunas herramientas de overclocking. Por ejemplo http://cpu.rightmark.org/products/rmclock.shtml ¡Buena suerte!

+1

+1. La virtualización es probablemente la mejor idea. Tiene sentido que una VM también implemente un límite de CPU (ciclos/milisegundo ¿quizás?), Por ejemplo si se usa para tener un servidor virtual. Así que buscaría si hay una opción para eso. – back2dos

+0

El problema con las máquinas virtuales es que no hay forma de cambiar la velocidad de la CPU – geiserbua

0

¿Un hilo para dormir la ejecución del software de sus códigos de operación de invitado?

creo que funciona, pero un poco raro, como el avance rápido, pausa, FF, pausa, etc ...

Si lo que desea es acelerar un proceso de abajo, intente esto: usar la CPU sola funciones de paso y "depurar" el proceso. Debe escribir un controlador personalizado para la trampa de paso simple de la CPU. Su trabajo de controlador es solo un gran bucle de NOP.

Tiene un pequeño retraso entre cada instrucción.

Cuestiones relacionadas