Linux에서 시간 측정 - 시간 vs 클럭 vs getrusage vs clock_gettime vs gettime vs timespec_get?
함수 중 '''는time
,clock
getrusage
,clock_gettime
,gettimeofday
★★★★★★★★★★★★★★★★★」timespec_get
어떤 상황에서 사용해야 하는지 알기 위해 구현 방법 및 반환 값을 명확하게 이해하고 싶습니다.
먼저 월클럭 값을 반환하는 함수를 프로세스 값을 반환하는 함수나 스레드 값을 반환하는 함수와 비교하여 분류해야 합니다. gettimeofday
값, 즉 월클럭 값을 반환합니다.clock_gettime
에 따라 월클럭 값, 프로세스 또는 스레드 값을 반환합니다.Clock
이치노 getrusage
★★★★★★★★★★★★★★★★★」clock
이치노
그리고 두 번째 질문은 이러한 기능의 구현과 그 결과 그 정확성에 관한 것입니다.이러한 기능에서 사용하는 하드웨어 또는 소프트웨어 메커니즘.
것 getrusage
는 커널 틱(보통 1ms 길이)만을 사용하기 때문에 ms보다 정확할 수 없습니다.?? 음음음?getimeofday
함수는 사용 가능한 가장 정확한 기본 하드웨어를 사용하는 것 같습니다.그 결과, 최신 하드웨어의 정확도는 보통 마이크로초(API 때문에 그 이상일 수 없습니다)입니다.★★는?clock
에서는 '근사입니까?맨페이지에서는 ''가 무슨 뜻입니까?게게무 슨슨?★★는?clock_gettime
API를 사용합니다.기본 하드웨어가 허용하면 그렇게 정확할 수 있을까요?★★★★★★★★★★★★?
다른 기능이 있나요?
문제는 C와 C++에서 사용할 수 있는 몇 가지 다른 시간 함수가 있으며, 그 중 일부는 구현마다 동작이 다르다는 것입니다.반쪽짜리 대답도 많이 떠다니고 있어요.클럭 함수의 목록과 속성을 함께 컴파일하면 질문에 올바르게 대답할 수 있습니다.우선, 우리가 찾고 있는 관련 특성이 무엇인지 물어봅시다.당신의 투고를 보고 제안합니다.
- 시계로 재는 시간은 몇 시입니까?(실제, 사용자, 시스템, 아니면 벽시계입니까?)
- 시계의 정밀도는 얼마입니까?(초,초,초,초 또는 그 이상)
- 시간이 지나면 시계가 몇 분 정도 감겨요?아니면 이걸 피할 수 있는 방법이 있을까요?
- 클럭은 단조로운가요?아니면 (NTP, 타임존, 서머타임, 사용자에 의한) 시스템 시간 변경에 따라 변화합니까?
- 위의 내용은 구현에 따라 어떻게 달라집니까?
- 특정 기능이 더 이상 사용되지 않거나 표준적이지 않은가?
목록을 시작하기 전에 월클럭 시간은 시간대의 변화, 여름 시간의 변화 또는 월클럭이 NTP에 의해 동기화되는지 여부에 따라 변경되지만 사용하기에 적합한 시간은 거의 없다는 점을 지적하고 싶습니다.이벤트를 스케줄 하거나 퍼포먼스를 벤치마킹하기 위해 시간을 사용하는 경우에는 이러한 모든 것이 바람직하지 않습니다.벽(또는 바탕화면)에 붙어 있는 시계라는 이름만 들어도 정말 좋습니다.
Linux 및 OS X의 클럭에 대해 지금까지 알아낸 것은 다음과 같습니다.
time()
OS로부터의 월클럭 시간을 초단위로 반환합니다.clock()
사용자와 시스템 시간의 합계가 반환되는 것 같습니다.C89 이후에 존재합니다.한때는 이것이 사이클 단위의 CPU 시간이라고 생각했지만 POSIX와 같은 최신 표준에서는 CLOCKS_PER_SEC가 10000이어야 하며 최대 정밀도는 1µs입니다.내 시스템의 정밀도는 확실히 1/s이다.이 클럭은 상한에 도달하면 감깁니다(1MHz 클럭으로서는 그다지 길지 않은~2^32틱 후에 발생합니다).man clock
2.로는 glibc 2.18로 .clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)
Linux 의 linux 。clock_gettime(CLOCK_MONOTONIC, ...)
나노초 분해능을 제공하며 단조롭습니다.'seconds'와 'nanoseconds'는 각각 32비트 카운터에 따로 저장되어 있다고 생각합니다.따라서 업타임이 수십 년 지속되면 랩어라운드가 이루어집니다.이 시계는 매우 좋은 것 같습니다만, 유감스럽게도 OS X에서는 아직 사용할 수 없습니다.POSIX 7 에서는 옵션 확장이라고 설명되고 있습니다.getrusage()
내 상황에 가장 적합한 선택이었음이 밝혀졌어사용자 시간과 시스템 시간을 따로 보고하며 랩오버하지 않습니다.시스템의 정밀도는 1 µs이지만 Linux 시스템(GCC 4.1.2 탑재 Red Hat 4.1.2-48)에서도 테스트했는데 정밀도는 1ms에 불과했습니다.gettimeofday()
는 (공칭적으로) 정밀도의 벽시계를 반환합니다.시스템에서는 이 클럭의 정밀도는 높은 것 같습니다만, 「시스템 클럭의 해상도는 하드웨어에 의존합니다」라고 하는 이유로, 이것은 보증할 수 없습니다.POSIX.1-2008은 그렇게 말한다.「애플리케이션에서는,clock_gettime()
사춘기 대신 기능하다gettimeofday()
'기능'을 사용할 수 있으므로 멀리해야 합니다.Linux x86 및 시스템콜로서 실장합니다.mach_absolute_time()
는 OS X에서 매우 고해상도(ns) 타이밍에 사용할 수 있는 옵션입니다.시스템에서는 실제로 ns 해상도를 얻을 수 없습니다.원칙적으로 이 클럭은 반환되지만 64비트 부호 없는 정수를 사용하여 ns를 저장하므로 반환은 실제로 문제가 되지 않습니다.휴대성은 의문입니다.- Linux와 OS X 모두에서 NS 정밀도를 얻기 위해 Linux에서 컴파일할 경우 clock_gettime을 사용하고 OS X에서 컴파일할 경우 마하 타이머를 사용하는 이 스니펫을 기반으로 하이브리드 함수를 작성했습니다.
상기의 모든 것은, 특별한 지정이 없는 한, Linux 와 OS X 의 양쪽 모두에 존재합니다.위의 "My system"은 MacPorts의 GCC 4.7.2를 탑재한 OS X 10.8.3을 실행하는 Apple입니다.
마지막으로 위의 링크와 더불어 도움이 되는 참조 목록을 보여 줍니다.
- http://blog.habets.pp.se/2010/09/gettimeofday-should-never-be-used-to-measure-time
- Linux에서 C 프로그램의 실제 실행 시간을 측정하는 방법은 무엇입니까?
- http://digitalsandwich.com/archives/27-benchmarking-misconceptions-microtime-vs-getrusage.html
- http://www.unix.com/hp-ux/38937-getrusage.html
업데이트: OS X의 경우,clock_gettime
는, 10.12(시에라)로부터 실장되고 있습니다.또, POSIX 와 BSD 베이스의 플랫폼(OS X 등) 모두,rusage.ru_utime
구조 필드
C11timespec_get
사용 예: https://stackoverflow.com/a/36095407/895245
반환되는 최대 정밀도는 나노초이지만 실제 정밀도는 구현에 의해 정의되며 이보다 작을 수 있습니다.
CPU 사용량이 아니라 벽 시간을 반환합니다.
glibc 2.21은 아래에 구현되어 있으며 다음 주소로 직접 전송됩니다.
clock_gettime (CLOCK_REALTIME, ts) < 0)
clock_gettime
그리고.CLOCK_REALTIME
POSIX http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html, 및man clock_gettime
프로그램 실행 중에 시스템 시간 설정을 변경하면 이 측정이 중단될 수 있습니다.
C++11 크로노
이왕이면 http://en.cppreference.com/w/cpp/chrono에서도 다루도록 하겠습니다.
GCC 5.3.0(C++ stdlib는 GCC 송신원 내부):
high_resolution_clock
의 에일리어스입니다.system_clock
system_clock
는 사용 가능한 다음 중 첫 번째 것으로 전송합니다.clock_gettime(CLOCK_REALTIME, ...)
gettimeofday
time
steady_clock
는 사용 가능한 다음 중 첫 번째 것으로 전송합니다.clock_gettime(CLOCK_MONOTONIC, ...)
system_clock
질문: std::system_clock과 std:steady_clock의 차이점
CLOCK_REALTIME
대CLOCK_MONOTONIC
: CLOCK_REALTIME과 CLOCK_MONOTONIC의 차이점
언급URL : https://stackoverflow.com/questions/12392278/measure-time-in-linux-time-vs-clock-vs-getrusage-vs-clock-gettime-vs-gettimeof
'programing' 카테고리의 다른 글
프로세스 내부에서 CPU 및 메모리 소비량을 확인하는 방법 (0) | 2022.08.15 |
---|---|
반영 일반 get 필드 값 (0) | 2022.08.15 |
nuxt Auth Module과 vuex-persist의 비교 가능성 문제가 있습니까? (0) | 2022.08.15 |
인접 인터페이스의 Java 스위치가 케이스가 추가되면 더 빨리 동작하는 것처럼 보이는 이유는 무엇입니까? (0) | 2022.08.15 |
파이어폭스에서 Vuejs 이벤트가 작동하지 않음 - Chrome에서는 정상 (0) | 2022.08.15 |