เวลา CPU และการใช้ CPU เป็นอย่างไร


23

ในหน้า Wikipedia สำหรับเวลา CPUมันบอกว่า

เวลาของ CPU วัดจากเวลาเป็นวินาทีหรือวินาที บ่อยครั้งจะเป็นประโยชน์ในการวัดเวลา CPU เป็นเปอร์เซ็นต์ของความจุของ CPU ซึ่งเรียกว่าการใช้งาน CPU

ฉันไม่เข้าใจว่าสามารถแทนที่ช่วงเวลาเป็นเปอร์เซ็นต์ได้อย่างไร เมื่อฉันดูtopไม่ได้%CPUบอกฉันว่าMATLABใช้ 2.17 ของแกนของฉันหรือไม่

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18118 jasl      20   0 9248400 261528  78676 S 217.2  0.1   8:14.75 MATLAB      

คำถาม

เพื่อให้เข้าใจได้ดีขึ้นว่าการใช้ CPU คืออะไรฉันจะคำนวณการใช้งาน CPU ได้อย่างไร


กด '1' ในขณะที่คุณเปิด 'ด้านบน' เพื่อรวบรวมข้อมูลที่ละเอียดยิ่งขึ้นบนพื้นฐานของคอร์
ปีเตอร์

นั่นคือหมายเลขหนึ่ง ( 1)
Michael Hampton

ให้ Linux แสดงว่าตัวประมวลผลแต่ละตัวยุ่งแค่ไหนในคำขอบรรทัดคำสั่งนี้ mpstat -P ALL 5 3 ป้อนสถานะมัลติโปรเซสเซอร์ 5 วินาที 3 ช่วงเวลา แบ่ง% CPU ที่รายงานด้วยจำนวนคอร์ของคุณเพื่อรับ CPU ไม่ว่าง% โดยเฉลี่ย iostat -xm 5 3 enter จะบอกให้คุณทราบถึงจำนวน cores / CPU ที่คุณมี
วิลสัน Hauck

คำตอบ:


32

เวลา CPU ถูกจัดสรรในส่วนเวลาแยก (ติ๊ก) สำหรับช่วงเวลาที่แน่นอนซีพียูไม่ว่างบางครั้งก็ไม่ใช่ (ซึ่งแสดงโดยกระบวนการว่าง) ในภาพด้านล่าง CPU ไม่ว่างสำหรับ6 ใน 10 ของ CPU บางส่วน 6/10 = .60 = 60% ของเวลาไม่ว่าง (และจะมีเวลาว่าง 40%)

ป้อนคำอธิบายรูปภาพที่นี่

เปอร์เซ็นต์ถูกกำหนดให้เป็น "จำนวนหรืออัตราที่จะแสดงเป็นจำนวนที่แน่นอนของชิ้นส่วนของสิ่งที่แบ่งออกเป็น 100 ส่วน" ดังนั้นในกรณีนี้ชิ้นส่วนเหล่านี้คือชิ้นส่วนที่แยกจากกันของเวลาและบางสิ่งบางอย่างคือชิ้นส่วนเวลาไม่ว่างเทียบกับช่วงเวลาที่ไม่ได้ใช้งาน - อัตราของชิ้นส่วนที่ไม่ว่างเพื่อช่วงเวลาว่าง

เนื่องจาก CPU ทำงานใน GHz (พันล้านรอบต่อวินาที) ระบบปฏิบัติการแบ่งเวลาเป็นหน่วยเล็ก ๆ ที่เรียกว่าเห็บ พวกมันไม่ใช่ 1/10 ของวินาที อัตราติ๊กใน windows คือ10 ล้านเห็บในหนึ่งวินาทีและในลินุกซ์ก็คือsysconf(_SC_CLK_TCK)(ปกติ 100 เห็บต่อวินาที)

ในบางสิ่งบางอย่างเช่นtopวงจร CPU ไม่ว่างจะถูกแบ่งออกเป็นเปอร์เซ็นต์ของสิ่งต่าง ๆ เช่นเวลาผู้ใช้และเวลาของระบบ ในtopบน Linux และ perfmon ใน Windows คุณมักจะได้รับการแสดงผลที่เกิน 100% นั่นเป็นเพราะผลรวมคือ 100% * the_number_of_cpu_cores

ในระบบปฏิบัติการมันเป็นหน้าที่ของตัวจัดตารางเวลาในการจัดสรรส่วนที่มีค่าเหล่านี้ให้กับกระบวนการดังนั้นตัวจัดตารางเวลาจึงเป็นสิ่งที่รายงานสิ่งนี้


1
การแบ่งเวลาไม่ได้วัดในหน่วยพันล้านในหนึ่งวินาที พวกเขาไม่สั้น พวกเขามีแนวโน้มที่จะอยู่ระหว่าง 0.1 ms ถึง 10 ms การแก้ไขค่าเวลาใน API ไม่เหมือนกับอัตราการขัดจังหวะตัวจับเวลา การเรียก API บางอย่างใน Linux มีการระบุเวลาเป็นนาโนวินาที แต่คุณไม่ต้องการการขัดจังหวะตัวจับเวลาเป็นประจำ หากคุณมีหนึ่งล้านอินเตอร์รัปต์ต่อวินาทีคุณจะใช้เวลา CPU ทั้งหมดกับการสลับบริบท
kasperd

2
คุณหมายถึง 1,000 เห็บ? ระบบ Linux ของฉันทั้งหมดมี 1,000 ticks (EL5 และ EL6) หรือ1,000 ticks + tickless (EL7) หรือคุณหมายถึงอย่างอื่น?
Michael Hampton

1
หน้าคนพูดว่า: "ตัวแปรที่เกี่ยวข้องล้าสมัย" ฉันไม่คิดว่าสามารถพึ่งพาได้ ฉันตรวจสอบการกำหนดค่าเคอร์เนลใน / boot/config-2.6.32- ไม่ว่าจะเป็นเดือนนี้ ...
Michael Hampton

1
อ๊ะไม่พวกเขาไม่ได้รายงานเหมือนกัน CLK_TCK เป็นค่าที่ปรับขนาดอย่างชัดเจนสำหรับ userspace และเห็นได้ชัดว่าเป็น 100 เสมอโดยไม่คำนึงถึงจำนวนการใช้งานจริงของเคอร์เนล พบคำอธิบายที่ดีเกี่ยวกับ SO ( 1 , 2 )
Michael Hampton

2
ฉันยังคิดว่า Windows "เห็บ" ว่าการเรียก API นั้นไม่เหมือนกับความถี่จับเวลาของ Windows interruptและดังนั้นจึงไม่สามารถเทียบเคียงได้
Michael Hampton

15

เวลาของ CPU คือเวลาที่กระบวนการใช้ CPU - การแปลงเป็นเปอร์เซ็นต์จะทำโดยการหารด้วยจำนวนเวลาจริงที่ผ่านไป

ดังนั้นถ้าฉันมีกระบวนการที่ใช้เวลา 1 วินาทีของ CPU ในช่วงเวลา 2 วินาทีก็จะใช้ CPU 50%

ในกรณีของกระบวนการ MATLAB ของคุณ 217% ระบุว่าใช้เวลา CPU 2.17 วินาทีต่อวินาทีในช่วงเวลาตัวอย่างล่าสุด - อย่างมีประสิทธิภาพผูกขาด 2 คอร์ CPU และใช้เวลาหนึ่งในสาม


5
หรืออาจใช้ 25% ของ 8 CPU และเป็นส่วนหนึ่งของเก้า
Bob Jarvis - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.