Как посчитать загрузку процессора

Обновлено: 07.07.2024

на моем рабочем столе у меня есть небольшой виджет, который говорит мне о моем текущем использовании процессора. Он также показывает использование для каждого из моих двух ядер.

Я всегда задавался вопросом, как процессор вычисляет, сколько его вычислительной мощности используется? Кроме того, если процессор зависает, делая некоторые интенсивные вычисления, как он может (или что-то еще обрабатывает эту активность) изучить использование, не зависая также?

процессор не выполняет вычисления использования сам по себе. Он может иметь аппаратные функции, чтобы сделать эту задачу проще, но это в основном работа операционной системы. Поэтому очевидно, что детали реализаций будут отличаться (особенно в случае многоядерных систем).

общая идея состоит в том, чтобы увидеть, как долго очередь вещей, которые процессор должен сделать. Операционная система может периодически просматривать планировщик, чтобы определить количество вещей, которые он должен сделать.

это функция Linux in (ripped from Wikipedia), которая выполняет указанный расчет:

что касается второй части вашего вопроса, большинство современных операционных систем многовекторной. Это означает, что ОС не собирается позволять программам занимать все время обработки и не иметь никаких для себя (если вы не сделать это). Другими словами, даже если приложение появляется зависшим, ОС может еще украсть немного времени для своей работы.

  • когда мы переключаемся на простаивающую задачу, установите t = текущее время
  • когда мы переключаемся от простой задачи, добавьте (текущее время-t) к текущему итогу

чтобы получить загрузку процессора, периодически пробуйте в общей сумме время процесса, и найти разницу.

например, если это время процессора для процесса 1:

и затем вы получаете их снова через две секунды, и они:

вы вычитаете время ядра (для разницы 0.03 ) и время пользователя ( 0.61 ), сложите их вместе ( 0.64 ), и разделить на время выборки 2 секунды ( 0.32 ).

таким образом, за последние две секунды процесс использовал в среднем 32% процессорного времени.

конкретные системные вызовы, необходимые для получения этой информации (очевидно) различны на каждой платформе. На Windows, вы можете использовать GetProcessTimes или GetSystemTimes если вы хотите, чтобы ярлык в общей сумме используется или простоя процессорного времени.

один из способов сделать это следующим образом:

выберите интервал выборки, скажем, каждые 5 минут (300 секунд) реального времени. Вы можете получить это от gettimeofday .

получить время процесса, которое вы использовали в этом 300 секунд. Вы можете использовать times() позвоните, чтобы получить это. Это было бы new_process_time - old_process_time , где old_process_time это время процесса, которое вы сохранили с последнего интервала времени.

ваш процент процессора тогда (process_time/elapsed_time)*100.0 Вы можете установить сигнал тревоги, чтобы сигнализировать вам каждые 300 секунд, чтобы сделать эти расчеты.

у меня есть процесс, который я не хочу использовать более определенное процентное процессора. Этот метод работает довольно хорошо, и хорошо согласуется с моим системным монитором. Если мы используем слишком много процессора,мы немного спим.

ну, насколько я понимаю там гигант

цикл, что операционные системы вращается вверх. Ваш процесс управляется из этого цикла. Это позволяет выполнять внешний код непосредственно на процессоре в кусках. Не преувеличивая слишком много, это uber-упрощение того, что на самом деле происходит.

Возник вдруг такой вопрос: что такое загрузка процессора которую мы видим в виндовом Task Manager и как она узнается?

Я понимаю так: процессор в самом простом случае — это сумматор, которому на вход подаются два числа, дается инструкция что сделать с этими числами и куда записать результат. Инструкция — может быть сложение, вычитание, деление и т.п. и т.п. Возьмем простейший процессор, у которого всего одно ядро, два регистра. Который не умеет выполнять несколько инструкций за такт, а делает всего одну. Если правильно я понимаю, то такой процессор может выполняет все входящий инструкции последовательно. Такой процессор или выполняет в данный момент инструкцию, или нет. Т.е. они или загружен, или нет. Что в данном случае будет означать загрузка процессора 31% и как она высчитывается?

Здравствуйте, PaulMinelly, Вы писали:

PM>Возник вдруг такой вопрос: что такое загрузка процессора которую мы видим в виндовом Task Manager и как она узнается?

система, упрощенно говоря, выделяет каждому процессу процессорное время квантами по n миллисекунд(на самом деле не все так просто, но не будем на этом останавливаться. Если интересно — подробности у Руссиновича). Процесс может использоавть весь квант времени и тогда по его истечении система отберет у него управление или добровольно отдать управление системе до завершения кванта. Загрузка процессора для данного процесса определяется как отношение количества полностью использованных квантов времени к общему их числу на некотором промежутке.

. << RSDN@Home 1.2.0 alpha rev. 685>>

Здравствуйте, PaulMinelly, Вы писали:

PM>Я понимаю так: процессор в самом простом случае — это сумматор, которому на вход подаются два числа, дается инструкция что сделать с этими числами и куда записать результат. Инструкция — может быть сложение, вычитание, деление и т.п. и т.п. Возьмем простейший процессор, у которого всего одно ядро, два регистра. Который не умеет выполнять несколько инструкций за такт, а делает всего одну. Если правильно я понимаю, то такой процессор может выполняет все входящий инструкции последовательно. Такой процессор или выполняет в данный момент инструкцию, или нет. Т.е. они или загружен, или нет. Что в данном случае будет означать загрузка процессора 31% и как она высчитывается?

Если планировщик обнаруживает, что ни один поток в данный момент времени не готов (все чего-то ждут), то процессор останавливается до прихода ближайшего системного сигнала (от таймера или от контроллера периферии). Хорошие процессоры имеют для этого инструкцию halt, а хорошие ОС её используют. (Windows95 не использовала, а сидела в спинлоке; специально против этого писались всякие программные кулеры, которые исполняли в низком приоритете поток с циклом, содержащим halt).

Соотношение работы и простоя в среднем, скажем, за секунду, можно посчитать и показать. 31% — значит, 310мс процессор работал, 690мс ждал.

Здравствуйте, PaulMinelly, Вы писали:

PM>Возник вдруг такой вопрос: что такое загрузка процессора которую мы видим в виндовом Task Manager и как она узнается?

And if you listen very hard the alg will come to you at last.

У Соломона с Руссиновичем вроде что-то говорилось про процесс (или процессы? — не помню) — который крутится на минимальном приоритете и занимается всякой хренью, типа зануления данных в неиспользуемых страницах.

Здравствуйте, Mr.Cat, Вы писали:

MC>У Соломона с Руссиновичем вроде что-то говорилось про процесс (или процессы? — не помню) — который крутится на минимальном приоритете и занимается всякой хренью, типа зануления данных в неиспользуемых страницах.

Често говоря, подробностей устройства idle process'а в Винде не знаю, но думаю, что занулить ту пару-тройку свободных гигабайт памяти можно где-то за секунду, а дальше остается только крутить пустой цикл.

And if you listen very hard the alg will come to you at last.

Здравствуйте, PaulMinelly, Вы писали:

PM>Возник вдруг такой вопрос: что такое загрузка процессора которую мы видим в виндовом Task Manager и как она узнается?

Гугл молчит про Windows, поэтому расскажу лучше про Unix, наверняка в других ОС похоже. Основная юниксовая метрика — это Load Average, которая вычисляется как усредненное (с экспоненциальным скольжением) количество процессов, готовых к исполнению. Процессы в планировщике могут находиться, грубо говоря, в двух состояниях: ожидание (В/В, например) и готовность. Если средняя длина очереди больше единицы, то процессор не справляется с нагрузкой.

Если бы Винда крутила пустой цикл, то загрузка процессора всегда была бы 100%.

Это если считать загрузка процессора = процент времени, которое он работает. А если считать, что загрузка процессора = процент времени работы на нем запущенных программ и полезных функций системы, то загрузка может быть и меньше 100%.

And if you listen very hard the alg will come to you at last.

Здравствуйте, subdmitry, Вы писали:

S>Это если считать загрузка процессора = процент времени, которое он работает. А если считать, что загрузка процессора = процент времени работы на нем запущенных программ и полезных функций системы, то загрузка может быть и меньше 100%.

Разработчикам Винды, как несложно догадаться, было ближе второе определение.

And if you listen very hard the alg will come to you at last.

Здравствуйте, subdmitry, Вы писали:

S>Здравствуйте, subdmitry, Вы писали:

S>>Это если считать загрузка процессора = процент времени, которое он работает. А если считать, что загрузка процессора = процент времени работы на нем запущенных программ и полезных функций системы, то загрузка может быть и меньше 100%.

S>Разработчикам Винды, как несложно догадаться, было ближе второе определение.

Сложно понять вот это: что если бы пустой цикл работал все время и грузил проц на 100% (хотя бы даже если бы винда и не показывала это в менеджере, умно этот момент вычитая) — то проц бы грелся нормально, что я бы увидел по системным алертам и по гулу вентилятора. Такого нет, выходит пустой цикл проц не грузит совсем. Более того, в длительные моменты когда я ничего не делаю — температура проца падает до 37 градусов (это с 60-то с лишним). Выходит пустой цикл вообще проц не грузит. Так? Это ведь просто наблюдения и логические рассуждения.

Здравствуйте, PaulMinelly, Вы писали:

PM>Сложно понять вот это: что если бы пустой цикл работал все время и грузил проц на 100% (хотя бы даже если бы винда и не показывала это в менеджере, умно этот момент вычитая) — то проц бы грелся нормально, что я бы увидел по системным алертам и по гулу вентилятора. Такого нет, выходит пустой цикл проц не грузит совсем. Более того, в длительные моменты когда я ничего не делаю — температура проца падает до 37 градусов (это с 60-то с лишним). Выходит пустой цикл вообще проц не грузит. Так? Это ведь просто наблюдения и логические рассуждения.

Честно говоря, я не знаю, какие именно энергосберегающие инструкции Винда выполняет в этом цикле. Может быть какие-то "легкие" для поцессора команды, которые его мало задействуют и греют. Может быть тот самый halt.

And if you listen very hard the alg will come to you at last.

Здравствуйте, PaulMinelly, Вы писали:

PM>Сложно понять вот это: что если бы пустой цикл работал все время и грузил проц на 100% (хотя бы даже если бы винда и не показывала это в менеджере, умно этот момент вычитая) — то проц бы грелся нормально, что я бы увидел по системным алертам и по гулу вентилятора. Такого нет, выходит пустой цикл проц не грузит совсем. Более того, в длительные моменты когда я ничего не делаю — температура проца падает до 37 градусов (это с 60-то с лишним). Выходит пустой цикл вообще проц не грузит. Так? Это ведь просто наблюдения и логические рассуждения.

Ответ очень простой — винда не крутит никаких пустых циклов. Когда процессору нечем заняться винда делает ему hlt

. << RSDN@Home 1.2.0 alpha rev. 685>>

Здравствуйте, Sergey Chadov, Вы писали:

SC>Здравствуйте, PaulMinelly, Вы писали:

PM>>Сложно понять вот это: что если бы пустой цикл работал все время и грузил проц на 100% (хотя бы даже если бы винда и не показывала это в менеджере, умно этот момент вычитая) — то проц бы грелся нормально, что я бы увидел по системным алертам и по гулу вентилятора. Такого нет, выходит пустой цикл проц не грузит совсем. Более того, в длительные моменты когда я ничего не делаю — температура проца падает до 37 градусов (это с 60-то с лишним). Выходит пустой цикл вообще проц не грузит. Так? Это ведь просто наблюдения и логические рассуждения.

SC>Ответ очень простой — винда не крутит никаких пустых циклов. Когда процессору нечем заняться винда делает ему hlt

"On modern processors, where a HLT (halt) instruction saves significant amounts of power and heat, the idle task almost always consists of a loop which repeatedly executes HLT instructions."

Таким образом, там есть и цикл, и hlt инструкции.

And if you listen very hard the alg will come to you at last.

Здравствуйте, subdmitry, Вы писали:

S>"On modern processors, where a HLT (halt) instruction saves significant amounts of power and heat, the idle task almost always consists of a loop which repeatedly executes HLT instructions."

S>Таким образом, там есть и цикл, и hlt инструкции.

цикл там несомненно есть, но он далеко не пустой. Команда hlt останавливает процессор до того момента как придет прерывание(от таймера например).
Обработчик прерывания смотрит, грубо говоря, есть ли чем заняться и если нет, опять вызывает hlt.
Это все же совсем не то же самое, что "крутить пустые циклы"

When no runnable thread exists on a CPU, Windows 2000 dispatches the per-CPU idle thread. Each CPU is allotted one idle thread because on a multiprocessor system one CPU can be executing a thread while other CPUs might have no threads to execute. Windows 2000 reports the priority of the idle thread as 0. In reality, however, such threads don't have a priority level because they run only when there are no threads to run. (Remember, only one thread per Windows 2000 system is actually running at priority 0—the zero page thread.) In fact, the idle loop runs at DPC/dispatch level, polling for work to do: deferred procedure calls (DPCs) to deliver or threads to dispatch to. Although some details of the flow vary between architectures, the basic flow of control of the idle thread is as follows:

Enables and disables interrupts (allowing any pending interrupts to be delivered).
Checks whether any DPCs (described in Chapter 3) are pending on the processor. If DPCs are pending, clears the pending software interrupt and delivers them.
Checks whether a thread has been selected to run next on the processor, and if so, dispatches that thread.
Calls the HAL processor idle routine (in case any power management functions need to be performed).

Здравствуйте, Sergey Chadov, Вы писали:

SC>цикл там несомненно есть, но он далеко не пустой. Команда hlt останавливает процессор до того момента как придет прерывание(от таймера например).
SC>Обработчик прерывания смотрит, грубо говоря, есть ли чем заняться и если нет, опять вызывает hlt.
SC>Это все же совсем не то же самое, что "крутить пустые циклы"

Спасибо за уточнение, не знал.

Насчет исходного вопроса "как узнает?" Я так понимаю, что Винда использует инструкцию rdtsc, возвращающую количество прошедших тактов с момента старта системы, с помощью которой нетрудно очень точно узнать время исполнения временного интервала, выданного тому или иному процессу. Переключение между процессами (кроме случаев их явной сдачи полномочий посредством функций типа Sleep, GetMessage и всякими синхонизационными вроде EnterCriticalSection, WaitForSingleObject и т.д.), насколько я понимаю, делается по прерыванию таймера?

And if you listen very hard the alg will come to you at last.

Здравствуйте, PaulMinelly, Вы писали:

PM>Возник вдруг такой вопрос: что такое загрузка процессора которую мы видим в виндовом Task Manager и как она узнается?

Можно посмотреть исходники ReactOS base/applications/taskmgr/perfdata.c

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth

Скажите, вот если есть достаточно быстрый процессор, есть один поток занимающийся интенсивными вычислениями. Но кэш очень медленный и обращение к кэшу занимает десять тактов. Т.е. процессор 2 такта тратит на полезные вычисления, другие 8 тактов — на доступ к кэшу (или памяти). Таким образом получается ратио количества_тактов_на_инструкцию = 4.

Скажите, будет ли показываться загрузка процессора 100% в данном случае или будет 20%?

Здравствуйте, PaulMinelly, Вы писали:

PM>Скажите, вот если есть достаточно быстрый процессор, есть один поток занимающийся интенсивными вычислениями. Но кэш очень медленный и обращение к кэшу занимает десять тактов. Т.е. процессор 2 такта тратит на полезные вычисления, другие 8 тактов — на доступ к кэшу (или памяти). Таким образом получается ратио количества_тактов_на_инструкцию = 4.

PM>Скажите, будет ли показываться загрузка процессора 100% в данном случае или будет 20%?

100%, что означает, что процессор всё время занят.

А если запустить 5 таких потоков, то load average будет 500%.

Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, PaulMinelly, Вы писали:

PM>>Скажите, вот если есть достаточно быстрый процессор, есть один поток занимающийся интенсивными вычислениями. Но кэш очень медленный и обращение к кэшу занимает десять тактов. Т.е. процессор 2 такта тратит на полезные вычисления, другие 8 тактов — на доступ к кэшу (или памяти). Таким образом получается ратио количества_тактов_на_инструкцию = 4.

PM>>Скажите, будет ли показываться загрузка процессора 100% в данном случае или будет 20%?

RO>100%, что означает, что процессор всё время занят.

RO>А если запустить 5 таких потоков, то load average будет 500%.

Т.е. процессор занят, даже если он ничего не делает и ожидает загрузки данных из памяти?

Как посмотреть нагрузку на процессор

Процессор компьютера может работать на полной мощности или простаивать. При этом не всегда полная загрузка или, наоборот, бездеятельность ЦП может быть обусловлена действиями пользователя. Для того чтобы посмотреть нагрузку на процессор, узнать, какие приложения или процессы его нагружают, и отследить это можно, воспользовавшись сторонними программами или стандартными мониторами Windows.

Смотрим нагрузку на процессор

Способ 1: AIDA64

Основная вкладка в AIDA64

Вкладка Системная плата в AIDA64

Таким образом, AIDA64 даёт возможность нагрузку процессора в разрезе. К сожалению, общую загруженность процессора с помощью программы не посмотреть.

Способ 2: Process Explorer

Главное окно в Process Explorer

Вкладка мониторинга CPU в Process Explorer

Промежуточный итог гласит, что Process Explorer предстаёт довольно информативной и удобной программой, когда нужно посмотреть общую нагрузку на ЦП и его потоки.

Способ 3: Системные средства

Открытие диспетчера задач в Windows

Вкладка Процессы Диспетчера задач Windows

Вкладка Производительность Диспетчера задач Windows

Монитор ресурсов Windows

Можно сказать, что стандартные инструменты Windows в рассматриваемом вопросе являются более чем исчерпывающим решением как для просмотра общей нагрузки на CPU, так и в разрезе для отдельных потоков.

В итоге остаётся сказать, что узнать загруженность процессора в режиме реального времени и с фиксацией на определённых моментах не составляет труда благодаря встроенным мониторам ОС и стороннему софту типа AIDA64 и Process Explorer.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Помогла ли вам эта статья?

Еще статьи по данной теме:

Здравствуйте. У меня такой вопрос, почему когда открываю Процесс Экспрорер у меня на 10-14 секунд идет нагрузка на цп 40-60%, а потом снижается до 1-9%. Есть ли у меня какой либо скрытый майнер, или это ничто иное как баг? (Моя операционная система Windows 10) Заранее огромное спасибо за ответ!

Здравствуйте. Описанная Вами ситуация может возникать из-за множества причин:

1) Сама указанная программа может нагружать процессор при запуске в ряде специфических случаев.

2) Параллельно включённые приложения могут начать конфликтовать из-за ресурсов и повышать нагрузку.

3) Первоначальные (в течение упомянутого времени) данные могут быть некорректными из-за особенностей работы программы с процессором.

И так далее и тому подобное.

Для того чтобы мы могли дать наиболее верный ответ нам необходимы уточнения. Ощущаете ли вы нагрузку на процессор при обычном пользовании? Косвенно это может проявляться в высокой скорости процессорного кулера. Всегда ли происходит скачок нагрузки, когда вы запускаете Process Explorer? Подтверждает ли нагрузку Диспетчер приложений? Вы открываете один Процесс Эксплорер или же на фоне работают другие приложения? За те 10 секунд нагрузки, успеваете ли вы посмотреть, что за приложение расходует мощность ЦПУ? Ответы на эти вопросы помогут нам разобраться в ситуации и помочь Вам.

Рекомендуем ознакомиться с материалами по нагрузке вирусам, майнерам и о том, как их удалять.

Задайте вопрос или оставьте свое мнение Отменить комментарий

Здравствуйте.

Одна и та же модель ЦП в разных ПК и ноутбуках может работать с разной частотой (и обеспечивать разную производительность). Чтобы узнать реальную производительность и сравнить ее с другими ЦП (этой же модели и других) — необходимо прибегнуть к спец. тестам.

Собственно, ниже я приведу несколько вариантов таких тестов, которые могут быть полезны как для обычной оценки производительности, так и для диагностики системы в целом (например, чтобы протестировать систему охлаждения, оптимизировать настройки электропитания, и пр.).

Предупреждение : для объективных результатов перед любыми тестами закройте все ресурсоёмкие приложения (игры, редакторы, торренты и пр.).

ускорение ПК

Способы узнать реальную производительность ЦП

Вариант 1: AIDA 64 + HWMonitor (узнаем температуру и реальную частоту)

Далее в AIDA 64 перейти в меню "Сервис" и нажать по "Тест стабильности системы" .

Сервис - тест стабильности

Сервис - тест стабильности / AIDA 64

После, в той же AIDA 64 поставьте галочку напротив пункта "Stress CPU" и нажмите кнопку "Start" . Затем внимательно наблюдайте показания в HWMonitor — частоту (Clocks) и температуру (Temperatures).

Примечание : в моем случае (см. скрин ниже) удалось выяснить, что ЦП работал на частоте 1694 Mhz (хотя потенциально он мог держать больше 3000 Mhz). Как выяснилось, виной тому были настройки электропитания — после их сброса, ЦП стал "шустрее".

Стресс тест пошел - смотрим за температурой, частотой и вольтажом

Стресс тест пошел - смотрим за температурой, частотой и вольтажом / Кликабельно

На производительность процессора (да и компьютера в целом) могут влиять настройки электропитания ! Проверьте, чтобы в настройках в Windows стояла макс. производительность и в настройках драйверов не было ограничений.

Вариант 2: CPU-Z (сравнение с другими ЦП)

CPU-Z ( ссылка на офиц. сайт) — совсем небольшая утилита для просмотра характеристик ЦП, ОЗУ, материнской платы, видеокарты и пр. Также в ее арсенале есть простой и достаточно эффективный тест ЦП, который поможет не только узнать реальную производительность вашего "камня", но и сравнить ее с другими моделями.

Извлекаем и запускаем CPU-Z

Извлекаем и запускаем CPU-Z

Далее во вкладке "CPU" удостоверьтесь, что ваш ЦП определился утилитой, т.е. отображаются его модель, характеристики ( прим.: некоторые новые модели ЦП утилита "не знает" и может работать с ними некорректно).

После перейдите во вкладку "Bench" и нажмите по кнопке "Bench CPU" .

Bench CPU / старт теста

Bench CPU / старт теста

Когда тест будет завершен — в строке "This Processor" вы увидите значение своего ЦП (чтобы оценить его по отношению к наиболее новым ЦП на текущий момент - выберите один из эталонов в строке "Reference" ).

В моем случае, ЦП примерно в 2-2,5 раза медленнее, чем достаточно популярный Intel i7-770K.

Reference - сравниваем с популярными ЦП

Reference - сравниваем с популярными ЦП

Вариант 3: CineBench (еще одно сравнение)

CineBench ( ссылка на офиц. сайт) — добротный бенчмарк, позволяющий быстро и достаточно точно определить реальную производительность процессора и видеокарты. Для теста используются трехмерные сцены (картины), которые необходимо просчитать и "прорисовать".

Примечание: программа полностью на английском, в установке не нуждается.

Cinebench - запустить проверку

CineBench - запустить проверку

Далее у вас начнет "рисоваться" картинка. Нужно просто подождать пока все черные области на полотне не будут заменены.

Рисуется картинка

Результаты теста в Cinebench

Результаты теста в CineBench

Вариант 4: просмотр загрузки ЦП в играх

Оценить загрузку ЦП можно непосредственно в одной отдельно взятой игре (прим.: просто часто задают вопросы вида: "Из-за чего тормозит игра, из-за ЦП или видеокарты?").

Для этого нужна утилита FPS Monitor — она покажет не только FPS, но и температуры, загрузку ЦП (каждого ядра), ОЗУ, сети. Более подробно об этом в статье, ссылка на которую представлена ниже.

Скриншот с показаниями из игры WOW / FPS Monitor

Скриншот с показаниями из игры WOW / FPS Monitor

Обратите внимание, что, когда на ЦП идет высокая нагрузка и он перестает справляться — вы заметите красные значения напротив определенных ядер.

Макс. нагрузка на ядро ЦП

Макс. нагрузка на ядро ЦП

В общем-то, благодаря этой утилите можно достаточно быстро оценить, справляется ли ЦП с игрой, и из-за него ли она притормаживает.

Читайте также: