Подтвердить что ты не робот

Что такое "пользовательское" и "системное" время измерения в R system.time(exp) output?

Я использую system.time(expression) для измерения времени выполнения для функции R.

Результат, который я получаю для вызова

system.time(myfunction())

является:

    user  system elapsed   
  117.36    5.65  127.86

Что измеряет "пользователь" и "система"?

4b9b3361

Ответ 1

Это обсуждается в ?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._

Ответ 2

Самое ясное объяснение, которое я когда-либо читал о разнице между user и system прошедшим временем, было предоставлено Уильямом Данлапом в [R-help]:

"Время пользовательского процессора" дает время процессора, затрачиваемое на текущий процесс (то есть текущий сеанс R) и "системное время ЦП" дает CPU время, затрачиваемое ядром (операционной системой) от имени текущий процесс. Операционная система используется для открытие файлов, выполнение ввода или вывода, запуск других процессов и глядя на системные часы: операции, которые связаны с ресурсами, которые многие процессы должны делиться.

Хотя ?proc.time возвращает что-то подобное, это описание было намного легче понять для меня.

Ответ 3

Так как они все-таки общие, из Википедии:

Термин "пользовательское время процессора" может быть немного сначала вводит в заблуждение. Чтобы быть ясным, общее время (реальное время процессора) является сочетание времени CPU тратит некоторое действие на программы и времени CPU тратит системные вызовы на ядро от имени программы. Когда программа проходит через массив, он накапливает время процессора пользователя. И наоборот, когда программа выполняет системный вызов, такой как exec или fork, он накапливает системное время CPU.

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

Ответ 4

Вот несколько простых объяснений:

Истекшее время - это время, затрачиваемое на процессор для выражения.

Время пользователя - это время настенных часов. Время, которое вы как пользователь испытали.

Обычно оба момента относительно близки. Но они могут различаться в некоторых других ситуациях. Например:

  • Если прошедшее время > пользовательское время, это означает, что ЦП ожидает выполнения некоторых других операций (может быть внешним).
  • Если прошедшее время < пользовательское время, это означает, что ваш компьютер имеет несколько ядер и может их использовать.

Ответ 5

Поскольку эти временные переменные определяются вашей ОС, вы можете получить информацию о том, как они вычисляются, выполнив man time в вашей оболочке (в Unix):

... Эти статистические данные состоят из (i) истекшего реального времени между вызовом и завершением, (ii) время ЦП пользователя (сумма значений tms_utime и tms_cutime в структуре tms, возвращаемых временами (2)) и (iii) системное время ЦП (сумма значений tms_stime и tms_cstime в структуре tms, возвращаемая временами (2)).

Определение указанных временных переменных может быть найдено здесь:

tms_utime Время пользовательского ЦП.

tms_stime Время центрального процессора.

tms_cutime Пользовательское время процессора завершенных дочерних процессов.

tms_cstime Время системного процессора завершенных дочерних процессов.

A разъяснение различий между пользовательским и системным временем описано в ответе daroczig и в другом месте на SO:

Элемент tms_utime - это количество времени, затрачиваемого на выполнение вашего кода, или код в библиотеке C. Элемент tms_stime - это количество времени, затрачиваемого на выполнение кода ядра от вашего имени.