เวลาของ 'ผู้ใช้' และ 'ระบบ' วัดในเอาต์พุต R system.time (exp) คืออะไร


91

ฉันกำลังใช้system.time(expression)เพื่อวัดเวลาดำเนินการสำหรับฟังก์ชัน R

ผลลัพธ์ที่ฉันได้รับสำหรับการโทร

system.time(myfunction())

คือ:

    user  system elapsed   
  117.36    5.65  127.86

'ผู้ใช้' และ 'ระบบ' วัดอะไร?



1
คำถามนี้สามารถใช้ชื่อเรื่องที่ดีกว่าเช่น "เวลาของ 'ผู้ใช้' และ 'ระบบ' วัดได้อย่างไร? สิ่งนี้จะทำให้คำถามชัดเจนขึ้นสำหรับผู้ที่เรียกดูรายการ
Sharpie

คำตอบ:


49

สิ่งนี้จะกล่าวถึงใน?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เวลาที่ผ่านไปได้รับจากWilliam Dunlap ใน [R-help] :

"เวลา CPU ของผู้ใช้" ให้เวลา CPU ที่ใช้โดยกระบวนการปัจจุบัน (เช่นเซสชัน R ปัจจุบัน) และ "เวลา CPU ของระบบ" ให้เวลา CPU ที่ใช้โดยเคอร์เนล (ระบบปฏิบัติการ) ในนามของกระบวนการปัจจุบัน ระบบปฏิบัติการใช้สำหรับสิ่งต่างๆเช่นการเปิดไฟล์การทำอินพุตหรือเอาต์พุตการเริ่มกระบวนการอื่น ๆ และการดูนาฬิกาของระบบ: การดำเนินการที่เกี่ยวข้องกับทรัพยากรที่หลายกระบวนการต้องใช้ร่วมกัน

แม้ว่าจะ?proc.timeส่งคืนสิ่งที่คล้ายกัน แต่คำอธิบายนี้ก็เข้าใจง่ายกว่ามากสำหรับฉัน


24

คำอธิบายง่ายๆมีดังนี้

เวลาที่ผ่านไปคือเวลาที่เรียกเก็บจาก CPU สำหรับนิพจน์

User Timeคือเวลาของนาฬิกาแขวน เวลาที่คุณเป็นผู้ใช้พบ

โดยปกติแล้วทั้งสองครั้งจะค่อนข้างใกล้เคียงกัน แต่อาจแตกต่างกันไปในบางสถานการณ์ ตัวอย่างเช่น:

  • หากเวลาที่ผ่านไป> เวลาของผู้ใช้นั่นหมายความว่า CPU กำลังรอการดำเนินการอื่น ๆ (อาจจะเป็นภายนอก)
  • หากเวลาที่ผ่านไป <เวลาของผู้ใช้หมายความว่าเครื่องของคุณมีหลายคอร์และสามารถใช้งานได้

18

เนื่องจากสิ่งเหล่านี้เป็นเรื่องธรรมดาจาก Wikipedia:

คำว่า 'เวลา CPU ของผู้ใช้' อาจทำให้เข้าใจผิดได้เล็กน้อยในตอนแรก เพื่อความชัดเจนเวลาทั้งหมด (เวลาจริงของ CPU) คือการรวมกันของระยะเวลาที่ CPU ใช้ในการดำเนินการบางอย่างสำหรับโปรแกรมและระยะเวลาที่ CPU ใช้ในการดำเนินการเรียกเคอร์เนลของระบบในนามของโปรแกรม เมื่อโปรแกรมวนซ้ำผ่านอาร์เรย์โปรแกรมจะสะสมเวลา CPU ของผู้ใช้ ในทางกลับกันเมื่อโปรแกรมเรียกใช้การเรียกระบบเช่น exec หรือ fork จะเป็นการสะสมเวลา CPU ของระบบ

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


2

เนื่องจากตัวแปรเวลาเหล่านั้นถูกกำหนดโดยระบบปฏิบัติการของคุณคุณจึงสามารถดึงข้อมูลเกี่ยวกับวิธีคำนวณโดยดำเนินการman timeในเชลล์ของคุณ (บน Unix):

... สถิติเหล่านี้ประกอบด้วย (i) เวลาจริงที่ผ่านไประหว่างการเรียกและการยุติ (ii) เวลา CPU ของผู้ใช้ (ผลรวมของค่าtms_utimeและtms_cutimeค่าในโครงสร้าง tms ที่ส่งกลับด้วยเวลา (2)) และ (iii) เวลา CPU ของระบบ (ผลรวมของค่าtms_stimeและtms_cstimeในโครงสร้าง tms ที่ส่งคืนตามเวลา (2))

คำจำกัดความของตัวแปรเวลาดังกล่าวสามารถพบได้ที่นี่ :

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.