สิ่งที่เฉพาะเจาะจงคือนาฬิกาเวลา, ผู้ใช้ -cpu-time และ system-cpu-time ใน UNIX?


144

ฉันสามารถเดาได้จากชื่อ แต่สิ่งที่เฉพาะเจาะจงคือนาฬิกาเวลา, ผู้ใช้ -cpu-time และ system-cpu-time ใน UNIX?

เวลาของผู้ใช้ -cpu เป็นระยะเวลาที่ใช้ในการประมวลผลรหัสผู้ใช้หรือไม่ในขณะที่ kernel-cpu ใช้เวลาเป็นระยะเวลาที่ใช้ในเคอร์เนลเนื่องจากต้องการการดำเนินการที่มีสิทธิพิเศษ (เช่น IO to disk)?

หน่วยเวลาคือการวัดนี้ใน

และเวลานาฬิกาแขวนจริงๆจำนวนวินาทีที่กระบวนการใช้กับ CPU หรือเป็นชื่อที่ทำให้เข้าใจผิด?


คำตอบ:


143

เวลานาฬิกาแขวนเป็นเวลาที่นาฬิกาบนผนัง (หรือนาฬิกาจับเวลาในมือ) จะวัดว่าผ่านไปแล้วระหว่างการเริ่มต้นของกระบวนการและ 'ตอนนี้'

เวลาผู้ใช้ -cpu และเวลาของระบบ -cpu นั้นค่อนข้างมากดังที่คุณกล่าว - จำนวนเวลาที่ใช้ในรหัสผู้ใช้และระยะเวลาที่ใช้ในรหัสเคอร์เนล

หน่วยเป็นวินาที (และวินาทีซึ่งอาจเป็น microseconds หรือ nanoseconds)

เวลานาฬิกาแขวนไม่ใช่จำนวนวินาทีที่กระบวนการใช้กับ CPU เป็นเวลาที่ผ่านไปซึ่งรวมถึงเวลาที่ใช้รอการเปิด CPU (ในขณะที่กระบวนการอื่นรัน)


16
ดังนั้นหมายความว่าเวลาผนังนาฬิกาจะเป็นมากขึ้นกว่าระยะเวลาที่ซีพียู?
Pacerier

36
@Pacerier: บนเครื่องแกนเดียวใช่ แต่เครื่องมัลติคอร์และโปรแกรมแบบมัลติเธรดสามารถใช้มากกว่า 1 CPU วินาทีต่อวินาทีที่ผ่านไป
Jonathan Leffler

@JonathanLeffler ขอบคุณสำหรับคำตอบฉันต้องการรับจำนวนนาโนวินาทีที่ผ่านไป แต่การคำนวณเวลาของ CPU โดยใช้สูตรCPUtime = #clock_cycles / clock_rateไม่สามารถเหมือนกับการคำนวณเวลาที่ผ่านไปได้ คุณรู้หรือไม่ว่าฉันสามารถรับเวลาที่ผ่านไปจากเวลา CPU ได้หรือไม่
Bionix1441

2
@ Bionix1441: คุณไม่สามารถหาเวลาที่ผ่านไปจากเวลา CPU ด้วยเหตุผลหลายประการ ขั้นแรกกระบวนการสามารถไม่ได้ใช้งานโดยไม่ใช้เวลา CPU ใด ๆ เป็นระยะเวลาตามอำเภอใจ (ตัวอย่างเช่นกระบวนการ daemon รอให้ไคลเอ็นต์เชื่อมต่อผ่านเครือข่าย) ดังนั้นจึงอาจไม่ทำอะไรเลยในช่วงเวลาที่ผ่านไป . ประการที่สองถ้ามันกำลังทำงานอาจมีหลายเธรดและถ้ามีพูด 4 เธรดและมี 4 คอร์หรือมากกว่าในระบบมันอาจเพิ่ม 4 วินาทีของ CPU ที่พยายามใช้ต่อวินาทีของเวลาที่ผ่านไป สิ่งเหล่านี้แสดงให้เห็นว่าไม่มีสูตรง่าย ๆ (หรือซับซ้อน) ที่คุณสามารถใช้ได้
Jonathan Leffler

1
@Catbuilts: คุณทราบหรือไม่ว่าเคอร์เนล Unix ทำงานแยกจากโปรแกรมผู้ใช้ เมื่อโปรแกรมของคุณจะทำให้การเรียกระบบ (ตัวอย่างเช่นread()หรือgetpid()) เคอร์เนลรันรหัสในนามของโปรแกรมของคุณ เคอร์เนลยังจัดการการทำงานแบบมัลติทาสกิ้งล่วงหน้าเพื่อให้โปรแกรมอื่น ๆ สามารถทำงานได้และทำงานทำความสะอาดทั่วไปบางอย่างเพื่อให้ระบบทำงานได้อย่างราบรื่น รหัสนี้จะทำงานใน 'รหัสเคอร์เนล' (เช่นใน 'โหมดเคอร์เนล') สิ่งนี้แตกต่างจากรหัสที่คุณเขียนและไลบรารีผู้ใช้ (รวมถึงไลบรารีระบบ C) ที่คุณใช้
Jonathan Leffler

36

เวลานาฬิกาแขวน: เวลาที่ผ่านไปตามนาฬิกาภายในของคอมพิวเตอร์ซึ่งควรตรงกับเวลาในโลกภายนอก สิ่งนี้ไม่เกี่ยวกับการใช้งาน CPU มันได้รับสำหรับการอ้างอิง

เวลา CPU ของผู้ใช้และเวลาของระบบ: สิ่งที่คุณคิด ระบบสายซึ่งรวมถึง I / O ที่เรียกเช่นread, writeฯลฯ จะดำเนินการโดยการกระโดดลงในรหัสเคอร์เนลและดำเนินการที่

หากเวลานาฬิกาแขวน <เวลา CPU แสดงว่าคุณกำลังรันโปรแกรมแบบขนาน หากเวลานาฬิกาแขวน> เวลา CPU คุณกำลังรอดิสก์เครือข่ายหรืออุปกรณ์อื่น ๆ

ทั้งหมดจะถูกวัดในไม่กี่วินาทีต่อSI


7

เวลาของนาฬิกาแขวนนั้นตรงกับที่บอกไว้เวลาที่ผ่านไปตามที่วัดได้จากนาฬิกาบนผนังของคุณ (หรือนาฬิกาข้อมือ)

เวลา cpu ของผู้ใช้คือเวลาที่ใช้ใน "user land" นั่นคือเวลาที่ใช้ในกระบวนการที่ไม่ใช่เคอร์เนล

เวลา cpu ของระบบคือเวลาที่ใช้ในเคอร์เนลโดยปกติแล้วเวลาที่ใช้ในการให้บริการการเรียกระบบ


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

จริงหรือนาฬิกาแขวน

จริง 7m2.444s

บนระบบที่มีโปรเซสเซอร์ 24 คอร์ cmd / กระบวนการนี้ใช้เวลา 7+ นาทีในการดำเนินการให้เสร็จสมบูรณ์ นั่นคือการใช้การขนานที่เป็นไปได้มากที่สุดกับแกนที่ให้มาทั้งหมด

ผู้ใช้งาน

ผู้ใช้ 76m14.607s

cmd / โพรเซสใช้เวลา cpu จำนวนมาก กล่าวอีกนัยหนึ่งบนเครื่องที่มีซีพียูแกนเดี่ยวจริงและผู้ใช้จะเท่ากันดังนั้นคำสั่งเดียวกันจะใช้เวลาประมาณ 76 นาที

SYS

sys 2m29.432s

นี่คือเวลาที่เคอร์เนลดำเนินการการดำเนินการระดับพื้นฐาน / ระบบทั้งหมดเพื่อเรียกใช้ cmd นี้รวมถึงการสลับบริบทการจัดสรรทรัพยากร ฯลฯ

หมายเหตุ: ตัวอย่างสมมติว่าคำสั่งของคุณใช้ parallelism / threads

หน้าคนโดยละเอียด: https://linux.die.net/man/1/time


เมื่อให้เวลาที่คุณโพสต์การขนานกันของแบบครึ่ง ๆ นั้นทำได้หรือไม่ (ฉันแค่กำลังทำ(user + sys) / realเพื่อเป็นตัวแทน
dtc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.