W jaki sposób czas procesora i użycie procesora są takie same?

23

Na stronie Wikipedii czasu procesora , to mówi

Czas procesora jest mierzony w taktach zegara lub sekundach. Często przydatny jest pomiar czasu procesora jako procent pojemności procesora, który nazywa się zużyciem procesora.

Nie rozumiem, jak czas można zastąpić procentem. Kiedy patrzę na to top, czy nie %CPUmówi mi, że MATLABużywa 2.17 moich rdzeni?

  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      

Pytanie

Aby lepiej zrozumieć, jakie jest użycie procesora, jak samodzielnie obliczyć zużycie procesora?

Jasmine Lognnes
źródło
Naciśnij „1”, gdy masz otwarte „u góry”, aby uzyskać większą szczegółowość dla poszczególnych rdzeni.
Peter
To jest numer jeden ( 1).
Michael Hampton
Niech Linux pokaże, jak zajęty jest każdy procesor tym żądaniem z wiersza poleceń. mpstat -P WSZYSTKIE 5 3 wprowadź status wieloprocesorowy co 5 sekund 3 przedziały. Podziel% procesora zgłaszany przez liczbę rdzeni, aby uzyskać średni% zajętości procesora. iostat -xm 5 3 enter powie ci, ile rdzeni / procesorów masz dostępnych.
Wilson Hauck,

Odpowiedzi:

32

Czas procesora jest alokowany w dyskretnych przedziałach czasu (tyknięć). Przez określoną liczbę przedziałów czasowych procesor jest zajęty, innym razem nie jest (co jest reprezentowane przez proces bezczynności). Na poniższym zdjęciu procesor jest zajęty przez 6 z 10 segmentów procesora. 6/10 = .60 = 60% czasu zajętości (i dlatego byłoby 40% czasu bezczynności).

wprowadź opis zdjęcia tutaj

Procent określa się jako „ilości lub szybkości, która jest wyrażona jako pewną liczbę części czegoś podzielona na 100 części”. Tak więc w tym przypadku te części są odrębnymi przedziałami czasu, a czymś są przedziały czasu zajętości w porównaniu do przedziałów czasu bezczynności - szybkość przedziałów zajętości do czasu bezczynności.

Ponieważ procesory działają w paśmie GHz (miliardy cykli na sekundę). System operacyjny dzieli ten czas na mniejsze jednostki zwane paskami. Nie są to tak naprawdę 1/10 sekundy. Szybkość tykania w systemie Windows wynosi 10 milionów tyknięć na sekundę, aw Linuksie jest to sysconf(_SC_CLK_TCK)(zwykle 100 tyknięć na sekundę).

W czymś takim top, zajęte cykle procesora są następnie dzielone na procenty, takie jak czas użytkownika i czas systemowy. W topsystemach Linux i perfmon w systemie Windows często pojawia się ekran o wartości przekraczającej 100%, to znaczy, ponieważ suma wynosi 100% * liczba_powodów.

W systemie operacyjnym, to Terminarz'a praca przeznaczyć te cenne plastry do procesów, a więc to, co donosi scheduler to.

Kyle Brandt
źródło
1
Przedziały czasu nie są mierzone w miliardowych częściach sekundy. Nie są tacy niscy. Są one bardziej prawdopodobne gdzieś pomiędzy 0,1 ms a 10 ms. Rozdzielczość wartości czasu w interfejsach API nie jest taka sama jak częstotliwość przerwań timera. Niektóre wywołania API w Linuksie mają czasy określone w nanosekundach, ale nie chciałbyś, aby timer przerywał tak często. Gdybyś miał milion przerwań na sekundę, cały procesor spędziłby cały czas na przełącznikach kontekstu.
kasperd
2
Masz na myśli 1000 kleszczy? Wszystkie moje systemy Linux są albo 1000 tyknięć (EL5 i EL6), albo 1000 tyknięć + tików (EL7). Czy masz na myśli coś innego?
Michael Hampton
1
Strona podręcznika mówi: „Odpowiednia zmienna jest przestarzała”. Nie sądzę, że można na tym polegać. Sprawdziłem konfigurację jądra w /boot/config-2.6.32 - cokolwiek to jest w tym miesiącu ...
Michael Hampton
1
Aha, nie, nie są zgłaszane tak samo. CLK_TCK jest skalowaną wartością jawnie dla przestrzeni użytkownika i najwyraźniej zawsze wynosi 100, niezależnie od tego, ile tyków faktycznie używa jądro. Znaleziono kilka dobrych wyjaśnień na temat SO ( 1 , 2 )
Michael Hampton
2
Myślę też, że „tyknięcia” systemu Windows, do których odwołuje się to wywołanie API, nie są takie same jak częstotliwość przerwań czasomierza systemu Windows , a zatem nie są tak naprawdę porównywalne.
Michael Hampton
15

Czas procesora to czas, w którym proces korzysta z procesora - konwersja na procent odbywa się poprzez podzielenie przez ilość czasu, który upłynął.

Tak więc, jeśli mam proces, który wykorzystuje 1 sekundę czasu procesora przez okres 2 sekund, używa 50% procesora.

W przypadku procesu MATLAB 217% wskazuje, że zużywa on 2,17 sekundy czasu procesora na sekundę w ciągu ostatniego okresu próbkowania - skutecznie monopolizując 2 rdzenie procesora i zajmując jedną trzecią.

Shane Madden
źródło
5
Lub może zużywać 25% z 8 procesorów i część dziewiątej.
Bob Jarvis - Przywróć Monikę