hardware - tipos - Estimación del uso de energía del proceso en PC(x86)
tipos de procesos sistemas operativos (5)
En Linux, pruebe la utilidad PowerTOP . Sin embargo, en lugar de calcular valores absolutos en julios, se enfoca en el uso de energía relativa entre varios componentes del sistema.
Estoy tratando de encontrar una heurística para estimar cuánta energía (por ejemplo, en julios) que un proceso o un hilo ha consumido entre dos puntos de tiempo. Esto está en una PC (Linux / x86), no móvil, por lo que las estadísticas se utilizarán para comparar la eficiencia energética relativa de los cálculos que toman un tiempo similar al del reloj de pared.
La idea es recopilar o muestrear estadísticas de hardware como el contador de ciclos, estados de p / c o frecuencia dinámica, accesos de bus, etc., y crear una fórmula razonable para el uso de energía entre las mediciones. Lo que pregunto es si esto es posible, y cómo podría verse esta fórmula.
Algunos desafíos que vienen a la mente: 1) La contabilidad adecuada para los cambios de contexto a otros procesos (o subprocesos).
2) Contabilizar adecuadamente la energía utilizada fuera de la CPU. Si asumimos una E / S despreciable, eso significa principalmente RAM. ¿Cómo afecta la cantidad de asignación y / o el patrón de acceso al uso de energía? (Es decir, asumiendo que tengo una manera de medir la asignación de memoria dinámica para comenzar, por ejemplo, con un asignador modificado).
3) El uso del tiempo de CPU como una estimación se limita a la contabilidad de grano grueso y frecuente, solo al uso de energía de la CPU, y asume frecuencias de reloj fijas. Incluye, pero no cuenta bien, el tiempo dedicado a esperar en la memoria RAM.
Es posible que pueda obtener una cifra para el consumo de energía de su proceso, pero solo será correcto de forma aislada. Por ejemplo, si ejecutó dos procesos en paralelo, es poco probable que se ajuste a una línea recta con buena precisión.
Esto es lo suficientemente difícil como para hacerlo en plataformas integradas con un desglose completo de cada riel de voltaje, y mucho menos en una PC donde su único punto de datos es el vataje del tomacorriente. Cosas que necesitarás medir y tener en cuenta:
- La carga base no es tan baja. Un sistema inactivo durante muchos segundos estará en un estado de suspensión más profundo que uno que no lo esté. ¿Mides el sueño ''profundo'' o simplemente inactivo? ¿Cómo sabes lo que estás midiendo?
- La carga no es siempre lineal. Voltaje variable: algunos componentes desplazan el voltaje hacia arriba / abajo según la carga y la frecuencia. Temperatura: puede ir en cualquier dirección en estos días (no solo en el escape térmico).
- Las fuentes de alimentación no son la misma eficiencia en todas las cargas. Si está midiendo la potencia de salida, debe tener esto en cuenta. Por ejemplo, podría ser 50% eficiente por debajo de 100W, 90% de 100-300W y hasta 80% 300W +.
- Los procesos adicionales no necesariamente se agregarán linealmente. Por ejemplo, una vez que DDR está fuera de inactividad, su carga base aumenta, pero los procesos adicionales no lo empeorarán. Esto es aún más impredecible con múltiples núcleos y frecuencias variables.
La forma básica de medirlo es la forma obvia: registrar el número de vatios en reposo, registrar el número de vatios en uso, restar. Puedes intentar ejecutar en un ciclo de trabajo del 50%, 25%, 75%, etc., para dibujar un gráfico bonito (lineal o de otro tipo). Esto mostrará cualquier no linealidad. Desafortunadamente la eficiencia de conversión frente a la carga tanto para el regulador de la CPU como para la PSU será la causa dominante. No hay mucho que puedas hacer para eliminar eso sin tener una versión de desarrollo de la placa base con la que juegas (es poco probable), o si tienes la suerte de tener una PSU con un gráfico de eficiencia frente a carga.
Sin embargo, es importante darse cuenta de que estos puntos de datos solo son correctos de forma aislada . Puede hacer un buen trabajo de modelar cómo se resumirán estas cosas en el sistema, pero tenga en cuenta que, en el mejor de los casos, solo es una buena aproximación. Piense que es equivalente a mirar un código C en busca de un códec de audio y estimar qué tan rápido se ejecutará. Puede obtener una buena idea general, pero espere ser extremadamente impreciso cuando se mide en la realidad.
Editar: expandirse un poco, ya que lo anterior no responde realmente cómo podría hacerlo.
Medición del consumo de energía: obtenga un medidor de vataje preciso. Como mencioné, a menos que tenga una manera de romper los rieles de voltaje individuales y medir la corriente, la única medición que puede hacer es en la toma de corriente. Alternativamente, si tiene acceso al estado de monitoreo de estado en la placa base y tiene un informe actual (amperios) (raro), eso le puede dar una buena precisión y tiempos de respuesta rápidos.
Entonces, mida la potencia base - elija cualquier situación que considere "base". Ejecute su prueba, y mida "pico". Resta, hecho. Sí, eso es bastante obvio. Si tiene algo donde la diferencia es tan pequeña que se pierde en el ruido, puede intentar medir el uso de la energía con el tiempo (por ejemplo, kWh). Intente medir una hora al ralentí frente a una hora con su proceso ejecutándose de manera plana y observe la diferencia total de energía. Repita de manera similar para todos los tipos de pruebas que desee realizar.
Obtendrá notables diferencias en vataje para usuarios pesados de CPU, DDR y GPU. Es posible que note la diferencia entre los algoritmos restringidos L1 frente a L2 frente a DDR (DDR usa mucha más potencia), si se tiene en cuenta que los algoritmos restringidos L1 / L2 se ejecutan más rápido. Debe tener en cuenta la energía utilizada por "tarea". No potencia continua. Probablemente no notará el acceso al disco duro (en realidad es solo un vatio o dos y se pierde en el ruido en una PC) que no sea el impacto de rendimiento. Un punto de datos adicional que vale la pena registrar es la cantidad de carga "base" que aumenta si tiene una tarea que se despierta cada 100 ms aproximadamente, utilizando el 1% de la CPU. Eso es básicamente lo que parece la inactividad sin sueño profundo. (Esto es un hack y 100ms es una conjetura)
Tenga en cuenta que el 1% puede ser diferente del 1% en otro momento, si tiene una CPU con políticas de cambio de frecuencia habilitadas.
Una nota final importante : es la energía, por supuesto , lo que debes medir, tal como lo hiciste en la pregunta. Es muy fácil cometer el error de comparar el consumo de energía de una tarea con respecto a otra y concluir que una es más costosa ... si se olvida del rendimiento relativo de ellas. Esto siempre sucede con los periodistas de tecnología mala que comparan el disco duro con el SSD, por ejemplo.
En plataformas integradas con monitoreo de corriente a través de muchos rieles, he realizado mediciones hasta nanojulios por instrucción. Todavía es difícil explicar el uso de energía por subproceso / proceso porque hay muchas cargas compartidas por muchas tareas, y puede aumentar / disminuir fuera de su intervalo de tiempo. En una PC, no estoy seguro de que logres tener un grano tan fino como eso :)
Este es el tema de la investigación en curso. Así que no esperes ninguna respuesta definitiva. Algunas publicaciones que te pueden interesar son, por ejemplo:
Chunling Hu, Daniel A. Jiménez y Ulrich Kremer, Caracterización eficiente del comportamiento del programa , Actas de la Conferencia Internacional de 2007 sobre arquitecturas y compiladores integrados de alto rendimiento (HiPEAC-2007), páginas 183–197, enero de 2007. ( pdf )
Adam Lewis, Soumik Ghosh y N.-F. Tzeng, Estimación del consumo de energía en tiempo de ejecución en función de la carga de trabajo en sistemas de servidor , USENIX 2008, Taller sobre computación y sistemas conscientes de la energía ( html pdf )
Pero puedes encontrar fácilmente muchos más usando Google Scholar y Citeseer .
Las Pautas de software de eficiencia energética de Intel tienen una gran cantidad de información útil, que incluye un enlace a su propio kit de herramientas de energía de aplicaciones. que incluye...
2) Herramienta de aplicación de gráficos de energía
La Application Energy Graphing Tool es una herramienta interactiva que puede medir el consumo de energía de la batería de una aplicación a lo largo del tiempo y registrar y graficar los datos resultantes.
Los desarrolladores de aplicaciones pueden usar la herramienta Application Graphing Tool para ayudarles a diseñar aplicaciones que conserven la energía de la batería en los sistemas de computadoras móviles.
AMD uProf : proporciona un proceso por sistema operativo con unidades de energía absoluta (mJ) por proceso.
Intel Platform Power Estimation Tool (IPPET) : prototipo con unidades de energía absoluta (mWh) por proceso.
Intel SocWatch (parte de Intel System Studio): tiene muchas métricas de bajo nivel, pero sin unidades de energía absoluta (mWh / mJ) por proceso.