Як час процесора та використання процесора однакові?


23

На сторінці Вікіпедії за час процесора , йдеться

Час процесора вимірюється в тактових клітках або секундах. Часто корисно вимірювати час процесора у відсотках від ємності процесора, що називається використанням процесора.

Я не розумію, як тривалість часу можна замінити на відсоток. Коли я дивлюся 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      

Питання

Для того, щоб краще зрозуміти, що таке використання процесора, як я можу сам розрахувати використання процесора?


Натисніть "1", поки у вас відкрито "зверху", щоб отримати більше деталей на основі ядра.
Петро

Це номер один ( 1).
Майкл Хемптон

Нехай Linux покаже вам, наскільки зайнятий кожен процесор цим запитом командного рядка. mpstat -P ВСЕ 5 3 введіть для багатопроцесорного стану 5 секунд 3 інтервали. Розділіть% CPU, повідомлений на вашу кількість ядер, щоб отримати середній процесор зайнятий%. iostat -xm 5 3 enter вкаже, скільки ядер / процесора у вас є.
Вілсон Хоук

Відповіді:


32

Час процесора розподіляється в дискретні часові відрізки (кліщі). Протягом певної кількості часових відрізків процесор зайнятий, в інших випадках - немає (що представлено в режимі очікування). На малюнку нижче процесор зайнятий для 6 з 10 фрагментів процесора. 6/10 = .60 = 60% зайнятого часу (і, отже, буде 40% простою).

введіть тут опис зображення

Відсоток визначається як «число або швидкості , що виражається в вигляді деякого числа частин , розділених на що - то 100 частин». Тож у цьому випадку ці частини - це дискретні відрізки часу, і щось зайняте відрізками часу проти простоїв - швидкість зайнятості до простою.

Оскільки процесори працюють в ГГц (мільярди циклів в секунду). Операційна система нарізає цей час меншими одиницями, які називаються кліщами. Вони насправді не 1/10 секунди. Частота галочок у Windows становить 10 мільйонів кліщів за секунду, а в Linux - це sysconf(_SC_CLK_TCK)зазвичай 100 кліщів в секунду.

Щось подібне top, зайняті цикли процесора потім розбиваються на відсотки речей, таких як час користувача та системний час. У topLinux та perfmon в Windows, ви часто отримуєте дисплей, який перевищує 100%, тобто тому, що загальна сума становить 100% * the_number_of_cpu_cores.

В операційній системі завдання планувальника розподіляти ці дорогоцінні фрагменти для процесів, тому планувальник - це те, про що повідомляє.


1
Часові відрізки не вимірюються мільярдними частками секунди. Вони не такі короткі. Вони швидше десь від 0,1 мс до 10 мс. Роздільна здатність значень часу в API не збігається зі швидкістю переривань таймера. Деякі виклики API в Linux мають час, вказаний в наносекундах, але ви не хочете, щоб таймер часто переривав це. Якби у вас був мільйон перерв в секунду, ви витратили б весь час процесора на контекстні комутатори.
kasperd

2
Ви маєте на увазі 1000 кліщів? Усі мої системи Linux або 1000 тиків (EL5 і EL6), або 1000 тиків + без галочок (EL7). Або ти маєш на увазі щось інше?
Майкл Хемптон

1
На сторінці чоловіка написано: "Відповідна змінна є застарілою." Я не думаю, що на це можна покластися. Я перевірив конфігурацію ядра в /boot/config-2.6.32- як би там не було цього місяця ...
Майкл Хемптон

1
Ага, ні, про них не повідомляють те саме. CLK_TCK - це масштабоване значення, явно виражене для простору користувачів, і, мабуть, завжди 100 незалежно від того, скільки кліщів насправді використовує ядро. Знайшов кілька хороших пояснень щодо SO ( 1 , 2 )
Майкл Хемптон

2
Я також вважаю, що Windows "тикає", на який посилається цей виклик API, не збігається з частотою переривання таймера Windows , і, отже, насправді не можна порівняти.
Майкл Хемптон

15

Час процесора - це час, який процес використовує процесором - перетворення його на відсоток проводиться діленням на пройдений реальний час.

Отже, якщо у мене є процес, який використовує 1 секунду часу процесора протягом 2 секунд, він використовує 50% процесора.

У випадку з вашим процесом MATLAB 217% вказує, що він використовує 2,17 секунди часу процесора в секунду протягом останнього інтервалу вибірки - ефективно, монополізуючи 2 ядра процесора та забираючи частину третини.


5
Або це може використовувати 25% з 8 процесорів та дев'ятої частини.
Боб Джарвіс - Відновіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.