'htop' ไม่แสดง CPU% ที่ถูกต้อง แต่ 'top' ไม่แสดง


12

ขณะที่รันmencoderด้วย threads = 4 (บน cpu quad-core) ฉันพบว่าhtopไม่แสดงตนที่แท้จริงของการใช้งาน CPU แต่topไม่

ดูเหมือนว่าhtopจะรายงานบนแกนเดียวเท่านั้น นี่เป็นข้อบกพร่อง / ข้อ จำกัด ของhtopหรือไม่ เกิดขึ้นที่นี่คืออะไร?

ไม่มีรายการอื่น ๆ สำหรับเป็นmencoderแสดงขึ้นในpsหรือหรือhtop topฉันคิดว่า100%หมายความว่า 1 คอร์นั้นเต็มไปหมด แต่ถึงอย่างนี้ก็ดูแปลกสำหรับฉัน แล้วแกนอื่น ๆ ล่ะ?

อัปเดต: เพิ่มเอาต์พุต "การตรวจสอบระบบ"

                  PID   %CPU   COMMAND                    
           "top"  1869   220   mencoder                 
          "htop"  1869    95   mencoder -noodml /media/...  
"System Monitor"  1869   220   mencoder

คุณใช้ค่าสถานะใดสำหรับ htop
sep332

sep332 ... ฉันเพิ่งเรียกใช้ "htop" ... ดังนั้นจึงเป็นกรณีของค่าเริ่มต้น
Peter.O

บิงโก! sep332 .. ให้คำตอบจากนั้นและฉันจะทำเครื่องหมายว่าได้รับการแก้ไข .. คุณให้ฉันดูที่ค่าเริ่มต้นของฉัน .... "H" เป็นกุญแจสลับไปที่"ซ่อนกระทู้ผู้ใช้" ... เมื่อทุกอย่างล้มเหลว " อ่านข้อมูลช่วยเหลือ "แต่บางครั้งคำใบ้ที่มีประโยชน์ใน directon ที่ถูกต้องช่วยได้มากขึ้น .. ขอบคุณ
Peter.O

@ Peter.O: downvoted โดยไม่ตั้งใจ (ทัชแพดเมาส์!) ฉันจะยกเลิกหากคุณแก้ไขโพสต์ของคุณ
SabreWolfy

คำตอบ:


24

อย่างที่คุณได้พูดไปแล้วคุณสามารถกดHเพื่อแสดงกระทู้ผู้ใช้ได้

เพียงเพื่ออ้างอิงในอนาคต (และเพื่อความสนุกสนาน) ให้การใช้งาน CPU คำนวณของ!

พื้นหลังเล็กน้อย:

ในระบบปฏิบัติการที่ทันสมัยมี Scheduler มันมีจุดมุ่งหมายเพื่อให้แน่ใจว่ากระบวนการและเธรดทั้งหมดจะได้รับส่วนแบ่งที่ยุติธรรมของเวลาในการคำนวณ ฉันจะไม่จัดตารางเวลามากเกินไป (มันซับซ้อนจริงๆ) แต่ในท้ายที่สุดมีสิ่งที่เรียกว่าคิววิ่ง นี่คือที่คำแนะนำทั้งหมดของกระบวนการทั้งหมดเข้าแถวเพื่อรอการเลี้ยวของพวกเขาที่จะดำเนินการ

กระบวนการใด ๆ ที่ทำให้มันเป็น "งาน" ในคิวการทำงานและเมื่อตัวประมวลผลพร้อมแล้วมันก็จะเปิดและประมวลผล ตัวอย่างเช่นเมื่อโปรแกรมเข้าสู่โหมดสลีปโปรแกรมจะลบตัวเองออกจากคิวการทำงานและกลับสู่ "จุดสิ้นสุดของบรรทัด" เมื่อพร้อมที่จะทำงานอีกครั้ง

การเรียงลำดับในคิวนี้เกี่ยวข้องกับลำดับความสำคัญของกระบวนการ(เรียกอีกอย่างว่า "ค่าที่ดี" - นั่นคือกระบวนการดีเกี่ยวกับทรัพยากรระบบ)

ความยาวของคิวจะกำหนดโหลดของระบบ โหลด 2.5 เช่นหมายความว่ามี 2.5 คำแนะนำสำหรับการเรียนการสอนทุก CPU สามารถจัดการกับในเวลาจริง

บน Linux โดยวิธีการโหลดนี้จะคำนวณในช่วงเวลา 10ms (โดยค่าเริ่มต้น)

ตอนนี้เข้าสู่ค่าร้อยละของการใช้งาน CPU:

ลองนึกภาพคุณมีสองนาฬิกาหนึ่งเรียกว่าtและมันหมายถึงเวลาจริง มันวัดวินาทีสำหรับทุกวินาที cสายนาฬิกาเราอื่น ๆ มันจะทำงานถ้ามีการประมวลผลที่ต้องทำ ซึ่งหมายความว่าเฉพาะเมื่อกระบวนการคำนวณสิ่งที่นาฬิกาทำงาน นี่เรียกอีกอย่างว่าเวลา CPU ทุกกระบวนการในระบบ 'มี' หนึ่งในนั้น

ขณะนี้สามารถคำนวณการใช้ประโยชน์ของตัวประมวลผลสำหรับกระบวนการเดียว:

U = c / t = 0.5s / 1s = 0.5

หรือสำหรับกระบวนการทั้งหมด:

ข้อความแสดงแทน

บนเครื่องมัลติคอร์สิ่งนี้อาจส่งผลให้มีค่า 3.9 แน่นอนเพราะ CPU สามารถคำนวณการคำนวณสี่วินาทีทุก ๆ วินาทีหากใช้อย่างสมบูรณ์แบบ

Wikipedia ให้ตัวอย่างนี้:

แอปพลิเคชันซอฟต์แวร์ที่ทำงานในเครื่อง 6-CPU UNIX สร้างกระบวนการ UNIX สามกระบวนการเพื่อตอบสนองความต้องการของผู้ใช้ กระบวนการทั้งสามนี้แต่ละกระบวนการสร้างสองเธรด การทำงานของแอพพลิเคชั่นซอฟต์แวร์มีการกระจายอย่างเท่าเทียมกันใน 6 หัวข้ออิสระของการดำเนินการที่สร้างขึ้นสำหรับแอปพลิเคชัน หากไม่มีการรอทรัพยากรที่เกี่ยวข้องเวลา CPU ทั้งหมดคาดว่าจะเป็นหกครั้งตามเวลาจริง

นี่เป็นตัวอย่างข้อมูลขนาดเล็กของงูหลาม

>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %

ในโลกที่สมบูรณ์แบบคุณสามารถอนุมานได้ว่าภาระของระบบคือ 100 - 66.93 = 33,1% (แต่ในความเป็นจริงที่ผิดเพราะสิ่งที่ซับซ้อนเช่นรอ I / O การตั้งเวลาไร้ประสิทธิภาพเป็นต้น)

ในทางตรงกันข้ามกับภาระการคำนวณดังกล่าวจะเสมอส่งผลให้มีค่าระหว่าง 0 และหมายเลขของตัวประมวลผลคือระหว่าง 0 และ 1 หรือ 0 ถึง 100% ขณะนี้ไม่มีวิธีแยกความแตกต่างระหว่างเครื่องที่ใช้งานสามงานใช้ซีพียู 100% และเครื่องจักรที่ใช้งานนับล้านงานแทบจะไม่ได้ทำงานใด ๆ กับงานเดี่ยว ๆ เลยเช่นกันที่ 100% ตัวอย่างเช่นหากคุณพยายามสร้างความสมดุลของกระบวนการในคอมพิวเตอร์หลาย ๆ เครื่องการใช้ cpu นั้นไม่ได้ผล โหลดเป็นสิ่งที่คุณต้องการมี

ในความเป็นจริงตอนนี้มีมากกว่าหนึ่งในนาฬิกาเวลาการประมวลผล มีอีกอย่างหนึ่งรอ I / O เช่น ดังนั้นคุณสามารถคำนวณการใช้ทรัพยากร I / O ได้เช่นกัน

สิ่งนี้อาจไม่มีประโยชน์เกี่ยวกับคำถามเดิม แต่ฉันหวังว่ามันน่าสนใจ :)


ฉันควรจริงๆได้รวมค่าความไม่แน่นอนเพราะใช้วิธีการที่ง่ายนี้คำนวณอาจจะปิดโดย± 1% แต่ฉันไม่ต้องการที่จะเจาะทุกคนเกินไปมาก
Stefano Palazzo

ขอบคุณสำหรับบทเรียน ฉันรู้ว่าส่วนใหญ่ แต่มีบางสิ่งที่เฉพาะเจาะจงมากกว่าสิ่งที่ฉันเรียนรู้
NightwishFan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.