Apa yang mengukur waktu 'pengguna' dan 'sistem' dalam keluaran sistem.time (exp) R?

90

Saya menggunakan system.time(expression)untuk mengukur waktu eksekusi untuk fungsi R.

Output yang saya dapatkan untuk panggilan tersebut

system.time(myfunction())

adalah:

    user  system elapsed   
  117.36    5.65  127.86

Apa yang diukur 'pengguna' dan 'sistem'?

kenyamanan
sumber
1
Pertanyaan ini dapat menggunakan judul yang lebih baik - seperti "Apa yang dimaksud dengan pengukuran waktu 'pengguna' dan 'sistem'?". Ini akan membuat pertanyaan lebih jelas bagi orang-orang yang menelusuri daftar.
Sharpie

Jawaban:

48

Ini dibahas di ?proc.time( system.time()mengembalikan objek kelas "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.

....dan

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._
Gavin Simpson
sumber
45

Penjelasan paling jelas yang pernah saya baca tentang perbedaan antara userdan systemwaktu berlalu diberikan oleh William Dunlap di [R-help] :

"Waktu CPU pengguna" memberikan waktu CPU yang dihabiskan oleh proses saat ini (yaitu, sesi R saat ini) dan "waktu CPU sistem" memberikan waktu CPU yang dihabiskan oleh kernel (sistem operasi) atas nama proses saat ini. Sistem operasi digunakan untuk hal-hal seperti membuka file, melakukan input atau output, memulai proses lain, dan melihat jam sistem: operasi yang melibatkan sumber daya yang harus dibagikan oleh banyak proses.

Meskipun ?proc.timemengembalikan sesuatu yang serupa, deskripsi ini jauh lebih mudah dipahami bagi saya.

daroczig
sumber
22

Berikut beberapa penjelasan sederhana:

Waktu Berlalu adalah waktu yang dibebankan ke CPU untuk ekspresi.

Waktu Pengguna adalah waktu jam dinding. Waktu yang Anda alami sebagai pengguna.

Biasanya kedua waktu tersebut relatif dekat. Tetapi mereka mungkin berbeda dalam beberapa situasi lain. Sebagai contoh:

  • Jika waktu berlalu> waktu pengguna , ini berarti CPU menunggu beberapa operasi lain (mungkin eksternal) untuk dilakukan.
  • Jika waktu berlalu <waktu pengguna , ini berarti mesin Anda memiliki banyak inti dan dapat menggunakannya
Fadwa
sumber
18

Karena ini bersifat umum, dari Wikipedia:

Istilah 'waktu CPU pengguna' pada awalnya bisa sedikit menyesatkan. Untuk memperjelas, total waktu (waktu CPU nyata) adalah kombinasi jumlah waktu yang dihabiskan CPU untuk melakukan beberapa tindakan untuk suatu program dan jumlah waktu yang dihabiskan CPU untuk melakukan panggilan sistem untuk kernel atas nama program. Ketika sebuah program melakukan loop melalui array, itu mengakumulasi waktu CPU pengguna. Sebaliknya, ketika sebuah program menjalankan panggilan sistem seperti exec atau fork, itu mengakumulasi waktu CPU sistem.

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

manojlds
sumber
2

Karena variabel waktu tersebut ditentukan oleh OS Anda, Anda dapat mengambil informasi tentang bagaimana mereka dihitung dengan mengeksekusi man timedi shell Anda (di Unix):

... Statistik ini terdiri dari (i) waktu nyata yang telah berlalu antara pemanggilan dan penghentian, (ii) waktu CPU pengguna (jumlah dari tms_utimedan tms_cutimenilai dalam struct tms yang dikembalikan oleh waktu (2)), dan (iii) waktu CPU sistem (jumlah tms_stimedan tms_cstimenilai dalam struct tms yang dikembalikan oleh times (2)).

Definisi variabel waktu yang disebutkan dapat ditemukan di sini :

tms_utime Waktu CPU pengguna.

tms_stime Waktu CPU sistem.

tms_cutime Waktu CPU pengguna dari proses anak yang dihentikan.

tms_cstime Waktu CPU sistem dari proses anak yang dihentikan.

Klarifikasi tentang perbedaan antara waktu pengguna dan sistem dijelaskan dalam jawaban daroczig dan di tempat lain di SO :

The tms_utimeelemen adalah jumlah waktu yang dihabiskan mengeksekusi kode Anda, atau kode di perpustakaan C. The tms_stimeunsur adalah jumlah waktu yang dihabiskan di kernel mengeksekusi kode atas nama Anda.

joelostblom
sumber