Este artículo necesita citas adicionales para su verificación . ( febrero de 2014 ) |
El temporizador de eventos de alta precisión ( HPET ) es un temporizador de hardware disponible en los ordenadores personales modernos 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 a los chipsets de PC desde 2005. Anteriormente denominado por Intel como temporizador multimedia , [1] el término HPET fue seleccionado para evitar confusiones con los temporizadores multimedia de software introducidos en las extensiones multimedia de Windows 3.0 . [2]
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 utilizar el contador de sello 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 que, en versiones posteriores de Windows, proporcionaría el hardware HPET. Resulta confuso que dichos sistemas Windows XP indiquen la conectividad "HPET" en el administrador de controladores de dispositivos, aunque no se esté utilizando el dispositivo Intel HPET.
Un chip HPET consta de un contador ascendente de 64 bits (contador principal) 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 mapeada en memoria que se puede descubrir a través de ACPI . El circuito HPET en las PC modernas está integrado en el chip de puente sur . [a]
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 pueden ponerse en modo de un solo disparo o en modo periódico, con al menos un comparador que admita el modo periódico y todos ellos que admitan el modo de un solo disparo. 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 especificados.
Los comparadores pueden ser controlados por el sistema operativo, por ejemplo, para proporcionar un temporizador por CPU para la programación, o por aplicaciones.
El HPET puede producir interrupciones periódicas a una resolución mucho mayor que el RTC y se utiliza a menudo para sincronizar transmisiones multimedia, lo que proporciona una reproducción fluida y reduce la necesidad de utilizar otros cálculos de marca de tiempo, como las instrucciones de una CPU basada en x86RDTSC
. Esto proporciona una eficiencia mejorada, 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 , lo que reduce 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 de sistema operativo en el programador y a través de la disponibilidad de una base de reloj estable para sistemas multiprocesador . [3]
Esta sección necesita ser ampliada con: comparar con temporizador LAPIC, ACPI PM, etc. Puedes ayudar agregando más información. ( Febrero de 2014 ) |
El HPET está pensado para 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 amplios (aunque pueden funcionar en modo de 32 bits). [1]
La especificación HPET no define la frecuencia del temporizador, solo requiere un mínimo de 10 MHz; la frecuencia real es proporcionada al sistema operativo por un registro de hardware que proporciona la cantidad de femtosegundos por período (con un límite superior de100 000 000 fs ). Un valor popular es 14,3 18 MHz, 12 veces la frecuencia estándar 8254 de 1,193 18 MHz.
Aunque el 8254 y el RTC se pueden poner en un modo de un solo disparo similar al HPET, el proceso de configuración es tan lento que su modo de un solo disparo no se utiliza en la práctica para tareas que requieren una programación precisa. [4] En cambio, el 8254 y el 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, quizás), es mejor tener un temporizador periódico que funcione constantemente con un período de 1 ms debido al alto costo de configuración de un temporizador de un solo disparo 8254 o RTC. Esto provoca una interrupción en cada milisegundo incluso si la aplicación necesita hacer 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.
Los sistemas operativos diseñados antes de que existiera HPET no pueden utilizar HPET, por lo que utilizan otras funciones de temporizador. Los sistemas operativos más nuevos tienden a poder utilizar cualquiera de los dos. Algunos equipos tienen ambos. De hecho, la mayoría de los chips Southbridge actuales tienen instancias compatibles con dispositivos PIT, PIC, APIC ( Advanced Programmable Interrupt Controller ) y RTC incorporados en su silicio, independientemente de que el sistema operativo los utilice o no, lo que ayuda a que las PC muy modernas ejecuten sistemas operativos más antiguos.
Se sabe que los siguientes sistemas operativos no pueden utilizar HPET: Windows XP SP1, [b] y versiones anteriores de Windows , kernels de Linux anteriores a 2.6. [c]
Se sabe que los siguientes sistemas operativos pueden utilizar HPET: Windows XP SP3, [d] 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 [5] y OpenSolaris . [ cita requerida ]
El núcleo de Linux también puede utilizar HPET como fuente de reloj. La documentación de la versión 2 de Red Hat MRG indica que TSC es la fuente de reloj preferida debido a su sobrecarga mucho menor, pero utiliza HPET como alternativa. Una prueba comparativa en ese entorno para 10 millones de recuentos de eventos determinó que TSC tardaba aproximadamente 0,6 segundos, HPET tardaba un poco más de 12 segundos y ACPI Power Management Timer tardaba alrededor de 24 segundos. [6]
En 2019, se decidió incluir en la lista negra HPET en los kernels de Linux más nuevos cuando se ejecuta en algunas CPU Intel ( Coffee Lake ) debido a su inestabilidad. [7]
El HPET es un temporizador que funciona continuamente y cuenta hacia arriba, no un dispositivo de un solo disparo que cuenta hacia abajo hasta cero, provoca una interrupción y luego se detiene. Dado que el HPET compara el valor real del temporizador y el valor objetivo programado en términos de igualdad en lugar de "mayor o igual", las interrupciones pueden perderse si el tiempo objetivo ya ha pasado cuando el valor del comparador se escribe en el registro del chip. [8] En tal caso, no solo se pierde la interrupción prevista, sino que en realidad se establece en un futuro lejano (aproximadamente 2 32 o 2 64 conteos). [9] 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 nuevas comprobaciones del temporizador que consumen mucho tiempo después de la configuración y es difícil de evitar por completo. Las dificultades se agravan si el valor del comparador no se sincroniza con el temporizador inmediatamente, sino que se retrasa uno o dos ticks, como hacen algunos chipsets. [8]
Además de mencionar la condición de carrera que se ha comentado anteriormente, un documento de VMware también enumera otras desventajas: "La especificación no exige que el temporizador sea especialmente granular, que tenga poca desviación o que sea rápido de leer. Algunas implementaciones típicas hacen funcionar el contador a unos 18 MHz y requieren aproximadamente la misma cantidad de tiempo (1–2 μs) para leer el HPET que con el temporizador ACPI. Se han observado implementaciones en las que el registro de período tiene un desfase de 800 partes por millón o más". [9]