Public/tip & tech

High Precision Event Timer - 그 것은 무엇인가??

quantapia 2014. 2. 4. 16:29

High Precision Event Timer( HPET )은 인텔과 마이크로소프트가 멀티미디어 프로그램이나 시간에 민감한 프로그램의 요구를 반영하고자 서로 협력해 개발한 것이다. 원래 HPET 은 이름이 멀티미디어 타이머였으나 마이크로소프트의 DirectX 타이머와 혼란을 일으킬 것을 피하고자 이름을 바꾸었다.

 

 

실제 마이크로소프트의 테스트 엔지니어들은 HPET 초기 모델에 대해서 테스트를 진행하고 있었답니다. 그런데 이게 뜻밖으로 시스템 성능을 높여주고, 시스템의 정밀도를 높여주어 전체적으로 시스템 수행속도가 빨라졌답니다. 그것은 자신들의 OS인 Microsoft Windows에서 API를 호출함으로써 증명이 되었는데, 유저모드 함수인 QueryPerformanceCounter과 커널모드 함수인 KeQueryPerformanceCounter API를 1000천 호출하고 시간을 재어봤는데 차이가 꽤 나왔다고 합니다. 그 수치는 QueryPerformanceCounter 에서 약 24%, KeQueryPerformanceCounter에서 61%의 성능차이였다네요. 뭐 제가 전기 땜쟁이는 아니라서 이게 왜 이렇게 차이 나는지는 잘 모르겠지만 그냥 수치로 봐도 엄청난 차이인것 같습니다.( 매직 그래프일지도 모르겠습니다^^ )
  그 이유가 적혀있는 설명을 보니 기존의 타이머들은 이론적으로 최대 해상도( 최저 주기겠죠^^? )가 1밀리세컨드고 실제 걸리는 해상도가 2밀리세컨드 였답니다. 게다가 기존 타이머는 1밀리세컨드씩 늦을 수 있기 때문에 결과적으로 가장 최저시간은 3밀리세컨드로 잡아서 사용할 수밖에 없었다고 합니다. ( 이 것은 윈도우 타이머라고 하네요. )
  그런데 멀티미디어 프로그램( 동영상 플레이어를 포함해서 게임도 포함이겠죠^^? )들은 1밀리세컨드의 정확성이 필요했고,  현재 타이머들은 겨우 그럭저럭 써먹을 정도밖에 안 되었기 때문에 새로운 것이 필요해서 나온 것이라 합니다.
  여기서 한 가지 궁금한 것이 생기지 않나요? 그럼 어떻게 지금까지 돌아가던 프로그램들은 잘 돌아갔는지 말입니다. 그 해답을 보니 Large playback Buffer 와 Busy Waiting과 같은 편법을 이용해서 이제까지의 개발자들은 프로그램을 개발했다고 합니다.( 이 것 또한 궁금해 지네요^^ 다음에 한 번 조사해 봐야 하겠습니다. 게임이나 동영상 플레이어는 DirectX Timer 를 사용하여 문제가 없었답니다 ). 그런데 이게 결국 반응성도 떨어뜨리는 등의 성능의 발목을 잡는 게 되었다고 하네요. 이제 원인이 나온 것 같습니다!! 편법을 사용하지 않음으로 인해서 성능이 올라간 것 같군요. 순전히 저의 이상한 해석으로 인한 추측일 수도 있겠지만 아마 별다른 말이 없는 것으로 보아 위 원인이 맞는 듯합니다.
  그럼 HPET의 기능은 고해상도의 주기밖에 없는가? 이것이 또 궁금해지겠군요. 대답은 "아니오."입니다. HPET을 사용함으로써 생기는 이익은 적어도 10mhz 마다 타이머의 클럭을 증가 시킬 수 있으며, 주기적 비주기적 타이머 등 좋은 기능들을 지원한다고 합니다.
  그렇다고 해서 기존에 나온 OS들도 이 기능을 사용할 수 있느냐? 고 묻는다면 그 대답 또한 "아니오." 입니다. 왜냐하면, 인텔이 밝힌 스펙 명세서에 따르면 이 기능을 사용하려면 OS 개발자들이 따로 지원을 해주어야 한답니다. 결국, 현재 나와있는 Windows Vista 혹은 새 버젼의 FreeBSD 등을 제외하고는 지원이 되지 않는다는 말이죠. 뭐 아쉽지만 어쩌겠습니까? 새로운 기술은 발전하는데 예전의 OS는 패치를 하지 않으면 코드는 그대로이니 지원하지 않는 게 당연하겠죠^^. 그래도 언젠가는 패치로 지원이 될 것 같습니다.

 

 

http://en.wikipedia.org/wiki/High_Precision_Event_Timer