«htop» не показывает правильный% процессора, но «top» показывает

Во время работы mencoder с потоками = 4 (на четырехъядерном процессоре). Я заметил, что htop не показывает его истинное использование процессора, но top показывает.

Кажется, что htop сообщает только об одном ядре . Это ошибка / ограничение htop ? Что здесь происходит?

Других записей для mencoder нет в ps, htop или top. Я предполагаю, что 100% означает, что 1 ядро ​​исчерпано, но даже это кажется мне странным; как насчет других ядер?

Обновление: добавлен вывод «Системный монитор»

                  PID   %CPU   COMMAND                    
           "top"  1869   220   mencoder                 
          "htop"  1869    95   mencoder -noodml /media/...  
"System Monitor"  1869   220   mencoder
11
задан 23 June 2012 в 16:33

1 ответ

Как вы сами сказали, вы можете нажать H , чтобы показать пользовательские темы.

Просто для дальнейшего использования (и для удовольствия), давайте посчитаем загрузку ЦП!

Немного предыстории:

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

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

Сортировка в этой очереди имеет отношение к приоритету процессов (также называемому «хорошим значением» - т. Е. Процесс хорош в отношении системных ресурсов).

Длина очереди определяет нагрузку системы. Например, загрузка 2,5 означает, что для каждой инструкции, с которой может работать ЦП, есть 2,5 инструкции в реальном времени .

Кстати, в Linux эта нагрузка рассчитывается с интервалами в 10 мс (по умолчанию).

Теперь перейдем к процентным значениям загрузки ЦП:

Представьте, что у вас есть два часа, один называется t, и он представляет реального времени . Он измеряет секунду за каждую секунду. Другие часы мы называем c. Он запускается только при наличии обработки. Это означает, что только когда процесс вычисляет что-то, часы работают. Это также называется временем процессора. Каждый процесс в системе «получил» один из них.

Загрузка процессора теперь может быть рассчитана для одного процесса:

U = c/t = 0.5s / 1s = 0.5

или для всех процессов:

alt text

На многоядерной машине это может привести к значению 3,9, конечно, потому что ЦП может вычислять стоимость вычислений за четыре секунды каждую секунду, если используется идеально.

Википедия предоставляет такой пример:

Программное приложение, работающее на 6-CPU UNIX-машине, создает три UNIX-процесса для выполнения требований пользователя. Каждый из этих трех процессов создает два потока. Работа программного приложения равномерно распределена на 6 независимых потоков исполнения, созданных для приложения. Если ожидание ресурсов не требуется, ожидается, что общее время ЦП будет в шесть раз превышать реальное время.

Вот небольшой фрагмент кода Python, который делает это

>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %

В идеальном мире из этого можно сделать вывод, что загрузка системы составляет 100 - 66,93 = 33,1%. (Но в действительности это было бы неправильно из-за сложных вещей, таких как ожидание ввода / вывода, планирование неэффективности и т. Д.)

В отличие от нагрузки , эти вычисления будут всегда [ 119] приводят к значению от 0 до числа процессоров, то есть от 0 до 1 или от 0 до 100%. В настоящее время нет способа провести различие между машиной, на которой выполняются три задачи, использующей 100% ЦП, и машиной, выполняющей миллион задач, выполняющей едва ли любую работу, выполненную на одной из них, даже на 100%. Например, если вы пытаетесь сбалансировать кучу процессов на многих компьютерах, загрузка ЦП практически бесполезна. Загрузка - это то, что вам нужно.

1132 Сейчас в действительности существует более одного из этих часов времени обработки. Например, есть один для ожидания ввода / вывода. Таким образом, вы также можете рассчитать использование ресурсов ввода / вывода.

Возможно, это не помогло с первоначальным вопросом, но я надеюсь, что это интересно. :)

0
ответ дан 23 June 2012 в 16:33

Другие вопросы по тегам:

Похожие вопросы: