Как ускорить компьютер в играх? отключите одну настройку

Проблемы

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

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

High Precision Event Timer (HPET)

Explanation

Deferred procedure calls (DPC(s) Latency) (usually in bios) allow programs to queue actions to be done quickly in the processor scheduler, and they hang the whole computer until they get processed.

For example, drawing a video frame on a screen needs to be done as soon as the data is ready and the frame time is reached. This is all done in fractions of a second and isn’t noticed by many people but actually effects the following…

  • When you click the mouse till the action actually happens on the screen.

  • Where the network data tells your PC they’re location and when it actually happens visually which can be inaccurate.

  • What your monitor is showing you isn’t really happening in real time, hence leading shots in older games. Same thing but in a different way.

Disabling HPET allows an unrestricted input output to occur and results in a very raw and extremely responsive connection between you and your machine. It also removes a ton of micro-stuttering and screen tearing.

1000us = 1ms

HPET ON: between 100-150us delay

HPET OFF: between 5-15us delay

3-4 frames per second loss, single card with HPET OFF, chance of stuttering decreased accordingly.

Even though it doesn’t seem like much, but imagine every action and each PC component is effected by that same 100-150us delay, It can add up to MANY milliseconds and significant performance loss. The end result is, to higher end players, another step forward is crispier and snappier inputs and actions across the board.

*Some motherboards do not have an HPET option. See Maximizing Windows Timer Resolution below.

Wikipedia’s Explanation

HPET is a continuously running timer that counts upward, not a one-shot device that counts down to zero, causes one interrupt and then stops. Since HPET compares the actual timer value and the programmed target value on equality rather than «greater or equal», interrupts can be missed if the target time has already passed when the comparator value is written into the chip’s register. In the presence of non-maskable interrupts (such as System Management Interrupts) that don’t have a hard upper bound on their execution time, this race condition requires time-consuming re-checks of the timer after setup and is hard to avoid completely. The difficulties are exacerbated if the comparator value is not synchronized with the timer immediately, but delayed by one or two ticks, as some chipsets do.

A users experience

«A guy on another forum claimed that by disabling it, his DPC latency plummeted and his gaming performance improved; most notably the microstuttering.

So I tried it myself, and the difference to my astonishment, was very noticeable. First off, my DPC latency dropped big time. Not that it was high to begin with, but now it hovers below 10 for the most part.

Second, I noticed that general windows performance felt snappier. I know I’m not imagining things, because like many, I scrutinize my system so I’m sensitive to even minute changes in performance.

And last but not least, gaming performance is definitely smoother. Anyone with SLi will tell you that occassionally when playing a game, you experience a bit of lag or stuttering for no apparent reason whatsoever. Most people attribute these minor discrepancies to SLi, but what if it’s something else? Because I can tell you, that my overall gaming experience has improved since turning HPET off.

Запись зависшей проблемы с синим экраном Win10 на компьютере AMD из-за устаревшего драйвера высокоточного таймера событий (HPET)

y http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>le=»margin-bottom:5px;»>Теги:  IRQL NOT LESS OR EQUAL  Синий экран  KMODE EXCEPTION NOT HANDLED  Сбой  HPET (высокоточный таймер событий)

В последнее время модели AMD часто зависают и синий экран.Характеристики: условия высокой нагрузки, такие как игры, компьютер не имеет проблем; после определенного периода бездействия компьютер синий экран или сбои, мышь и клавиатура не реагируют, все интерфейсы зависают, и вы можете перезапустить, только нажав кнопку питания. Все несохраненные данные теряются.

В последнее время появилось два типа кодов синих экранов: один — IRQL NOT LESS OR EQUAL. Драйвер использует неверный адрес памяти. Второй тип — KMODE_EXCEPTION_NOT_HANDLED. В основном это происходит из-за устаревших или поврежденных файлов драйверов устройств.

Решение: Во-первых, не проблема с установкой драйверов периферийных устройств. Недавно был обновлен драйвер видеокарты. Может ли это быть основным драйвером системных компонентов? Кроме того, недавно было недавно установлено собственное программное обеспечение удаленного доступа Telecom. Будет ли оно несовместимо с системой Win10? (Из-за несовместимости с системой установщик телеком уже напомнил мне перейти на Win7, но я не могу этого сделать)

Вот решение

Узнайте способ поделиться с вами, во-первых, отключите обязательную подпись драйвера, чтобы решить некоторые проблемы с программным драйвером

Если синий экран смерти все еще появляется, это проблема основного драйвера, затем загрузите программное обеспечение для обновления драйвера Driver Reviver, обновите несколько устаревших драйверов, обратите особое внимание на компонент HPET (High Precision Event Timer),

Я никогда не думал, что это проблема HPET. Этот очень важный системный компонент принадлежит набору микросхем южного моста. Я лично предполагаю, что он несовместим с последней версией драйвера видеокарты AMD, что также в определенной степени влияет на производительность чтения и записи SSD, что приводит к синему экрану смерти в режиме ожидания. В Интернете появляются спорадические сообщения

Но до сих пор есть предположения, почему нет синего экрана смерти при высокой нагрузке видеокарты? Еще нужно подумать.

Интеллектуальная рекомендация

ReactiveX Я только что закончил проект OC, который взял на себя недавно. После тщательного рассмотрения я решил использовать Swift из следующего проекта (Swift, который я изучил так долго, не использо…

Пакет данных мобильного приложения Fiddler advanced usage-grab https://www.cnblogs.com/wushuaishuai/p/9300262.html https://blog.csdn.net/u012808234/article/details/52767470(подробно) https://blog.csdn…

JMS (самая стабильная и последняя версия Spring-jms, интегрированная со средой Spring, — 5.1.3)** ПО промежуточного слоя для сообщений: ПО промежуточного слоя для сообщений использует эффективный и на…

 …

вперед отjackiehffПодробное описание Java BigDecimal 1. Введение Заимствуя слова из книги «Эффективная Java», основные цели проектирования типов float и double связаны с научными и инженер…

Вам также может понравиться

Вот в основном узел для удаления замены изменения клона и другие операции Создать узел Вставьте узел       Удалить узел Копировать узел Замена узла Узел посылки Операция атрибута Устано…

Это ключевое слово должно быть помещено в нестатический метод Это ключевое слово представляет собой, основное использование в программе имеет следующие аспекты: Используйте это ключевое слово для ссыл…

1. Регулярное выражение: мощный инструмент для сопоставления с образцом в строках. используется для проверки того, содержит ли строка определенную подстроку, замены совпавшей подстроки или извлечения …

В жизненном цикле потока Java есть несколько состояний. В классе Thread есть тип перечисления State, который определяет несколько состояний потока соответственно: NEW: После того, как поток созда…

Нажмите на синее слово вам! Удобное следующее чтение. Если у вас есть помощь, пожалуйста, чувствуйте немного, спасибо ~ Недавно 0 фундаментов при изучении национального алгоритма, поэтому я разделяю н…

Функции аппаратного таймера

Задачей таймера является подсчет количества системных событий, связанных, например, с доступом к жесткому диску. В момент, когда предварительно установленное значение будет достигнуто, создается прерывание. Процессор приостанавливает текущую программу и реализует связанный с новой командой код.

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

Симптомом неправильной работы HPET (или полного его бездействия) являются, например, регулярные секундные зависания Windows. Компьютер со временем начинает медленно работать. В такой ситуации следует задуматься над изменением параметров указанной функции.

Problemer

HPET er en timer som kontinuerlig kjører som teller oppover, ikke en one-shot-enhet som teller ned til null, forårsaker ett avbrudd og deretter stopper. Siden HPET sammenligner den faktiske tidtakerverdien og den programmerte målverdien på likhet i stedet for «større eller lik», kan avbrudd savnes hvis måletiden allerede har passert når komparatorverdien skrives inn i brikkens register. I et slikt tilfelle savnes ikke bare den tiltenkte avbruddet, men settes faktisk langt inn i fremtiden (ca. 2 32 eller 2 64 tellinger). I nærvær av ikke-masker avbrudd (for eksempel en System Management Interrupt (SMI)) som ikke har en hard øvre grense på sin kjøring, denne rase tilstanden krever tidkrevende re-kontroller av timeren etter oppsett og er vanskelig å unngå helt. Vanskeligheter forverres hvis komparatorverdien ikke synkroniseres med timeren umiddelbart, men forsinkes med ett eller to flått, slik noen brikkesett gjør.

I tillegg til å nevne løpstilstanden som er diskutert ovenfor, viser et VMware -dokument også noen andre ulemper: «Spesifikasjonen krever ikke at timeren er spesielt finkornet, har lav drift eller er rask å lese. Noen typiske implementeringer kjører telleren kl. 18 MHz og krever omtrent like lang tid (1–2 μs) for å lese HPET som med ACPI -timeren. Det er observert implementeringer der perioderegisteret er slått av med 800 deler per million eller mer. »

поддержка QPC в версиях Windows

QPC был представлен в Windows 2000 и Windows XP и развивается для использования преимуществ улучшений в аппаратной платформе и процессорах. здесь описаны характеристики QPC в разных версиях Windows для поддержки программного обеспечения, работающего на этих Windows версиях.

Windows XP и Windows 2000

QPC доступен на Windows XP и Windows 2000 и хорошо работает в большинстве систем. Однако некоторые аппаратные системы BIOS не сообщают о характеристиках аппаратного процессора правильно (неразновидности TSC), а некоторые многоядерные или многопроцессорные системы используют процессоры с Тскс, которые не удалось синхронизировать между ядрами. системы с уязвимым встроенным по, на которых работают эти версии Windows могут не обеспечивать одинаковое QPC чтение на разных ядрах, если в качестве основы для QPC использовался таймер TSC.

Windows Vista и Windows Server 2008

на всех компьютерах, поставляемых с Windows Vista и Windows Server 2008, использовался счетчик платформы (таймер событий высокой точности (хпет)) или таймер управления питанием ACPI (таймер PM) в качестве базиса для QPC. Такие таймеры платформы имеют более высокую задержку доступа, чем таймер TSC, и являются общими для нескольких процессоров. Это ограничивает масштабируемость QPC , если она вызывается параллельно из нескольких процессоров.

Windows 7 и Windows Server 2008 R2

большинство компьютеров Windows 7 и Windows Server 2008 R2 имеют процессоры с постоянной ставкой тскс и используют эти счетчики в качестве базиса для QPC. Тскс — это аппаратные счетчики высокого разрешения для каждого процессора, доступ к которым можно получить с очень низкой задержкой и нагрузкой (в порядке 10 или 100 циклов машин, в зависимости от типа процессора). Windows 7 и Windows Server 2008 R2 используют тскс в качестве основания QPC в однопроцессорных системах, где операционная система (или низкоуровневая оболочка) может жестко синхронизировать отдельные тскс во всех процессорах во время инициализации системы. В таких системах стоимость чтения счетчика производительности значительно ниже по сравнению с системами, использующими счетчик платформы. Кроме того, не существует дополнительных затрат на параллельные вызовы и запросы пользовательского режима, которые позволяют избежать системных вызовов, что еще больше сокращает издержки. в системах, где таймер TSC не подходит для тимекипинг, Windows автоматически выбирает счетчик платформы (таймер хпет или ACPI PM timer) в качестве базиса для QPC.

Windows 8, Windows 8.1, Windows Server 2012 и Windows Server 2012 R2

Windows 8, Windows 8.1, Windows Server 2012 и Windows Server 2012 R2 используют тскс в качестве базиса для счетчика производительности. Алгоритм синхронизации TSC был значительно улучшен для лучшего размещения больших систем с большим количеством процессоров. Кроме того, добавлена поддержка нового точного API времени суток, что позволяет получать точные метки времени для часов стены с операционной системы. Дополнительные сведения см. в разделе жетсистемтимепреЦисеасфилетиме. на Windows RT компьютерных платформах счетчик производительности основывается на счетчике собственной платформы или системного счетчика, предоставляемого универсальным таймером Windows RT PC, если платформа настолько установлена.

Контроллер мертвой зоны, DTG

Как уже упоминалось в начале статьи, мертвая зона нужна для того, чтобы исключить протекание сквозного тока при одновременном переключении фронтов на прямом и инверсном выводах. Для того чтобы на выводы подавался не сигнал Ref, а сигнал с DTG, необходимо в регистре CHy_CNTRL1 задать поля SELO = nSELO = 3, при этом поля SELOE = nSELOE = 1.

Если смотреть осциллографом вывод канала таймера, то можно заметить, что при переключении с Ref на DTG сигнал, наблюдаемый на осциллографе, инвертировался. То есть, например, если при выводе Ref длительность логической «1» составляла 30%, то при выводе сигнала с DTG эти 30% занимает логический «0». Если при этом включить инвертирование в том же регистре CHy_CNTRL1 битами INV = nINV = 1, то сигнал на выходе вновь станет таким же, каким был только что при выводе Ref. Но необходимо учитывать, что перекрытие фронтов теперь получается совершенно иное

По этой причине для управления скважностью необходимо перестроить регистр CCR, а не использовать инверсии. Нагляднее эта ситуация представлена на рисунках 8 — 11(осциллограммы, полученные на 1986ВЕ92У).

Увеличить фото

Рисунок 8 — Сигналы Ref и DTG на выводах микроконтроллера 1986ВЕ92 при скважности 30%. (Смещение DTG в данных графиках гипертрофировано для наглядности). По рисунку 8 видно, что на выходе прямого и инверсного выхода каналов не случается ситуации, когда логическая «1» присутствует на обоих выводах

По рисунку 8 видно, что на выходе прямого и инверсного выхода каналов не случается ситуации, когда логическая «1» присутствует на обоих выводах.


Увеличить фото

Рисунок 9 — Сигналы Ref и DTG на выводах микроконтроллера 1986ВЕ92, включена инверсия выводов. (Происходит перекрытие зон логической «1»)

Для задания фазы сигнала DTG по сравнению с сигналом Ref необходимо выбрать частоту, в периодах которой будет задаваться сдвиг. Эта частота задается полем CHx_DTG.EDTS —  можно выбрать периоды частоты TIM_CLOCK или FDTS. Количество периодов задается полями регистра CHx_DTG.DTGx, далее это количество умножается множителем в поле CHx_DTG.DTG. 

На  рисунке 10 показан случай, когда в TIM_Clock задается и частота выходного сигнала задается, и сдвиг для DTG. Поэтому, если задать сдвиг, равный значению в регистре CCR2, то выходной сигнал пропадает. Это объясняется тем, что сдвиг становится равен длительности высокого уровня выходного сигнала. На рисунке 10: желтый сигнал — это сигнал Ref с канала 1 таймера CH1, а зеленый сигнал — это сигнал с DTG с выхода nCH2. Здесь учтено, что сигнал Ref, проходя блок DTG, инвертируется

А поскольку удобнее сравнивать сигналы одной полярности, то выбрана именно эта пара (качество сигнала не являлось критичным, поэтому расхождение задних фронтов не стоит принимать во внимание).


Увеличить фото

Рисунок 10 — Сигналы Ref и DTG в случае, когда частота выходного сигнала и сдвиг для DTG задаются в TIM_Clock

Рисунок 11 показывает, как влияют параметры CHx_DTG.DTGx и CHx_DTG.DTG на фазу сигнала DTG.


Увеличить фото

Рисунок 11 — Влияние параметров CHx_DTG.DTGx и CHx_DTG.DTG на фазу сигнала DTG

Фильтрация входного сигнала

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

Поскольку внешние импульсы могут быть заведены через входы каналов и вывод ETR, то у каждого из этих входов есть свои фильтры. Для канала таймера значение фильтра задается в регистре CHy_CNTRL битами CHFLTR. А для ETR в регистре BRKETR_CNTRL битами FILTER. Значение этих полей определяет, сколько тактов «частоты сэмплировния» должен продолжаться импульс на входе, чтобы считаться достоверным, а не помехой.

Под сэмплированием подразумевается производное понятие от SampleRate, скорости оцифровки сигнала. То есть частота сэмплирования — это частота измерения или взятия отсчетов.

Поскольку частота TIM_CLK часто настраивается в максимум для достижения наименьшей погрешности определения фронтов, то использовать ее для проверки длительности входного сигнала неудобно. Потребуется счетчик большой разрядности, чтобы замерять в тактах TIM_CLK относительно длинные входные импульсы. Для упрощения счета ввели производную от TIM_CLK частоту — FDTS, которая наравне с TIM_CLK используется для задания фильтрации (рисунок 3).


Увеличить фото

Рисунок 3 — Частота FDTS

Частота FDTS в периодах TIM_CLK задается в регистре CNTRL в битах DTS.  Максимальное значение DTS = 3 формирует частоту FDTS = TIM_CLK / 4. (В спецификации описанные биты называются FDTS. В данной статье, чтобы не возникла путаница, частота называется FDTS, а управляющие биты — DTS.)

Рисунок 4 показывает счет события по переднему фронту входного сигнала с фильтрацией.


Увеличить фото

Рисунок 4 — Счет события по переднему фронту входного сигнала с фильтрацией

ВАЖНО! В данном случае на рисунке 4 представлен гипотетический вариант, когда сэмплирование происходит в 2-х триггерах на частоте FDTS / 2. Ближайшее реально возможное значение CHFLTR = b0100 задает режим сэмплирования в 6 триггерах на частоте FDTS / 2, но этот вариант сложно отобразить на рисунке — он получится слишком длинным

Вариант же сэмплирования от TIM_CLK представлен в спецификации.

Рисунок 4 показывает, что:

  1. Вся работа в таймере происходит синхронно с фронтом сигнала TIM_CLK — красные линии.

  2. Источник частоты сэмплирования и фильтрация входного сигнала выбирается в битах CHFLTR регистра CHy_CNTRL. В данном случае используется сэмплирование от частоты FDTS.

  3. Частота сэмплирования FDTS задается в DTS регистра CNTRL.

  4. Событие счета выбирается в битах CHSEL регистра CHy_CNTRL. В примере выбран фронт сигнала, также может быть выбран спад.

  5. Захваченное событие, в данном случае это фронт, должно сохраняться заданное число триггеров фильтра, определяемого вместе с выбором частоты сэмплирования в п.2. Импульсы меньшей длительности никак не влияют на счет счетчика.

В случаем с использованием сигнала счета с ETR рисунок будет аналогичным, только выбор частоты сэмплирования и значения фильтра происходит в регистре BRKETR_CNTRL. Также для сигнала ETR есть дополнительный инвертор и предделитель внешней частоты. Предделитель используется тогда, когда используется внешний стабильный сигнал тактирования счета, и нет необходимости в фильтрации коротких импульсов.

Как сменить значение таймера и ускорить Windows

Сначала нужно определить, поддерживает ли ее в целом наша платформа. Здесь все просто – Windows Vista и новые версии поддерживают HPET, XP делает это частично, старые «окна» вообще не используют этот дополнительный таймер. В случае сомнений следует заглянуть в BIOS.

В дополнительных параметрах (Advanced) должна быть опция Configuration PCH или HPET Mode (название может немного отличаться в зависимости от версии BIOS и производителя материнской платы). Нам нужно найти High Precision Timer, ACPI HPET Table или похожее. Здесь можно ее включить или отключить.

Тем не менее Windows имеет тенденцию к перезаписи установленных параметров и использовать HPET, несмотря на настройки в Биосе. Поэтому после загрузки системы нужно открыть командную строку с правами администратора. Для ее вызова в Windows 10 кликните правой кнопкой на меню Пуск и выберите соответствующий пункт.

HPET сможете включить с помощью команды:

bcdedit /set useplatformclock true

Это единственный таймер, который активируется через Windows. Для его отключения используйте команду:

bcdedit /deletevalue useplatformclock

Тогда операционная система будет вынуждена использовать таймеры, встроенные непосредственно в процессор.

Важно: в этом обзоре речь не идет о том, что HPET должен быть полностью включен или выключен. Если вы столкнулись с проблемами зависания системы – медленно открываются программы или рывки в работе компьютера — то следует проверить, работает ли HPET, и попробовать разные настройки

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

Как ускорить компьютер в играх? Отключите одну настройку

Осмысленная настройка опции HPET в Windows 10 может значительно влиять на увеличение или уменьшение производительности вашей системы в играх и работе. Рассказываем, как проверить и оттюнить свой ПК.

Если количество кадров в секунду вас уже не устраивает, и посещают мысли, что пора бы менять видеокарту или процессор для улучшения производительности в играх — мысли эти, безусловно, правильные. Но для начала можно попробовать заняться оптимизацией настроек системы. Удивительно, но иногда они дают заметный результат. Хотя, тут, как это часто бывает в мире ПК, рецепт сработавший на одной конфигурации, стоит проверять затем на каждой конкретной — новый результат может оказаться немного иным.

Опытом настройки ПК и инструкциями мы делимся регулярно в нашем Telegram-канале. Сегодня расскажем про то, как удалось разогнать связку из процессора Intel Core i5-9600KF, материнской платы Asus Prime Z390-P и видеокарты Sapphire Pulse Radeon RX 5700 XT.

Впрочем, тут стоит ещё проверить, изначально, включена ли та самая настройка у вас или уже деактивирована по-умолчанию. Отдадим почести парням из PRO Hi-Tech, после видео которых мы решили провести этот эксперимент на своей системе и поделиться результатами с нашими читателями.

Режим ШИМ

Каждый канал таймера может работать в режиме ШИМ (широтно-импульстной модуляции), то есть генерировать импульсы заданной длины при заданном периоде. Для этого также используются регистры CCR и CCR1, которые разбивают диапазон значений CNT от 0 до ARR на необходимые интервалы. При совпадении значения CNT с одним из регистров CCR и CCR1 меняется уровень выходного сигнала Ref. Как именно изменяется сигнал Ref при совпадении регистров, настраивается в CHy_CNTRL полем OCCM.

Регистр CCR1 используется не всегда — он подключается опционально. Для использования CCR1 его необходимо включить в регистре CHy_CNTRL2 битом CCR1_EN.


Увеличить фото

Рисунок 6 — Структурная схема блока формирования ШИМ

Сигнал Ref — это внутренний сигнал, он может непосредственно подаваться на выводы канала таймера — прямой и инверсный — либо пропускаться сначала через блок DTG, а затем подаваться на выводы. При стандартных настройках на инверсный вывод автоматически подается сигнал, инвертированный относительно прямого вывода.

За подачу сигналов на прямой и инверсный выводы отвечает регистр CHy_CNTRL1, здесь для каждого из выводов своя настройка. Поле SELO определяет, какой сигнал подается на выход.

Таблица 2 

SELO выход GPIO
00 «0»
01 «1»
10 Ref
11 RefDTG

RefDTG — это сигнал Ref, прошедший через блок DTG. Помимо сигналов ШИМ может выводиться постоянный уровень «0» или «1».

Бит INV позволяет инвертировать выходной сигнал.

В блоке управления портами GPIO есть регистр OE (Output Enable), где каждый бит регистра задает режим работы порта — на вход или на выход (подробнее в статье Схемотехника портов GPIO). При настройке вывода в функцию Port (Func = 0) регистр OE задается программно. Если же функция назначает вывод для использования какому-то блоку периферии, например, UART, то значением OE управляет сам периферийный блок. В таком случае блок UART сам переключит вывод UART_TX в режим OUT, а UART_RX оставит с выключенным выходным драйвером.

При назначении вывода микроконтроллера на каналы таймера, состояние ОЕ данного вывода необходимо задать в регистре SELOE. То есть у каждого канала есть внутренний сигнал разрешения CHy_oe (nCHy_oe). Этот сигнал уходит в блок GPIO и задает, будет ли вывод канала являться входом или выходом. Если на CHy_oe подана «1», то канал работает как выход и выводит сигнал, определенный полем SELO. Если CHy_oe = 0, то вывод является входом. В случае работы в режиме захвата с этого вывода захватывается сигнал. В терминах спецификации это обозначено как — «канал на выход не работает».

Значение сигнала разрешения задается в поле SELOE. Кроме ручного выставления «0» и «1», доступен вариант, когда для сигнала разрешения используется сигнал Ref или RefDTG. В этом случае текущий уровень выбранного сигнала определяет, работает ли канал на выход или находится в Z состоянии.

Таблица 3

SELOE Ref / RefDTG выход GPIO
00 Z
01 SELO
10 Ref: 0 / 1 Z / SELO
11 RefDTG: 0 / 1 Z / SELO

Для инверсного вывода доступны такие же поля с префиксом n — nSELO, nINV, nSELOE.

Назначение входов ETR и BRK было описано в начале статьи — они служат для аварийной остановки ШИМ. Рисунок 7 показывает активные уровни ETR и BRK, при которых сбрасывается сигнал ШИМ. Необходимо отметить, что по умолчанию эти уровни инверсны друг относительно друга. Инверсию можно настроить в регистре BRKETR_CNTRL. Работу вывода ETR необходимо разрешить битом CHx_CNTRL.OCCE=1, для BRK дополнительных настроек не требуется.


Увеличить фото

Рисунок 7 — Уровни сигналов ETR и BRK

Как сменить значение таймера и ускорить Windows

Сначала нужно определить, поддерживает ли ее в целом наша платформа. Здесь все просто – Windows Vista и новые версии поддерживают HPET, XP делает это частично, старые «окна» вообще не используют этот дополнительный таймер. В случае сомнений следует заглянуть в BIOS.

В дополнительных параметрах (Advanced) должна быть опция Configuration PCH или HPET Mode (название может немного отличаться в зависимости от версии BIOS и производителя материнской платы). Нам нужно найти High Precision Timer, ACPI HPET Table или похожее. Здесь можно ее включить или отключить.

Тем не менее Windows имеет тенденцию к перезаписи установленных параметров и использовать HPET, несмотря на настройки в Биосе. Поэтому после загрузки системы нужно открыть командную строку с правами администратора. Для ее вызова в Windows 10 кликните правой кнопкой на меню Пуск и выберите соответствующий пункт.

HPET сможете включить с помощью команды:

bcdedit /set useplatformclock true

Это единственный таймер, который активируется через Windows. Для его отключения используйте команду:

bcdedit /deletevalue useplatformclock

Тогда операционная система будет вынуждена использовать таймеры, встроенные непосредственно в процессор.

Важно: в этом обзоре речь не идет о том, что HPET должен быть полностью включен или выключен. Если вы столкнулись с проблемами зависания системы – медленно открываются программы или рывки в работе компьютера — то следует проверить, работает ли HPET, и попробовать разные настройки

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

Данная опция присутствует практически во всех современных версиях BIOS и имеет, как правило, всего два состояния — 32 bit и 64 bit. Мало кто из числа пользователей в курсе о предназначении данной функции, а также о выставлении правильного ее значения на том или ином компьютере.

В данной статье мы дадим ответы на эти вопросы и вы узнаете дл чего нужна опция hpet mode в BIOS и какое значение ей нужно выставлять.

Using timers

One-shot mode

To enable one-shot mode:

// "time" is time in femtoseconds from now to interrupt
if (time < COUNTER_CLK_PERIOD)
{
    time = adjust_time(time);
}
 
write_register_64(timer_configuration(n), (ioapic_input << 9) | (1 << 2));
write_register_64(timer_comparator(n), read_register(main_counter) + time);

I hope the above code is obvious. If it’s not, please analyze the meaning of specific fields in registers used above.

Periodic mode

To enable periodic mode:

// "time" is time in femtoseconds from now to interrupt
if (time < COUNTER_CLK_PERIOD)
{
    time = adjust_time(time);
}
 
write_register_64(timer_configuration(n), (ioapic_input << 9) | (1 << 2) | (1 << 3) | (1 << 6));
write_register_64(timer_comparator(n), read_register(main_counter) + time);
write_register_64(timer_comparator(n), time);

This snippet requires some more comments.

Bit 2 is the same as above, Interrupt Enable. Bit 3 is also quite straightforward — 1 means periodic timer. But we’ve also set bit 6. Why?

Let’s take a look at quote from the HPET specification:

This means that next write to timer N comparator register will have the usual meaning, while second next write will write directly to the accumulator. I believe that the wording could’ve been much better.

Bruk og kompatibilitet


En Linux -oppstartslogg som viser byttet fra HPET til TSC som systemklokkilde

Operativsystemer designet før HPET eksisterte, kan ikke bruke HPET, så de bruker andre timerfasiliteter. Nyere operativsystemer pleier å være i stand til å bruke enten. Noe maskinvare har begge deler. Faktisk har de fleste nåværende southbridge-sjetonger eldre støttende forekomster av PIT, PIC, Advanced Programmable Interrupt Controller (APIC) og RTC-enheter som er integrert i silisiumet, enten de brukes av operativsystemet eller ikke, noe som hjelper svært moderne PCer med å kjøre eldre operativsystemer eller ikke. .

Følgende operativsystemer er ikke kjent for å kunne bruke HPET: Windows XP SP1 og tidligere Windows -versjoner, Linux -kjerner før 2.6.

Følgende operativsystemer er kjent for å kunne bruke HPET: Windows XP SP3, Windows Server 2003 SP2 , Windows Server 2008 , Windows Server 2008 R2 , Windows Vista , Windows 7 , x86 -baserte versjoner av OS X , Linux -operativsystemer som bruker 2.6 kjernen (eller nyere), FreeBSD og OpenSolaris .

Den Linux-kjernen kan også bruke HPET som sin klokkekilde . Dokumentasjonen til Red Hat MRG versjon 2 sier at TSC er den foretrukne klokkekilden på grunn av den mye lavere overhead, men den bruker HPET som et tilbakeslag. En referanse i det miljøet for 10 millioner hendelsesantall viste at TSC tok omtrent 0,6 sekunder, HPET tok litt over 12 sekunder og ACPI Power Management Timer tok rundt 24 sekunder.

I 2019 ble det besluttet å svarteliste HPET i nyere Linux -kjerner når den kjører på noen Intel -prosessorer ( Coffee Lake ) på grunn av dens ustabilitet.

Funksjoner

En HPET-brikke består av en 64-biters opp-teller ( hovedteller ) som teller med en frekvens på minst 10 MHz, og et sett med (minst tre, opptil 256) komparatorer. Disse komparatorene er 32- eller 64-biters brede. HPET er programmert via et minnekartet I/O -vindu som kan oppdages via Advanced Configuration and Power Interface (ACPI). HPET -kretsen i moderne PCer er integrert i southbridge -brikken .

Hver komparator kan generere et interrupt når de minst signifikante bitene er lik de tilsvarende bitene i 64-biters hovedtellerverdi. Komparatorene kan settes i ett-skudd eller periodisk modus, med minst én komparator som støtter periodisk modus og alle støtter ett-skudd-modus. I one-shot-modus utløser komparatoren en avbrudd en gang når hovedtelleren når verdien som er lagret i komparatorens register, mens i den periodiske modusen avbrytes avbruddene med angitte intervaller.

Komparatorer kan drives av operativsystemet, f.eks. For å gi en tidtaker per CPU for planlegging, eller av programmer.

Vergelijking met voorgangers

HPET is bedoeld als aanvulling en vervanging van de programmeerbare intervaltimer en de periodieke onderbrekingsfunctie van de RTC. In vergelijking met deze oudere timercircuits heeft de HPET een hogere frequentie en bredere 64-bits tellers (hoewel ze in 32-bits modus kunnen worden aangestuurd).

De HPET-specificatie definieert de timerfrequentie niet, maar vereist slechts een minimum van 10 MHz; de werkelijke frequentie wordt aan het besturingssysteem geleverd door een hardwareregister dat het aantal femtoseconden per periode aangeeft (met een bovengrens van100 000 000  fs ). Een populaire waarde is 14,3 18  MHz, 12 keer de standaard 8254-frequentie van 1,193 18  MHz.

Hoewel 8254 en RTC in een HPET-achtige one-shot-modus kunnen worden gezet, is het installatieproces zo traag dat hun one-shot-modus in de praktijk niet wordt gebruikt voor taken die een nauwkeurige planning vereisen. In plaats daarvan worden 8254 en RTC doorgaans gebruikt in de periodieke modus met een zeer klein tijdsinterval. Als een toepassing bijvoorbeeld meerdere korte wachttijden (misschien enkele milliseconden) moet uitvoeren, is het beter om een ​​periodieke timer constant te laten lopen met een periode van 1 ms vanwege de hoge installatiekosten van een 8254 of RTC one-shot timer. Dit veroorzaakt elke milliseconde een interrupt, zelfs als de applicatie minder vaak daadwerkelijk werk hoeft te doen. Met HPET kunnen de extra interrupts worden vermeden, omdat de instelkosten van een HPET one-shot timer aanzienlijk lager zijn.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector