R system.time (exp) 출력에서 ​​측정하는 '사용자'및 '시스템'시간은 무엇입니까?


90

system.time(expression)R 함수의 실행 시간을 측정 하는 데 사용 하고 있습니다.

호출에 대한 출력

system.time(myfunction())

is :

    user  system elapsed   
  117.36    5.65  127.86

'사용자'와 '시스템'은 무엇을 측정합니까?



1
이 질문은 " '사용자'및 '시스템'시간을 측정하는 것은 무엇입니까?"와 같은 더 나은 제목을 사용할 수 있습니다. 이것은 목록을 탐색하는 사람들에게 질문을 더 명확하게 할 것입니다.
Sharpie 2011-04-17

답변:


48

이것은 ?proc.time( system.time()클래스의 객체를 반환) 에서 논의됩니다 "proc.time".

Details:

     ‘proc.time’ returns five elements for backwards compatibility, but
     its ‘print’ method prints a named vector of length 3.  The first
     two entries are the total user and system CPU times of the current
     R process and any child processes on which it has waited, and the
     third entry is the ‘real’ elapsed time since the process was
     started.

....과

Value:

....

     The definition of ‘user’ and ‘system’ times is from your OS.
     Typically it is something like

     _The ‘user time’ is the CPU time charged for the execution of user
     instructions of the calling process. The ‘system time’ is the CPU
     time charged for execution by the system on behalf of the calling
     process._

45

분명한 설명은 내가 이제까지의 차이에 읽은 usersystem경과 시간에 의해 제공되었다 [R-도움말]에 윌리엄 던랩 :

"사용자 CPU 시간"은 현재 프로세스 (즉, 현재 R 세션)에서 소비 한 CPU 시간을 제공하고 "시스템 CPU 시간"은 현재 프로세스를 대신하여 커널 (운영 체제)에서 소비 한 CPU 시간을 제공합니다. 운영 체제는 파일 열기, 입력 또는 출력 수행, 다른 프로세스 시작, 시스템 시계보기 (많은 프로세스가 공유해야하는 리소스를 포함하는 작업)와 같은 작업에 사용됩니다.

?proc.time비슷한 것을 반환 하지만 이 설명은 저에게 훨씬 더 이해하기 쉬웠습니다.


22

다음은 몇 가지 간단한 설명입니다.

경과 시간 은 표현식에 대해 CPU에 청구 된 시간 입니다.

사용자 시간 은 벽시계 시간입니다. 사용자로서 경험 한 시간.

일반적으로 두 시간은 비교적 가깝습니다. 그러나 다른 상황에서는 다를 수 있습니다. 예를 들면 :

  • 경우 경과 시간> 사용자 시간 은 CPU가 다른 작업을 위해 주변 대기 중임이 수단 (외부에있을 수 있음) 할 수있다.
  • 만일 경과 시간 <사용자 시간 , 기계가 여러 개의 코어를 가지고 있으며이를 사용할 수 있음이 수단

18

어쨌든 위키 백과에서 일반적이기 때문에 :

'사용자 CPU 시간'이라는 용어는 처음에는 약간 오해의 소지가 있습니다. 명확하게 말하면, 총 시간 (실제 CPU 시간)은 CPU가 프로그램에 대해 일부 작업을 수행하는 데 소비하는 시간과 CPU가 프로그램을 대신하여 커널에 대한 시스템 호출을 수행하는 데 소비하는 시간의 조합입니다. 프로그램이 배열을 반복 할 때 사용자 CPU 시간이 누적됩니다. 반대로 프로그램이 exec 또는 fork와 같은 시스템 호출을 실행하면 시스템 CPU 시간이 누적됩니다.

http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time


2

이러한 시간 변수는 OS에 의해 정의 man time되므로 셸 (Unix에서)에서 실행 하여 계산 방법에 대한 정보를 검색 할 수 있습니다 .

...이 통계는 (i) 호출과 종료 사이의 실시간 경과 시간, (ii) 사용자 CPU 시간 ( 시간 (2)에 의해 반환 된 구조체 tms 의 tms_utimetms_cutime값 의 합 ) 및 (iii)로 구성됩니다. 시스템 CPU 시간 ( times (2)에 의해 반환 된 구조체 tms 의 tms_stimetms_cstime값 의 합 )

언급 된 시간 변수의 정의는 여기에서 찾을 수 있습니다 .

tms_utime 사용자 CPU 시간.

tms_stime 시스템 CPU 시간.

tms_cutime 종료 된 하위 프로세스의 사용자 CPU 시간입니다.

tms_cstime 종료 된 하위 프로세스의 시스템 CPU 시간입니다.

사용자와 시스템 시간의 차이에 대한 설명은 daroczig의 답변과 SO의 다른 곳에 설명되어 있습니다 .

tms_utime요소는 코드를 실행하는 데 걸린 시간의 양, 또는 C 라이브러리의 코드입니다. tms_stime요소는 사용자를 대신하여 코드를 실행 커널에서 보낸 시간의 양입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.