Podczas pracy mencoder
z wątkami = 4 (na czterordzeniowym procesorze). Zauważyłem, że htop
nie pokazuje to faktycznego wykorzystania procesora, ale top
tak jest.
Wygląda na to, że htop raportuje tylko na jednym rdzeniu . Czy to błąd / ograniczenie htopa ? Co tu się dzieje?
Brak innych wpisów dla mencoder wyświetlanych w ps
lub htop
lub top
. Zakładam, że 100% oznacza, że 1 rdzeń jest maksymalnie wykorzystany, ale nawet to wydaje mi się dziwne; co z pozostałymi rdzeniami?
Aktualizacja: dodano wyjście „Monitor systemu”
PID %CPU COMMAND
"top" 1869 220 mencoder
"htop" 1869 95 mencoder -noodml /media/...
"System Monitor" 1869 220 mencoder
Odpowiedzi:
Jak sam powiedziałeś, możesz nacisnąć przycisk, Haby wyświetlić wątki użytkownika.
Tylko dla odniesienia w przyszłości (i dla zabawy), Policzmy wykorzystanie procesora!
Trochę tła:
W nowoczesnym systemie operacyjnym istnieje program planujący. Ma to na celu zapewnienie, że wszystkie procesy i ich wątki mają równy udział czasu obliczeniowego. Nie będę się zbytnio planował (to naprawdę skomplikowane). Ale w końcu jest coś, co nazywa się kolejką uruchamiania . W tym miejscu wszystkie instrukcje wszystkich procesów ustawiają się w kolejce, aby poczekać na wykonanie kolejki.
Każdy proces umieszcza swoje „zadania” w kolejce uruchamiania, a gdy procesor jest gotowy, odsuwa je i wykonuje. Na przykład, gdy program przechodzi w tryb uśpienia, usuwa się z kolejki uruchamiania i wraca do „końca linii”, gdy jest gotowy do ponownego uruchomienia.
Sortowanie w tej kolejce ma związek z priorytetem procesów (zwanym także „ładną wartością” - tzn. Proces jest niezły pod względem zasobów systemowych).
Długość kolejki określa obciążenie systemu. Na przykład obciążenie 2,5 oznacza, że dla każdej instrukcji, z którą CPU może sobie poradzić w czasie rzeczywistym, są instrukcje 2,5 .
Nawiasem mówiąc, w systemie Linux obciążenie to jest obliczane w odstępach 10 ms (domyślnie).
Teraz na wartości procentowe wykorzystania procesora:
Wyobraź sobie, że masz dwa zegary, jeden nazywa się
t
i reprezentuje czas rzeczywisty . Mierzy sekundę na każdą sekundę. Drugi zegar, który nazywamyc
. Działa tylko wtedy, gdy jest do przetworzenia. Oznacza to, że tylko gdy proces oblicza coś, zegar działa. Nazywa się to również czasem procesora. Każdy proces w systemie „ma” jeden z nich.Wykorzystanie procesora można teraz obliczyć dla jednego procesu:
lub dla wszystkich procesów:
Na maszynie wielordzeniowej może to oczywiście dać wartość 3,9, ponieważ procesor może obliczyć obliczenia o wartości czterech sekund co sekundę, jeśli zostanie to doskonale wykorzystane.
Wikipedia podaje ten przykład:
Oto mały fragment kodu python, który to robi
W idealnym świecie można wywnioskować, że obciążenie systemu wynosi 100 - 66,93 = 33,1%. (Ale w rzeczywistości byłoby to błędne z powodu skomplikowanych rzeczy, takich jak oczekiwanie we / wy, planowanie nieefektywności itp.)
W przeciwieństwie do obciążenia , obliczenia te zawsze będą skutkowały wartością między 0 a liczbą procesorów, tj. Między 0 a 1 lub 0 do 100%. Obecnie nie ma sposobu na rozróżnienie między komputerem, na którym są uruchomione trzy zadania, wykorzystujące 100% procesora, a komputerem, na którym działa milion zadań, wykonując prawie dowolną pracę na jednym z nich, również na poziomie 100%. Jeśli na przykład próbujesz zrównoważyć kilka procesów na wielu komputerach, wykorzystanie procesora jest prawie bezużyteczne. Ładunek jest tam, czego chcesz.
Teraz w rzeczywistości istnieje więcej niż jeden z tych zegarów przetwarzających. Na przykład jeden czeka na I / O. Możesz więc obliczyć wykorzystanie zasobów we / wy.
Może to nie było pomocne w stosunku do pierwotnego pytania, ale mam nadzieję, że jest interesujące. :)
źródło