Таймер событий высокой точности - High Precision Event Timer

High Precision Event Timer ( HPET ) представляет собой аппаратный таймер используется в персональных компьютерах . Он был разработан совместно Intel и Microsoft и был включен в наборы микросхем для ПК с 2005 года. Термин HPET, ранее называвшийся Intel как мультимедийный таймер , был выбран во избежание путаницы с программными мультимедийными таймерами, представленными в расширениях MultiMedia для Windows 3.0 .

Старые операционные системы , не поддерживающие аппаратное устройство HPET, могут использовать только старые средства синхронизации, такие как программируемый интервальный таймер (PIT) или часы реального времени (RTC). Windows XP , оснащенная новейшим уровнем аппаратной абстракции (HAL), также может использовать счетчик отметок времени процессора (TSC) или таймер управления питанием ACPI (ACPI PMTIMER) вместе с RTC для обеспечения функций операционной системы, которые в более поздние версии Windows предоставляются оборудованием HPET. Как ни странно, такие системы Windows XP указывают возможность подключения «HPET» в диспетчере драйверов устройств, даже если устройство Intel HPET не используется.

Функции

Микросхема HPET состоит из 64-битного восходящего счетчика (основного счетчика), считающего с частотой не менее 10 МГц, и набора (от трех до 256) компараторов. Эти компараторы бывают 32- или 64-разрядными. HPET программируется через окно ввода-вывода с отображением памяти, которое можно обнаружить через расширенный интерфейс конфигурации и питания (ACPI). Схема HPET в современных ПК интегрирована в микросхему южного моста .

Каждый компаратор может генерировать прерывание, когда младшие биты равны соответствующим битам 64-битного значения основного счетчика. Компараторы могут быть переведены в однократный режим или периодический режим, при этом по крайней мере один компаратор поддерживает периодический режим, и все они поддерживают однократный режим. В однократном режиме компаратор генерирует прерывание один раз, когда основной счетчик достигает значения, хранящегося в регистре компаратора, в то время как в периодическом режиме прерывания генерируются с заданными интервалами.

Компараторы могут управляться операционной системой, например, для обеспечения одного таймера на каждый ЦП для планирования, или приложениями.

Приложения

HPET может производить периодические прерывания на значительно более высоком разрешении , чем RTC и часто используется для синхронизации мультимедийных потоков, обеспечивая плавное воспроизведение и уменьшая потребность в использовании других расчетов временных меток , таких как X86 на основе процессора «с RDTSCинструкцией.

Сравнение с предшественниками

HPET предназначен для дополнения и замены программируемого интервального таймера 8254 и функции периодического прерывания RTC. По сравнению с этими более старыми схемами таймера, HPET имеет более высокую частоту и более широкие 64-битные счетчики (хотя они могут работать в 32-битном режиме).

Спецификация HPET не определяет частоту таймера, требуется только минимум 10 МГц; фактическая частота предоставляется операционной системе аппаратным регистром, указывающим количество фемтосекунд за период (с верхней границей100 000 000  фс ). Популярное значение составляет 14,3 18  МГц, что в 12 раз больше стандартной частоты 8254, равной 1,193 18  МГц.

В то время как 8254 и RTC могут быть переведены в одноразовый режим, подобный HPET, процесс настройки настолько медленный, что их одноразовый режим не используется на практике для задач, требующих точного планирования. Вместо этого 8254 и RTC обычно используются в периодическом режиме с очень малым временным интервалом. Например, если приложению необходимо выполнить несколько коротких (возможно, несколько миллисекунд) ожиданий, лучше иметь периодический таймер, работающий постоянно с периодом 1 мс, из-за высокой стоимости установки таймера однократного действия 8254 или RTC. Это вызывает прерывание каждую миллисекунду, даже если приложение должно выполнять реальную работу реже. Благодаря HPET можно избежать дополнительных прерываний, поскольку стоимость настройки однократного таймера HPET значительно меньше.

Использование и совместимость

Image
Linux журнал загрузки , показывающий переход от HPET к TSC как системы clocksource

Операционные системы, разработанные до появления HPET, не могут использовать HPET, поэтому они используют другие средства таймера. Более новые операционные системы, как правило, могут использовать и то, и другое. Некоторое оборудование имеет и то, и другое. Действительно, большинство современных микросхем южного моста имеют устаревшие экземпляры устройств PIT, PIC, Advanced Programmable Interrupt Controller (APIC) и RTC, встроенные в их кремний, независимо от того, используются они операционной системой или нет, что помогает очень современным ПК запускать старые операционные системы. .

Известно, что следующие операционные системы не могут использовать HPET: Windows XP SP1 и более ранние версии Windows , ядра Linux до 2.6.

Известно, что следующие операционные системы могут использовать HPET: Windows XP SP3, Windows Server 2003 SP2 , Windows Server 2008 , Windows Server 2008 R2 , Windows Vista , Windows 7 , версии OS X на базе x86 , операционные системы Linux с использованием версии 2.6. ядро (или новее), FreeBSD и OpenSolaris .

Linux ядро также может использовать HPET в качестве источника тактовых импульсов . В документации Red Hat MRG версии 2 указано, что TSC является предпочтительным источником синхронизации из-за его гораздо меньших накладных расходов, но он использует HPET в качестве запасного варианта. Тест на 10 миллионов событий в этой среде показал, что TSC занял около 0,6 секунды, HPET - чуть более 12 секунд, а таймер управления питанием ACPI - около 24 секунд.

В 2019 году было решено внести HPET в черный список в новых ядрах Linux при работе на некоторых процессорах Intel ( Coffee Lake ) из-за его нестабильности.

Проблемы

HPET - это непрерывно работающий таймер, который ведет счет вверх, а не одноразовое устройство, которое ведет обратный отсчет до нуля, вызывает одно прерывание и затем останавливается. Поскольку HPET сравнивает фактическое значение таймера и запрограммированное целевое значение на равенство, а не на «больше или равно», прерывания могут быть пропущены, если целевое время уже прошло, когда значение компаратора записано в регистр микросхемы. В таком случае запланированное прерывание не только пропущено, но и фактически установлено далеко в будущее (около 2 32 или 2 64 отсчета). При наличии немаскированных прерываний (таких как прерывание системного управления (SMI)), у которых нет жесткого верхнего предела времени их выполнения, это состояние гонки требует длительных повторных проверок таймера после настройки и является трудным полностью избежать. Сложности усугубляются, если значение компаратора не синхронизируется с таймером сразу, а задерживается на один или два тика, как это делают некоторые чипсеты.

Помимо упоминания обсуждаемого выше состояния гонки, документ VMware также перечисляет некоторые другие недостатки: «Спецификация не требует, чтобы таймер был особенно мелкозернистым, имел низкий дрейф или быстрое считывание. Некоторые типичные реализации запускают счетчик на около 18 МГц и для считывания HPET требуется примерно такое же количество времени (1-2 мкс), что и для таймера ACPI. Наблюдались реализации, в которых регистр периода отключался на 800 частей на миллион или более ».

Примечания

использованная литература