Đo thời gian của 'người dùng' và 'hệ thống' trong đầu ra R system.time (exp) là gì?


90

Tôi đang sử dụng system.time(expression)để đo thời gian thực thi cho một hàm R.

Đầu ra tôi nhận được cho cuộc gọi

system.time(myfunction())

Là:

    user  system elapsed   
  117.36    5.65  127.86

'Người dùng' và 'hệ thống' đo lường cái gì?



1
Câu hỏi này có thể sử dụng tiêu đề tốt hơn - chẳng hạn như "Đo lường thời gian của 'người dùng' và 'hệ thống' là gì?". Điều này sẽ làm cho câu hỏi rõ ràng hơn đối với những người duyệt danh sách.
Sharpie

Câu trả lời:


48

Điều này được thảo luận trong ?proc.time( system.time()trả về một đối tượng của lớp "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.

.... và

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

Lời giải thích rõ ràng nhất mà tôi từng đọc về sự khác biệt giữa usersystemthời gian đã trôi qua được William Dunlap cung cấp trên [R-help] :

"Thời gian CPU của người dùng" cung cấp thời gian CPU dành cho tiến trình hiện tại (tức là phiên R hiện tại) và "thời gian CPU hệ thống" cung cấp thời gian CPU do nhân (hệ điều hành) sử dụng thay mặt cho tiến trình hiện tại. Hệ điều hành được sử dụng cho những việc như mở tệp, thực hiện nhập hoặc xuất, khởi động các quy trình khác và xem đồng hồ hệ thống: các hoạt động liên quan đến tài nguyên mà nhiều quy trình phải chia sẻ.

Mặc dù ?proc.timetrả về một cái gì đó tương tự, mô tả này dễ hiểu hơn nhiều đối với tôi.


22

Dưới đây là một số giải thích đơn giản:

Thời gian đã trôi qua là thời gian được tính cho (các) CPU cho biểu thức.

Giờ Người dùng là giờ đồng hồ treo tường. Thời gian mà bạn với tư cách là một người dùng đã trải qua.

Thường thì cả hai thời điểm đều tương đối gần nhau. Nhưng chúng có thể thay đổi trong một số trường hợp khác. Ví dụ:

  • Nếu thời gian trôi qua> thời gian người dùng , điều này có nghĩa là CPU đang chờ một số hoạt động khác (có thể là bên ngoài) được thực hiện.
  • Nếu thời gian trôi qua <thời gian người dùng , điều này có nghĩa là máy của bạn có nhiều lõi và có thể sử dụng chúng

18

Vì những điều này dù sao cũng là chung chung, từ Wikipedia:

Lúc đầu, thuật ngữ 'thời gian CPU của người dùng' có thể gây hiểu nhầm một chút. Nói rõ hơn, tổng thời gian (thời gian thực của CPU) là sự kết hợp giữa lượng thời gian CPU dành để thực hiện một số hành động cho một chương trình và lượng thời gian CPU dành để thực hiện các lệnh gọi của hệ thống thay mặt chương trình. Khi một chương trình lặp qua một mảng, nó đang tích lũy thời gian CPU của người dùng. Ngược lại, khi một chương trình thực hiện một lệnh gọi hệ thống chẳng hạn như execute hoặc fork, thì nó đang tích lũy thời gian CPU của hệ thống.

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


2

Vì các biến thời gian đó được xác định bởi hệ điều hành của bạn, bạn có thể truy xuất thông tin về cách chúng được tính bằng cách thực thi man timetrong trình bao của bạn (trên Unix):

... Các thống kê này bao gồm (i) thời gian thực đã trôi qua từ khi gọi đến khi kết thúc, (ii) thời gian CPU của người dùng (tổng của tms_utimetms_cutimecác giá trị trong tms cấu trúc được trả về theo thời gian (2)) và (iii) thời gian CPU hệ thống (tổng các giá trị tms_stimetms_cstimegiá trị trong một cấu trúc tms được trả về bởi lần (2)).

Định nghĩa của các biến thời gian được đề cập có thể được tìm thấy tại đây :

tms_utime Thời gian CPU của người dùng.

tms_stime Thời gian CPU hệ thống.

tms_cutime Thời gian CPU của người dùng của các tiến trình con bị chấm dứt.

tms_cstime Thời gian CPU hệ thống của các tiến trình con bị chấm dứt.

Việc làm rõ sự khác biệt giữa thời gian của người dùng và hệ thống được mô tả trong câu trả lời của daroczig và ở những nơi khác trên SO :

Phần tms_utimetử là lượng thời gian dành cho việc thực thi mã của bạn hoặc mã trong thư viện C. Phần tms_stimetử là lượng thời gian dành cho việc thực thi mã nhân thay mặt bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.