Pregunta

he construido un software que puedo implementar en Windows 2003 Server. El software se ejecuta como un servicio continuo y es la única aplicación de Windows en el cuadro de importancia para mí. Parte del tiempo, es la recuperación de datos a través de Internet, y una parte del tiempo que está haciendo algunos cálculos sobre los datos. Es multi-hilo -. Utilizo agrupaciones de hebras de aproximadamente 4-20 hilos

No voy a aburrir con todos los detalles, pero baste decir que a medida que habilito más hilos en la piscina, un trabajo más concurrentes se produce, y el uso de la CPU se eleva. (Como lo hace la demanda de otros recursos, como el ancho de banda, aunque eso es de ninguna preocupación para mí - Tengo un montón)

Mi pregunta es la siguiente: debería simplemente tratar a un máximo de la CPU para obtener el mejor partido de mi dinero? Intuitivamente, yo no creo que tenga sentido para funcionar al 100% de la CPU; incluso el 95% de la CPU parece alto, casi como si no estuviera dando la cantidad de espacio del sistema operativo para hacer lo que tiene que hacer. No sé la manera correcta para identificar mejor equilibrio. Me adivinar que podía medir y medir y probablemente encontrará que el mejor rendimiento se achived a una utilización de la CPU promedio de 90% o 91%, etc, pero ...

Sólo estoy preguntando si hay una regla de oro bien sobre esto ??? No quiero pensar que mi prueba tendrá en cuenta todo tipo de variaciones de las cargas de trabajo. Prefiero jugar un poco segura, pero no demasiado segura (o de lo que estoy subutilización mi hardware).

¿Qué recomienda usted? ¿Qué es una, el rendimiento regla mente inteligente de la utilización de una carga multi-hilo, mixta (algunos de E / S, algunas CPU) aplicación en Windows?

¿Fue útil?

Solución

Sí, me gustaría sugerir el 100% se agitaba por lo que no querría ver los procesos en ejecución así todo el tiempo. Siempre me ha apunté a un 80% para conseguir un equilibrio entre la utilización y el espacio para los picos / procesos ad-hoc.

Un enfoque que he usado en el pasado es a poner encima de la piscina de tamaño lentamente y medir el impacto (tanto en CPU como en otras restricciones tales como IO), nunca se sabe, puede encontrarse con que de repente se convierte en un cuello de botella IO .

Otros consejos

utilización de la CPU no debería importar en este i / o carga de trabajo intensivo, que se preocupan por el rendimiento, a fin de tratar el uso de un subir pendientes enfoque y básicamente tratar mediante programación inyección / extracción de subprocesos de trabajo y seguir el progreso finalización ...

Si se agrega un hilo y que le ayuda, añadir otra. Si intenta un hilo y duele eliminarlo.

Con el tiempo esto va a estabilizar.

Si esta es una aplicación basada en .NET, se añadió escalada colina a la threadpool .NET 4.

ACTUALIZACIÓN:

subir de la colina es un enfoque basado en la teoría de control para maximizar el rendimiento, se puede llamar así ensayo y error, si lo desea, pero es un buen enfoque. En general, no hay una buena 'regla de oro' para seguir aquí porque los gastos generales y las latencias varían tanto, en realidad no es posible generalizar. La atención debe centrarse en el rendimiento y la tarea / la ejecución del hilo, no utilización de la CPU. Por ejemplo, es bastante fácil de vincular los núcleos con bastante facilidad con la sincronización grueso o de grano fino, pero no realmente hacer una diferencia en el rendimiento.

También con respecto a .NET 4, si se puede replantear su problema como un Parallel.For o Parallel.ForEach entonces el threadpool ajustarán número de hilos para maximizar el rendimiento por lo que no tiene que preocuparse por esto.

-Rick

Si se asume ninguna otra cosa de importancia, pero se ejecuta el sistema operativo de la máquina:

Y su carga es constante, usted debe apuntar al uso de la CPU al 100%, todo lo demás es una pérdida de la CPU. Recuerde que los identificadores de sistema operativo los hilos por lo que es de hecho capaz de correr, es difícil de matar de hambre al sistema operativo con un programa de buen comportamiento.

Sin embargo, si la carga es variable y se puede esperar picos que debe tomar en consideración, yo diría que el 80% de la CPU es un umbral bueno para su uso, a menos que sepa exactamente cómo variará que la carga y la cantidad de CPU que va a exigir, en cuyo caso se puede apuntar para el número exacto.

Si simplemente da a sus temas de baja prioridad, el sistema operativo se encargará del resto, y tomar ciclos, ya que tiene que hacer el trabajo. Server 2003 (y la mayoría de los sistemas operativos de servidor) son muy bueno en esto , no hay necesidad de tratar y gestionar por sí mismo.

También he utilizado 80% como regla empírica general para utilización de la CPU de destino. Como otros han mencionado, esto deja un poco de espacio para la cabeza de los picos esporádicos en la actividad y ayudará a evitar golear en la CPU.

Aquí está un pequeño consejo (antiguo, pero sigue siendo relevante) de la tripulación Weblogic en este tema: http://docs.oracle.com/cd/E13222_01/wls/docs92/perform/basics.html#wp1132942

Si cree que su carga es muy uniforme y predecible que podría empujar a ese objetivo un poco más alto, pero a menos que su base de usuarios es excepcionalmente tolerante con las respuestas lentas periódicas y el presupuesto del proyecto es muy apretada, me gustaría recomendar la adición de más recursos para su sistema (la adición de una CPU, utilizando una CPU con más núcleos, etc.) más de hacer un movimiento arriesgado intentar exprimir otra utilización de la CPU del 10% de su plataforma existente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top