Що таке "користувацький" та "системний" час вимірювання у виведенні R system.time (exp)?


90

Я використовую system.time(expression)для вимірювання часу виконання функції R.

Результат, який я отримую для дзвінка

system.time(myfunction())

це:

    user  system elapsed   
  117.36    5.65  127.86

Що вимірює "користувач" та "система"?



1
Це запитання могло б мати кращу назву - наприклад, "Що вимірюють" користувацький "та" системний "час?". Це зробило б питання зрозумілішим для людей, які переглядають список.
Sharpie

Відповіді:


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

Найбільш чітке пояснення, яке я коли-небудь читав щодо різниці між часом userта systemминулим часом, надав Вільям Данлап у [R-help] :

"Час процесора користувача" надає час процесора, витрачений поточним процесом (тобто поточним сеансом R), а "системний час процесора" - час процесора, витрачений ядром (операційною системою) від імені поточного процесу. Операційна система використовується для таких речей, як відкриття файлів, введення або виведення, запуск інших процесів і перегляд системного годинника: операції, що включають ресурси, якими багато процесів повинні ділитися.

Хоча і ?proc.timeповертається щось подібне, цей опис для мене було набагато легше зрозуміти.


22

Ось кілька простих пояснень:

Час, що минув - це час, заряджений процесором (процесорами) для виразу.

User Time - час настінного годинника. Час, який ви як користувач пережили.

Зазвичай обидва рази відносно близькі. Але вони можуть відрізнятися в деяких інших ситуаціях. Наприклад:

  • Якщо минув час> час користувача , це означає, що центральний процесор чекає, коли будуть виконані деякі інші операції (можуть бути зовнішніми).
  • Якщо минув час <користувацький час , це означає, що ваш апарат має кілька ядер і може ними користуватися

18

Оскільки вони і так є загальними, з Вікіпедії:

Термін "час процесора користувача" спочатку може трохи ввести в оману. Щоб бути зрозумілим, загальний час (реальний час процесора) - це поєднання кількості часу, витраченого процесором, виконуючи якусь дію для програми, і кількості часу, проведеного процесором, виконуючи системні виклики ядра від імені програми. Коли програма переглядає масив, вона накопичує час процесора користувача. І навпаки, коли програма виконує системний виклик, такий як exec або fork, вона накопичує системний час процесора.

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


2

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

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

Визначення згаданих змінних часу можна знайти тут :

tms_utime Час процесора користувача.

tms_stime Системний час процесора.

tms_cutime Час користувальницького процесора завершених дочірніх процесів.

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

Пояснення різниці між користувальницьким та системним часом описано у відповіді daroczig та в інших місцях щодо SO :

tms_utimeЕлементом є кількість часу , витрачений на виконання коду або коду в бібліотеці C. tms_stimeЕлемент є кількістю часу , витраченим в ядрі виконуючого код від вашого імені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.