2012-06-19 11 views
7

Extiendo el kernel de Linux para controlar la frecuencia de algunos subprocesos: cuando se programan en un núcleo (¡cualquier núcleo!), La frecuencia del núcleo se cambia escribiendo la p correcta -establezca el registro IA32_PERF_CTL, como se sugiere en el manual de Intel. Pero cuando se programan diferentes subprocesos con diferentes frecuencias "personalizadas", parece que el rendimiento de todo el subproceso aumenta, como si todos los núcleos se ejecutaran a la frecuencia máxima establecida.Escalamiento de frecuencia de Intel MSR por subproceso

Hice muchas pruebas y mediciones en diferentes condiciones de carga y configuración, pero el resultado es el mismo. Después de algunas pruebas con CPUFreq (sin aplicación en ejecución, configuré diferentes frecuencias en cada núcleo, y finalmente las frecuencias medidas, con cpufreq-info -w, eran iguales), me pregunto si los núcleos de CPU pueden realmente ejecutar en diferente , frecuencias independientes, o si hay políticas o restricciones de hardware.

Finalmente, ¿existe un modelo de CPU que haga factible esta escalada de frecuencia fina?

La CPU que estoy usando es Intel Core i5 750

+2

Los núcleos de CPU no pueden funcionar a diferentes voltajes, por lo que esto limita la capacidad de establecer diferentes pares de frecuencia/voltaje. –

+0

En general, cada generación de Intel brinda más separación entre núcleos y permite un control más detallado sobre estas cosas. – ugoren

Respuesta

4

No puede controlar las frecuencias de núcleo individuales para núcleos activos. Sin embargo, puede controlar las frecuencias de todos los núcleos activos para que sean iguales. Las razones están en las respuestas anteriores: todos los núcleos están en el mismo plano de voltaje activo. Afortunadamente, los procesadores Haswell de nueva generación permitirán controlar cada núcleo por separado.

2

cpufreq-info mostrará información acerca de qué núcleos tienen que ser sincrónicos en sus estados P:

[[email protected] ~]# cpufreq-info 
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009 
Report errors and bugs to [email protected], please. 
analyzing CPU 0: 
    driver: acpi-cpufreq 
    CPUs which run at the same hardware frequency: 0 1 <---- THIS 
    CPUs which need to have their frequency coordinated by software: 0 <--- and THIS 
    maximum transition latency: 10.0 us. 

Al menos debido eso, recomendaría ir a través de las interfaces de cpufreq en lugar de establecer directamente los registros, así como también hacer que se ejecute en CPU que no sean de Intel, que podrían tener requisitos poco comunes.

También compruebe cómo hacer que los hilos del kernel se adhieran a un núcleo específico, para evitar el cambio inesperado, si no lo hizo ya.

+0

¡Gracias a todos por las respuestas! Ahora tengo la imagen general. – user1466329

+0

¿Alguien ha intentado esto con Haswell? Porque no tengo una máquina con esa arquitectura, y me preguntaba si ahora es posible hacerlo; en caso de que lo hiciera, lo intentaría de nuevo. En segundo lugar, no creo que pueda pasar por cpufreq, ya que estoy trabajando a nivel de programador. Para dar una idea general del proyecto en el que estoy trabajando, finalmente está destinado a obtener la programación de recursos consciente de los objetivos y el estado: por lo tanto, no puedo dejar a nadie la decisión. – user1466329

+0

La idea de establecer la afinidad central, sin embargo, tiene mucho sentido. De todos modos, también debería entender la granularidad de tiempo de la configuración de frecuencia. – user1466329

3

¡Creo que te estás perdiendo una gran parte de la imagen!

Lectura en dominios de potencia y relojes. Todos los núcleos de procesador dentro de un dominio se ejecutan en el mismo estado P (es decir, la misma frecuencia y voltaje). El estado P en el que se ejecutarán todos los núcleos en ese dominio siempre será el estado P del núcleo que solicita el estado P más alto en ese dominio. Los MSR no reflejan esto en absoluto, ni tampoco las interfaces que expone el kernel.

Anandtech tiene un buen artículo sobre esto: http://www.anandtech.com/show/2658/2

"Todo esto es muy similar a Phenom de AMD, pero donde los dos difieren es en la forma en que manejan la administración de energía Mientras AMD permitirá a los núcleos individuales a petición. diferentes velocidades de reloj, Nehalem intenta ejecutar todos sus núcleos en la misma frecuencia; si un núcleo está inactivo, entonces es simplemente controlado por alimentación y el núcleo está efectivamente desactivado ".

No he conectado un medidor de potencia hasta SB/IB, pero supongo que el comportamiento es el mismo.

0

¡Quiero agradecer a todos por la contribución! Investigando más, encontré otros detalles que comparto con la comunidad.

Como se sugirió, Nehalem coloca todos los núcleos en un solo dominio de reloj, de modo que la frecuencia máxima establecida entre todos los núcleos se aplica a todos ellos; algunas herramientas pueden mostrar diferentes frecuencias en núcleos inactivos, pero es suficiente ejecutar cualquier aplicación para aumentar la frecuencia al máximo. Esto, según mis pruebas, también se aplica a Sandy Bridge, donde los núcleos y las divisiones LLC residen todos en el mismo dominio de frecuencia/voltaje. Supongo que este comportamiento también ocurre con Ivy Bridge, ya que es solo una iteración 'marca'. En cambio, creo que Haswell coloca núcleos y sectores LLC en diferentes dominios singulares, lo que permite las frecuencias por núcleo. Esto también se anuncia en varias páginas como http://www.anandtech.com/show/8423/intel-xeon-e5-version-3-up-to-18-haswell-ep-cores-/4

Cuestiones relacionadas