Temporizador de eventos de alta precisión

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
temporizador de hardware utilizado en computadoras personales

El Temporizador de eventos de alta precisión (HPET) es un temporizador de hardware disponible en computadoras personales modernas compatibles con x86. En comparación con los tipos de temporizadores más antiguos disponibles en la arquitectura x86, HPET permite un procesamiento más eficiente de aplicaciones altamente sensibles al tiempo, como la reproducción multimedia y el cambio de tareas del sistema operativo. Fue desarrollado conjuntamente por Intel y Microsoft y se ha incorporado en los conjuntos de chips de PC desde 2005. Anteriormente Intel lo denominaba temporizador multimedia, pero se seleccionó el término HPET para evitar confusiones con los temporizadores multimedia de software introducidos en las extensiones multimedia para Windows 3.0.

Los sistemas operativos más antiguos que no admiten un dispositivo HPET de hardware solo pueden utilizar funciones de temporización más antiguas, como el temporizador de intervalos programable (PIT) o el reloj de tiempo real (RTC). Windows XP, cuando está equipado con la última capa de abstracción de hardware (HAL), también puede usar el contador de marca de tiempo (TSC) del procesador o el temporizador de administración de energía ACPI (ACPI PMTIMER), junto con el RTC para proporcionar funciones del sistema operativo. eso, en versiones posteriores de Windows, lo proporcionaría el hardware HPET. De manera confusa, estos sistemas Windows XP citan la palabra "HPET" conectividad en el administrador de controladores de dispositivos aunque el dispositivo Intel HPET no se esté utilizando.

Características

Un chip HPET consta de un contador ascendente (contador principal) de 64 bits que cuenta a una frecuencia de al menos 10 MHz y un conjunto de comparadores (al menos tres, hasta 256). Estos comparadores tienen un ancho de 32 o 64 bits. El HPET se programa a través de una ventana de E/S asignada en memoria que se puede descubrir a través de ACPI. El circuito HPET de las PC modernas está integrado en el chip Southbridge.

Cada comparador puede generar una interrupción cuando los bits menos significativos son iguales a los bits correspondientes del valor del contador principal de 64 bits. Los comparadores se pueden poner en modo de una sola vez o en modo periódico, con al menos un comparador soportando el modo periódico y todos ellos soportando el modo de una sola vez. En el modo de un solo disparo, el comparador dispara una interrupción una vez cuando el contador principal alcanza el valor almacenado en el registro del comparador, mientras que en el modo periódico las interrupciones se generan a intervalos específicos.

Los comparadores pueden ser controlados por el sistema operativo, p.e. para proporcionar un temporizador por CPU para programación o por aplicaciones.

Aplicaciones

HPET puede producir interrupciones periódicas a una resolución mucho más alta que RTC y a menudo se usa para sincronizar transmisiones multimedia, proporcionando una reproducción fluida y reduciendo la necesidad de usar otros cálculos de marca de tiempo, como una CPU basada en x86 RDTSC instrucción. Esto proporciona una mayor eficiencia, ya que la CPU no necesita desperdiciar ciclos para compensar la baja resolución de los temporizadores, y permite un uso más agresivo de los estados de suspensión, reduciendo el consumo de energía. Además de la demanda a nivel de aplicación de un reloj de alta precisión, existen beneficios a nivel del sistema operativo en el programador y a través de la disponibilidad de una base de reloj estable para sistemas multiprocesador.

Comparación con sus predecesores

HPET está destinado a complementar y reemplazar el temporizador de intervalo programable 8254 y la función de interrupción periódica del RTC. En comparación con estos circuitos temporizadores más antiguos, el HPET tiene una frecuencia más alta y contadores de 64 bits más anchos (aunque pueden funcionar en modo de 32 bits).

La especificación HPET no define la frecuencia del temporizador, solo requiere un mínimo de 10 MHz; la frecuencia real la proporciona al sistema operativo un registro de hardware que proporciona el número de femtosegundos por período (con un límite superior de 100000000 fs). Un valor popular es 14,318 MHz, 12 veces la frecuencia estándar 8254 de 1,19318 MHz.

Si bien 8254 y RTC pueden ponerse en un modo de una sola vez similar a HPET, el proceso de configuración es tan lento que su modo de una sola vez no se utiliza en la práctica para tareas que requieren precisión. Planificación. En cambio, 8254 y RTC se utilizan normalmente en modo periódico con un intervalo de tiempo muy pequeño. Por ejemplo, si una aplicación necesita realizar varias esperas cortas (algunos milisegundos, tal vez), es mejor tener un temporizador periódico funcionando constantemente con un período de 1 ms debido al alto costo de configuración de un temporizador de un solo uso 8254 o RTC. Esto provoca una interrupción cada milisegundo incluso si la aplicación necesita realizar el trabajo real con menos frecuencia. Con HPET, se pueden evitar las interrupciones adicionales, porque el costo de configuración de un temporizador de un solo disparo HPET es considerablemente menor.

Uso y compatibilidad

Un registro de arranque de Linux que muestra el interruptor de HPET a TSC como fuente de reloj del sistema

Los sistemas operativos diseñados antes de que existiera HPET no pueden usar HPET, por lo que usan otras funciones de temporizador. Los sistemas operativos más nuevos tienden a poder utilizar cualquiera de los dos. Algunos hardware tienen ambos. De hecho, la mayoría de los chips Southbridge actuales tienen instancias heredadas de PIT, PIC, controlador de interrupción programable avanzado (APIC) y dispositivos RTC incorporados en su silicio, independientemente de que sean utilizados por el sistema operativo, lo que ayuda a las PC muy modernas a ejecutar sistemas operativos más antiguos. .

Se sabe que los siguientes sistemas operativos no pueden utilizar HPET: Windows XP SP1 y versiones anteriores de Windows, kernels de Linux anteriores a 2.6.

Se sabe que los siguientes sistemas operativos pueden utilizar HPET: Windows XP SP3, Windows Server 2003 SP2, Windows Server 2008, Windows Server 2008 R2, Windows Vista, Windows 7, versiones basadas en x86 de OS X, sistemas operativos Linux que utilizan el kernel 2.6 (o posterior), FreeBSD y OpenSolaris.

El kernel de Linux también puede utilizar HPET como fuente de reloj. La documentación de Red Hat MRG versión 2 indica que TSC es la fuente de reloj preferida debido a su sobrecarga mucho menor, pero utiliza HPET como alternativa. Un punto de referencia en ese entorno para 10 millones de recuentos de eventos encontró que TSC tardó aproximadamente 0,6 segundos, HPET tardó un poco más de 12 segundos y ACPI Power Management Timer tardó alrededor de 24 segundos.

En 2019, se decidió incluir HPET en la lista negra en los kernels de Linux más nuevos cuando se ejecuta en algunas CPU Intel (Coffee Lake) debido a su inestabilidad.

Problemas

HPET es un temporizador que funciona continuamente y cuenta hacia arriba, no un dispositivo de un solo disparo que cuenta hacia atrás hasta cero, provoca una interrupción y luego se detiene. Dado que HPET compara el valor real del temporizador y el valor objetivo programado en igualdad en lugar de "mayor o igual", se pueden perder interrupciones si el tiempo objetivo ya ha pasado cuando el valor del comparador se escribe en el chip. registro. En tal caso, no sólo se pierde la interrupción prevista, sino que en realidad se establece en un futuro lejano (alrededor de 232 o 264 conteos). En presencia de interrupciones no enmascarables (como una interrupción de administración del sistema (SMI)) que no tienen un límite superior estricto en su tiempo de ejecución, esta condición de carrera requiere volver a verificar el temporizador después de la configuración, lo que requiere mucho tiempo y es difícil. evitar por completo. Las dificultades se agravan si el valor del comparador no se sincroniza inmediatamente con el temporizador, sino que se retrasa uno o dos tics, como hacen algunos conjuntos de chips.

Además de mencionar la condición de carrera discutida anteriormente, un documento de VMware también enumera algunos otros inconvenientes: "La especificación no requiere que el temporizador sea particularmente fino, tenga una deriva baja o sea rápido de leer". Algunas implementaciones típicas ejecutan el contador a aproximadamente 18 MHz y requieren aproximadamente la misma cantidad de tiempo (1 a 2 μs) para leer el HPET que con el temporizador ACPI. Se han observado implementaciones en las que el registro del período se desvía en 800 partes por millón o más."

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save