고정밀 이벤트 타이머
High Precision Event TimerHPET(High Precision Event Timer)는 PC에서 사용되는 하드웨어 타이머입니다.인텔과 마이크로소프트가 공동으로 개발하여 2005년부터 PC 칩셋에 내장되어 있습니다.이전에는 인텔에서 멀티미디어 타이머라고 [1]불렀던HPET라는 용어는 Windows [2]3.0 멀티미디어 확장 기능에 도입된 소프트웨어 멀티미디어 타이머와의 혼동을 피하기 위해 선택되었습니다.
하드웨어 HPET 디바이스를 지원하지 않는 오래된 운영체제시스템에서는 Programmable Interval Timer(PIT; 프로그래머블인터벌타이머)나 Real-Time Clock(RTC; 실시간클럭)등의 오래된 타이밍 기능만을 사용할 수 있습니다.최신 하드웨어 추상화 레이어(HAL)를 탑재한 Windows XP 에서는 프로세서의 TSC(타임 스탬프 카운터) 또는 ACPI PMTIMER(ACPI 전원 관리 타이머)를 RTC와 함께 사용하여 HPET 하드웨어에서 제공하는 운영 체제 기능을 제공할 수도 있습니다.이러한 Windows XP 시스템은, 인텔 HPET 디바이스를 사용하지 않는 경우에서도, 디바이스 드라이버 매니저의 「HPET」의 접속을 인용하고 있습니다.
특징들
HPET 칩은 10MHz 이상의 주파수로 64비트 업카운터(메인 카운터) 카운트와 (최소 3개, 최대 256)의 비교기로 구성됩니다.이들 비교기의 폭은 32비트 또는 64비트입니다.HPET는 Advanced Configuration and Power Interface(ACPI)를 통해 검출 가능한 메모리 매핑 I/O 창을 통해 프로그래밍됩니다.최신 PC의 HPET 회로는 사우스브리지 [a]칩에 내장되어 있습니다.
각 비교기는 최하위 비트가 64비트 메인 카운터 값의 대응하는 비트와 같을 때 인터럽트를 생성할 수 있습니다.비교기는 원샷 모드 또는 주기 모드로 전환할 수 있으며, 하나 이상의 비교기가 주기 모드를 지원하며 모두 원샷 모드를 지원합니다.원샷 모드에서는 메인 카운터가 컴퍼레이터 레지스터에 저장된 값에 도달하면 컴퍼레이터가 인터럽트를 한 번 발생시키고 주기 모드에서는 인터럽트가 지정된 간격으로 생성됩니다.
비교기는 예를 들어 스케줄링을 위해 CPU당 타이머를 1개씩 제공하는 등 운영체제에 의해 구동될 수 있습니다.
적용들
HPET는 RTC보다 훨씬 높은 해상도로 정기적인 인터럽트를 생성할 수 있으며 멀티미디어 스트림을 동기화하기 위해 자주 사용되며 원활한 재생이 가능하며 X86 기반의 CPU 등 다른 타임스탬프 계산을 사용할 필요가 없습니다.RDTSC
설명.
이전 제품과의 비교
![]() | 이 섹션은 LAPIC 타이머, ACPI PM 등과 비교하여 확장해야 합니다.추가하시면 됩니다. (2014년 2월) |
HPET는 프로그램 가능한 8254 인터벌타이머와 RTC의 주기적인 인터럽트 기능을 보완하고 대체하기 위한 것입니다.이러한 오래된 타이머 회선에 비해 HPET는 주파수가 높고 64비트 카운터가 넓습니다(32비트모드로 [1]구동 가능).
HPET 사양에서는 타이머 주파수는 정의되어 있지 않습니다.최소 10MHz만을 필요로 합니다.실제 주파수는 하드웨어 레지스터에 의해 제공되며 주기당 펨토초수(상한값 1000000fs)가 표시됩니다.일반적인 값은 14.318MHz로, 표준 주파수 8254의 12배(1.19318MHz입니다.
8254 및 RTC는 HPET와 같은 원샷 모드로 전환할 수 있지만 셋업 프로세스가 너무 느려서 정확한 [3]스케줄링이 필요한 태스크에서는 실제로 원샷 모드가 사용되지 않습니다.대신 8254 및 RTC는 일반적으로 매우 짧은 시간 간격으로 정기 모드로 사용됩니다.예를 들어 어플리케이션에서 몇 번의 짧은 대기(밀리초 정도)를 실행해야 하는 경우 8254 또는 RTC 원샷타이머의 셋업 비용이 높기 때문에 정기적인 타이머를 1ms 간격으로 항상 실행하는 것이 좋습니다.이로 인해 어플리케이션의 실제 작업 빈도가 낮아지더라도 밀리초마다 인터럽트가 발생합니다.HPET 를 사용하면, HPET 원샷 타이머의 셋업 코스트가 큰폭으로 작아지기 때문에, 여분의 인터럽트를 회피할 수 있습니다.
사용방법 및 호환성

HPET가 존재하기 전에 설계된 운영체제는 HPET를 사용할 수 없기 때문에 다른 타이머 기능을 사용합니다.새로운 운영 체제에서는 두 가지 중 하나를 사용할 수 있습니다.하드웨어에 따라서는 양쪽이 모두 있습니다.실제로 현재 대부분의 사우스브리지 칩에는 PIT, PIC, APIC(Advanced Programmable Interrupt Controller) 및 RTC 디바이스의 레거시 지원 인스턴스가 실리콘에 내장되어 있어 운영체제 사용 여부에 관계없이 최신 PC에서 오래된 운영체제를 실행할 수 있습니다.
다음 운영 체제에서는 HPET([b]Windows XP SP1) 및 이전 버전의 Windows 2.[c]6 이전 Linux 커널을 사용할 수 없는 것으로 알려져 있습니다.
HPET를 사용할 수 있는 운영체제는 Windows XP SP3, Windows Server 2003 SP2, Windows Server 2008,[d] Windows Server 2008 R2, Windows Vista, Windows 7, x86 기반의 OS X, 2.6 커널(또는 그 이후),[citation needed] FreeBSD[4] 및 OpenSolaris입니다.
Linux 커널은 HPET를 클럭 소스로 사용할 수도 있습니다.Red Hat MRG 버전2의 문서에서는 오버헤드가 훨씬 낮기 때문에 TSC가 우선 클럭소스라고 기재되어 있지만 HPET를 폴백으로 사용하고 있습니다.이 환경에서 1000만 이벤트카운트를 벤치마크한 결과 TSC는 약 0.6초, HPET는 약 12초,[5] ACPI Power Management Timer는 약 24초가 소요되었습니다.
2019년에는 불안정성을 [6]이유로 일부 인텔 CPU(Coffee Lake)에서 실행할 때 새로운 Linux 커널에서 HPET를 블랙리스트에 올리기로 결정했습니다.
문제
HPET는 업으로 카운트하는 연속 실행 타이머로, 제로까지 카운트다운되어 1회의 인터럽트를 일으킨 후 정지하는 원샷 디바이스가 아닙니다.HPET는 실제 타이머 값과 프로그래밍된 목표값을 "더 크거나 같음"이 아니라 동등하게 비교하기 때문에 비교기 값이 칩의 [7]레지스터에 기록될 때 목표 시간이 이미 지났을 경우 인터럽트를 놓칠 수 있습니다.이 경우 의도한 인터럽트가 누락될 뿐만 아니라 실제로 먼 미래로 설정됩니다(약32 2 또는264 카운트).[8]실행 시간에 엄격한 상한이 없는 마스크 불가능한 인터럽트(System Management Interrupt(SMI; 시스템 관리 인터럽트) 등)가 존재하는 경우, 이 레이스 조건에서는 셋업 후에 타이머를 재체크할 필요가 있어 완전히 회피하는 것은 어렵습니다.일부 [7]칩셋처럼 비교기 값이 타이머와 즉시 동기화되지 않고 1~2눈금 지연되면 어려움이 악화됩니다.
위에서 설명한 레이스 조건에 더해 VMware 문서에는 다른 몇 가지 단점도 기재되어 있습니다.「사양에서는, 타이머가 특별히 세밀하거나, 드리프트가 낮거나, 판독 속도가 빠를 필요는 없습니다.일반적인 실장 중에는 카운터를 약 18MHz로 실행하고, ACPI 타이머와 같은 시간(1~2μs)을 필요로 하는 것도 있습니다.주기 레지스터가 800ppm [8]이상 어긋나는 구현이 관찰되었습니다."
메모들
- ^ 이러한 고도로 통합된 다이에서는, BIOS 로 ACPI 로 HPET 가 올바르게 설정되어 있지 않고, 인텔 8253 모드로만 올바르게 초기화됩니다.ACPI가 올바르게 설정되어 있지 않으면 OS는 HPET를 표시할 수 없습니다.또한 BIOS 및 OS 개발자는 실시간 지원을 받을 필요가 없다고 생각합니다.따라서 HPET는 시스템의 고속 요구를 충족시키기 위해서만 존재합니다.HPET가 BIOS에서 ACPI로 올바르게 설정되어 있는 경우 첫 번째 HPET 칩의 ACPI MMIO 페이지는 0xFED00000, 두 번째 HPET 페이지는 0xFED80000 페이지입니다(자세한 내용은 설명 참조).
- ^ Windows XP, SP2는 HPET 타이머를 인식합니다(ACPI를 가진 디바이스로서).PNP0103 식별자).(인텔 DQ45CB 메인보드 등) 검출되면 디바이스 매니저 ([시작] / [설정] / [컨트롤 패널] / [시스템] / [디바이스 매니저])의 [시스템 디바이스]브런치에 [고정밀 이벤트 타이머]디바이스가 표시됩니다.하지만 이 장치는 전혀 사용되지 않습니다.
- ^ Linux 커널에서는 원래 RTC 드라이버가 아닌 새로운 RTC-CMOS 하드웨어 클럭 디바이스 드라이버가 필요합니다.
- ^ XP SP3는 2002년 초안대로 HPET 사양의 대부분을 "에뮬레이트"하고 있으며, 2005년까지 Windows Vista용으로 설계된 PC에 최종적으로 등장할 예정입니다.드라이버 매니저 내에서 "고정밀 이벤트 타이머"라는 용어는 15MHz Intel HPET 디바이스가 사용되지 않는 경우에도 TSC(타임 스탬프 카운터) 또는 ACPI 파워 매니지먼트 타이머(PMTimer) 타이밍 서브시스템을 설명하기 위해 사용됩니다.물리 인텔 15 MHz HPET 를 사용하는 것은 Windows Vista 이후의 Windows 만이라고 하는 것은 사실이지만, HPET 에 의해서 실현되도록 의도된 operating system 기능은, 사양(2005 년보다 2002 년)이 다르기 때문에, 기능이 저하되고 있는 경우가 대부분입니다.Windows XP SP3의 물리적인 실시 형태에 관해서는 Query Performance Frequency API 호출이 정격 프로세서 클럭 속도(예를 들어 2GHz)에 관련된 값을 반환하는 경우에도 ACPI HAL(버전 5.1.2600.5512)을 사용할 때 IRQ0 및 IRQ8은 일반적으로 "고정밀 이벤트 타이머"에 매핑됩니다.인텔(R) HPET 스펙의 15MHz.Windows Vista를 사용하면 얻을 수 있습니다.이 문제는 이러한 시스템에서 "HPET"가 의미하는 바를 혼란스럽게 만들지만, 이러한 경우 15MHz Intel 디바이스가 아닌 것은 분명합니다.이 "HPET" 인용 IRQ 매핑 및 비 HPET 클럭 관계는 /USEPMTIMER 부트 오버라이드 사용 여부에 관계없이 인텔 시스템과 AMD 시스템 모두에서 찾을 수 있습니다.HPET의 원래 사양(2002년)은 고해상도 카운터를 요구하고 있으며, 이 카운터는 Query Performance Frequency 및 Query Performance Counter API 호출(Windows 2000 이후 이미 사용 가능)에 의해 공개되기 때문에 이 Query Performance Frequency가 실제로 어떻게 제공되는지 알 수 있습니다.높은 값(1GHz ~4GHz 범위)은 CPU의 Time Stamp Counter(TSC; 타임스탬프 카운터)가 발신기지임을 나타냅니다.AMD의 초기 멀티코어 CPU에서는 TSC에서 파생된 Query Performance Counter 판독치에 문제가 있었습니다.이는 확산 스펙트럼과 전원 관리 속도의 변화에 영향을 받기 때문입니다.TSC 클럭을 CPU 클럭에 의존하지 않는 것으로, 이 문제는 이후 프로세서 설계로 해결되었습니다만, ACPI 시스템의 PM 타이머는 카운터 소스가 되어, Windows BOOT 에서는 /USEPM TIMER 오버라이드가 필요하게 되었습니다.INI 파일 사용을 강제합니다./USEPMTIMER 부트 스위치와 함께 ACPI HAL을 사용하는 인텔 및 AMD 머신에서는 IRQ 0 및8은 HPET를 보고하지만 Query Performance Frequency는 3.579545MHz를 보고합니다.이것은 PMTIMER의 주파수입니다.이것은 CPU 주파수에 의존하지 않는다는 명백한 이점이 있으며, 여전히 매우 합리적인 마이크로초 미만의 분해능과 정확성을 제공합니다.아이러니컬하게도 TSC 메커니즘으로 얻을 수 있는 매우 높은 카운트환율은 측정 가능한 시간 간격이 너무 짧다는 문제를 일으킬 수 있습니다.즉, 카운터가 조기에 오버플로우 할 수 있는 경우에는 상한치가 있습니다.또, 새로운 프로세서 설계의 프로세서 속도가 계속 향상하고 있기 때문에, 사용 가능한 시간이 한층 짧아지는 것도 귀찮을 수 있습니다.따라서 PMTIMER 및 인텔 HPET 시스템이 명확하게 지정된 고정환율을 사용하는 것은 놀랄 일이 아닙니다.이는 의도적으로 마이크로초 미만의 분해능을 생성하는 것을 목적으로 하기 때문에 TSC에서 가능한 것보다 더 오랜 시간 동안 측정할 수 있습니다./PMTIMER 스위치 유무에 관계없이 HPET 사양의 "이벤트" 부분은 다른 타이밍 소스를 사용하여 에뮬레이트할 수 있습니다.이는 기본 TSC 솔루션과 PMTIMER 솔루션 모두 사양에서 설명한 바와 같이 주기적인 이벤트 트리거를 위한 암묵적인 하드웨어를 포함하지 않기 때문입니다.단, Windows XP의 타이머 API(b)를 통해 사용할 수 있기 때문입니다.timeBeginPeriod - timeEndPeriod API 콜 사용 시 0.9766ms의 분해능을 얻을 수 있습니다).디바이스 매니저가 IRQ0 및 IRQ8 위치에서 HPET 견적을 내고 있는데도 RTC 디바이스는 소프트웨어의 도움을 받아 이 사양을 충족하고 있습니다.
레퍼런스
- ^ a b Intel Corporation (October 2004), IA-PC HPET (High Precision Event Timers) Specification (revision 1.0a) (PDF), retrieved 2012-06-15
- ^ "Multimedia Timers". Microsoft. Retrieved 2010-10-20.
- ^ Guidelines For Providing Multimedia Timer Support, 2002-09-20, retrieved 2009-11-10
- ^ "FreeBSD Man Pages: hpet(4)". www.freebsd.org.
- ^ "Chapter 15. Timestamping". Access.redhat.com. Archived from the original on 2016-05-07. Retrieved 2014-02-14.
- ^ "The Linux Kernel Disabling HPET For Intel Coffee Lake". Phoronix.
- ^ a b Thomas Gleixner, x86: hpet: 하드웨어 우둔성 대책 아카이브에서 2012-07-09년 현재 Linux 커널 2.6.36-rc5용으로 통합
- ^ a b VMware 가상 머신의 시간 기록(VMware vSphere 5.0, Workstation 8.0, Fusion 4.0의 경우), 9페이지