2012-08-17 21 views
5

Actualmente estoy trabajando en una pequeña aplicación de prueba interna para crear múltiples tipos de carga en la computadora para que podamos ver cómo funciona nuestro software bajo carga. Me estoy colgando en una sola solicitud, porque hago una especie de forma de especificar un porcentaje de uso de la CPU (por ejemplo, 40%) antes de que el usuario ejecute el programa, y ​​eso mantendrá la CPU en un rango + - 10% de lo que invirtieron. Me dijeron que habían visto programas que lo hacían antes, pero que todos los que había visto que decían hacerlo no funcionaban. Estoy intentando leer un uso promedio y dejar que el hilo se ejecute para que el uso de la CPU disminuya, pero he descubierto que no es preciso. También se usará en varios servidores, cada uno con diferentes CPU, por lo que no puedo hacer mucha codificación, ya que tendrá que funcionar en cada servidor. Personalmente no creo que sea posible hacerlo con precisión, pero lo pido aquí como un último esfuerzo para ver si alguien más ha encontrado un software similar a este, y sabe cómo se escribirá.C# Mantener CPU en/cerca del uso de porcentaje designado para propósitos de prueba

Editar: He intentado usar un subproceso de menor prioridad, y también me dijeron que no sería útil para ellos (aunque tuve la opción creada solo con el fin de probar antes de que esto se me pidiera).

+0

No conozco ninguna forma de limitar la cantidad de energía de la CPU que puede consumir, esa es la tarea del sistema operativo, determinar la programación; además de limitar cuántos núcleos puede usar. Lo que puede hacer es alterar la prioridad del proceso, también iba a mencionar que lo durmió, pero ya ha notado que esa es una solución imperfecta. –

Respuesta

3

Hacemos algo similar un tiempo atrás afinando un servidor de aplicaciones. Descubrimos que nuestro rendimiento general era mejor cuando la CPU estaba en torno al 70%. Nuestra solución fue generar hilos adicionales, con un retraso entre cada uno, hasta que se alcanzó la carga deseada. Si la CPU superó el 80%, redujimos el número de subprocesos en ejecución (marcamos un subproceso para finalizar su trabajo actual y luego finalizamos). Si la CPU cayó por debajo del 60%, activamos un nuevo hilo.

Puede aplicar una lógica similar para crear cargas artificiales que puede sintonizar con una utilización de CPU de destino. Sus hilos necesitarían equilibrar CPU y sin CPU (IO, o simplemente dormir) para permitir un ajuste fino. Si sus hilos consumen mucha CPU, cada uno consumirá 1 núcleo de CPU a aproximadamente 100%.

+0

Si no te importa que pregunte, ¿cómo se veía tu hilo? Actualmente solo tengo el mío haciendo una suma y una resta constantes en un bucle infinito, y eso consume todo un núcleo por sí mismo (aunque la máquina en la que estoy trabajando en este momento no es muy potente) – wgallon

+0

@BillyGallon, CPU infinita bound loop comerá el 100% de un núcleo en cualquier máquina (a menos que la programación a nivel del sistema operativo no programe ese hilo por prioridad u otros límites, como sugiere el usr) –

+0

Los hilos en nuestro caso funcionaron en el mundo real, seleccionando datos de una tabla DB y luego realizar cálculos en ella. Sospecho que intercalar llamadas Thread.Sleep (dormir por intervalos aleatorios pero bastante cortos) con cálculos intensivos de CPU debería permitirle crear un hilo que promedia la utilización modesta de la CPU para que tenga una capacidad razonable de controlar la carga general generada por una serie de subprocesos . –

Cuestiones relacionadas