Как процессорное время и загрузка процессора одинаковы?

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», пока у вас открыт «top», чтобы собрать больше детализации для каждого ядра.
Питер
Это номер один ( 1).
Майкл Хэмптон
Пусть Linux покажет вам, насколько занят каждый процессор этим запросом командной строки. mpstat -P ALL 5 3 введите для состояния многопроцессорности 5 секунд 3 интервала. Разделите% CPU, указанный на количество ядер, чтобы получить среднее значение% занятости CPU. В iostat -xm 5 3 введите, сколько ядер / процессоров у вас есть.
Уилсон Хаук

Ответы:

32

Время процессора распределяется в дискретных временных срезах (тиках). В течение определенного количества временных интервалов процессор занят, в других случаях это не так (что представлено процессом в режиме ожидания). На рисунке ниже процессор занят для 6 из 10 срезов процессора. 6/10 = .60 = 60% занятого времени (и поэтому было бы 40% простоя).

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

Процент определяется как «число или скорости , что выражается в виде некоторого числа частей , разделенных на что - то 100 частей». Таким образом, в этом случае эти части представляют собой дискретные интервалы времени, а временные интервалы заняты по сравнению с интервалами простоя - частота занятых до простоя интервалов.

Так как процессоры работают в ГГц (миллиарды циклов в секунду). Операционная система разрезает это время на более мелкие единицы, называемые тиками. Они на самом деле не 1/10 секунды. Частота тиков в окнах составляет 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 имеют время, определенное в наносекундах, но вы не хотели бы, чтобы прерывания по таймеру выполнялись так часто. Если бы у вас было миллион прерываний в секунду, вы бы тратили все процессорное время на переключение контекста.
Касперд
2
Ты имеешь в виду 1000 тиков? Все мои системы Linux имеют либо 1000 тиков (EL5 и EL6), либо 1000 тиков + без тиков (EL7). Или ты имеешь в виду что-то еще?
Майкл Хэмптон
1
Страница man говорит: «Соответствующая переменная устарела». Я не думаю, что на это можно положиться. Я проверил конфигурацию ядра в /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 процессоров и часть девятого.
Боб Джарвис - Восстановить Монику