문제

프로그램의 일부 시간에 매우 정확한 방법이 필요합니다. 나는 이것에 대해 정기적 인 고해상도 시계를 사용할 수 있지만, 그것은 WallClock 시간을 반환 할 것입니다. 이것이 내가 필요한 것이 아닙니다. 나는 내 프로세스 만 실행하는 데 소요되는 시간이 필요합니다.

나는 그것을 북마크하는 것을 잊어 버렸고 패치의 이름도 잊어 버렸다는 점을 제외하고는 내 프로세스를 나노 초 정확도로 시간을 할애 할 수있는 Linux 커널 패치를 본 것을 분명히 기억합니다.

그래도 어떻게 작동하는지 기억합니다.

모든 컨텍스트 스위치에서 고해상도 시계의 값을 읽고 마지막 두 값의 델타를 실행 프로세스의 프로세스 시간에 추가합니다. 이는 프로세스의 실제 프로세스 시간에 대한 고해상도 정확한 관점을 생성합니다.

일반 프로세스 시간은 일반 시계를 사용하여 유지됩니다. 이는 밀리 초 정확한 (1000Hz)라고 생각합니다.

내가 말하는 커널 패치를 아는 사람이 있습니까? 나는 또한 그것이 'rtimer'또는 무언가와 같은 편지와 같은 글자와 같은 단어와 같았지만 정확히 기억하지 못한다.

(다른 제안도 환영합니다)


Marko가 제안한 완전히 공정한 스케줄러는 내가 찾고 있던 것이 아니라 유망한 것 같습니다. 내가 가지고있는 문제는 프로세스 시간을 얻는 데 사용할 수있는 통화가 여전히 세분화 된 값을 반환하지 않는다는 것입니다.

  • Times ()는 밀리 초에서 값 21, 22를 반환합니다.
  • Clock ()는 값 21000, 22000, 동일한 세분화를 반환합니다.
  • getRusage ()는 210002, 22001 (및 somesuch)과 같은 값을 반환하고 있으며, 정확도가 조금 더 좋지만 값은 눈에 띄게 동일하게 보입니다.

이제 내가 가질 수있는 문제는 커널에 필요한 정보가 있다는 것입니다. 시스템 호출을 반환 할 시스템 호출을 모릅니다.

도움이 되었습니까?

해결책

이 수준의 타이밍 해상도를 찾고 있다면 아마도 미세 최적화를 시도하고있을 것입니다. 그렇다면, 당신은 파피. Wall-Clock 및 Virtual (프로세스 만) 타이밍 정보를 모두 제공 할뿐만 아니라 CPU 이벤트 카운터에 대한 액세스를 제공하며 성능을 향상시킬 때 없어서는 안될 수 있습니다.

http://icl.cs.utk.edu/papi/

다른 팁

보다 이 질문 더 많은 정보를 얻으려면.

내가 그런 것들에 사용한 것은 gettimeofday ()입니다. 초와 마이크로 초의 구조를 제공합니다. 코드 전에 전화 한 후 다시 전화하십시오. 그런 다음 타이머 서브를 사용하여 두 개의 스트러크를 빼면 TV_USEC 필드에서 몇 초 만에 시간을 얻을 수 있습니다.

소프트웨어의 속도를 테스트하기 위해 매우 작은 시간 단위가 필요하다면, 나는 당신이 원하는 부품을 수백만 번으로 실행하고, 루프 전후에 시간을내어 평균을 계산합니다. . 나노초를 사용하는 방법을 알아낼 필요가없는 것 외에도이 작업을 수행하는 좋은 부작용은 OS 스케디러로 인한 임의의 오버 헤드가 평균화되기 때문에보다 일관된 결과를 얻을 수 있다는 것입니다.

물론, 프로그램이 1 초 안에 수백만 번 실행할 필요가 없다면 밀리 초 러닝 타임을 측정 할 수 없다면 충분히 빠릅니다.

나는 CFC를 믿는다 (완전히 공정한 스케줄러) 당신이 찾고있는 것입니다.

높은 정밀 이벤트 타이머를 사용할 수 있습니다 (HPET) 상당히 최근 2.6 커널이있는 경우. 체크 아웃 문서/hpet.txt 그것을 사용하는 방법에. 이 솔루션은 플랫폼 의존적이지만 최신 X86 시스템에서만 사용할 수 있다고 생각합니다. HPET에는 최소 10MHz 타이머가 있으므로 요구 사항이 쉽게 맞아야합니다.

Freescale의 여러 PowerPC 구현이 Cycle Exact 명령 카운터도 지원한다고 생각합니다. 나는 몇 년 전에 이것을 사용하여 고도로 최적화 된 코드를 프로파일 링했지만 그 코드가 무엇인지 기억할 수 없습니다. Freescale에는 사용자 공간에서 액세스하기 위해 적용 해야하는 커널 패치가 있다고 생각합니다.

http://allmybrain.com/2008/06/10/timing-cc-code-on-linux/

C/C ++에서 직접 수행하는 경우 직접 도움이 될 수 있지만, 그렇지 않은 경우에도 포인터를 줄 수 있기를 바랍니다) ... 마이크로 초 정확도를 제공한다고 주장하며, 이는 단지 기준을 전달합니다. :)

내가 찾고 있던 커널 패치를 찾았다 고 생각합니다. 링크를 잊지 않도록 여기에 게시합니다.

http://user.it.uu.se/~mikpe/linux/perfctr/ http://sourceforge.net/projects/perfctr/

편집 : 사용자 친화적이지는 않지만 내 목적에 맞습니다.

CPU를 사용해보십시오 타임 스탬프 카운터? Wikipedia는 clock_gettime ()을 사용하는 것을 제안하는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top