'htop' không hiển thị% CPU chính xác, nhưng 'top' thì không


12

Trong khi chạy mencodervới chủ đề = 4 (trên cpu lõi tứ). Tôi đã nhận thấy rằng htopnó không hiển thị việc sử dụng CPU thực sự của nó , nhưng topcó.

Có vẻ như htop chỉ báo cáo trên một lõi . Đây có phải là một lỗi / giới hạn của htop ? Chuyện gì đang xảy ra ở đây?

Không có mục khác cho bộ mã hóa hiển thị trong pshay htophay top. Tôi giả định rằng 100% có nghĩa là 1 lõi được tối đa hóa, nhưng ngay cả điều này có vẻ kỳ lạ đối với tôi; Còn các lõi khác thì sao?

Cập nhật: đã thêm đầu ra "System Monitor"

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

Những lá cờ bạn đang sử dụng cho htop?
sep32

sep32 ... Tôi chỉ chạy "htop" ... vì vậy đó là trường hợp mặc định là gì.
Peter.O

Chơi lô tô! sep332 .. đưa ra câu trả lời từ đó và tôi sẽ đánh dấu nó đã được giải quyết .. Bạn đã cho tôi xem mặc định của mình .... "H" là một phím chuyển đổi thành "Ẩn chủ đề người dùng" ... Khi tất cả các lỗi khác " Đọc thông tin trợ giúp ", nhưng đôi khi một gợi ý hữu ích trong directon đúng giúp nhiều hơn .. Cảm ơn.
Peter.O

@ Peter.O: Vô tình bị hạ cấp (bàn di chuột!). Tôi sẽ hủy nó nếu bạn chỉnh sửa bài viết của mình.
SabreWolfy

Câu trả lời:


24

Như bạn đã nói, bạn có thể nhấn Hđể hiển thị chủ đề người dùng.

Chỉ để tham khảo trong tương lai (và cho vui), hãy tính toán sử dụng CPU!

Một chút nền tảng:

Trong một hệ điều hành hiện đại, có một Trình lập lịch biểu. Nó nhằm mục đích đảm bảo rằng tất cả các Quy trình và chủ đề của chúng có được một phần thời gian tính toán hợp lý. Tôi sẽ không lên lịch trình quá nhiều (nó thực sự phức tạp). Nhưng cuối cùng, có một thứ gọi là hàng đợi chạy . Đây là nơi tất cả các hướng dẫn của tất cả các quy trình xếp hàng để chờ đến lượt chúng được thực thi.

Bất kỳ quy trình nào cũng đặt "nhiệm vụ" của nó lên hàng đợi chạy và khi bộ xử lý sẵn sàng, nó sẽ tắt chúng và thực thi chúng. Ví dụ, khi một chương trình đi ngủ, nó sẽ tự xóa khỏi hàng đợi chạy và trở về "cuối dòng" khi nó sẵn sàng để chạy lại.

Sắp xếp trên hàng đợi này phải được thực hiện theo Ưu tiên của các quy trình (còn được gọi là "giá trị tốt đẹp" - tức là một quy trình tốt về tài nguyên hệ thống).

Độ dài của hàng đợi xác định Tải của hệ thống. Ví dụ, tải 2,5 có nghĩa là có 2,5 lệnh cho mỗi lệnh mà CPU có thể xử lý trong thời gian thực .

Nhân tiện, trên Linux, tải này được tính theo các khoảng thời gian 10ms (theo mặc định).

Bây giờ vào các giá trị Phần trăm của việc sử dụng CPU:

Hãy tưởng tượng bạn có hai đồng hồ, một được gọi tvà nó đại diện cho thời gian thực . Nó đo một giây cho mỗi giây. Đồng hồ khác chúng tôi gọi c. Nó chỉ chạy nếu có xử lý để làm. Điều đó có nghĩa là, chỉ khi một quá trình tính toán một cái gì đó thì đồng hồ mới chạy. Đây cũng được gọi là thời gian CPU. Mỗi và mọi quy trình trên hệ thống 'đã có' một trong số đó.

Việc sử dụng bộ xử lý bây giờ có thể được tính cho một quy trình duy nhất:

U = c / t = 0,5s / 1s = 0,5

hoặc cho tất cả các quy trình:

văn bản thay thế

Trên một máy đa lõi, điều này có thể dẫn đến giá trị 3,9 tất nhiên, vì CPU có thể tính toán bốn giây tính toán mỗi giây, nếu được sử dụng một cách hoàn hảo.

Wikipedia cung cấp ví dụ này:

Một ứng dụng phần mềm chạy trong máy UNIX 6 CPU tạo ra ba quy trình UNIX để đáp ứng yêu cầu của người dùng. Mỗi trong ba quá trình này tạo ra hai chủ đề. Công việc của ứng dụng phần mềm được phân phối đồng đều trên 6 luồng thực thi độc lập được tạo cho ứng dụng. Nếu không chờ đợi tài nguyên có liên quan, Tổng thời gian CPU dự kiến ​​sẽ gấp sáu lần Thời gian thực đã trôi qua.

Đây là một đoạn trăn nhỏ làm điều này

>>> 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 %

Trong một thế giới hoàn hảo, bạn có thể suy ra rằng hệ thống tải là 100 - 66,93 = 33,1%. (Nhưng trong thực tế, điều đó là sai vì những điều phức tạp như chờ đợi I / O, lập lịch không hiệu quả, v.v.)

Ngược lại với tải , các tính toán này sẽ luôn dẫn đến một giá trị từ 0 đến số lượng bộ xử lý, tức là từ 0 đến 1 hoặc 0 đến 100%. Hiện tại không có cách nào để phân biệt giữa một máy đang chạy ba tác vụ, sử dụng 100% cpu và một máy chạy một triệu tác vụ, hầu như không thực hiện bất kỳ công việc nào trên bất kỳ một trong số chúng, cũng ở mức 100%. Ví dụ, nếu bạn đang cố gắng cân bằng một loạt các quy trình trên nhiều máy tính, việc sử dụng cpu là vô dụng. Tải là những gì bạn muốn ở đó.

Bây giờ trong thực tế, có nhiều hơn một trong những đồng hồ thời gian xử lý. Có một cái để chờ vào I / O chẳng hạn. Vì vậy, bạn cũng có thể tính toán sử dụng tài nguyên I / O.

Điều này có thể không hữu ích đối với câu hỏi ban đầu, nhưng tôi hy vọng nó thú vị. :)


Tôi thực sự nên bao gồm các giá trị không chắc chắn, bởi vì sử dụng phương pháp đơn giản này, phép tính có thể sẽ bị giảm đi 1%, nhưng tôi không muốn làm mọi người nhàm chán quá nhiều.
Stefano Palazzo

Cảm ơn vì bài học. Tôi biết hầu hết những điều đó nhưng một vài điều cụ thể hơn những gì tôi học được.
NightwishFan
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.