Во время работы 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
Как вы сами сказали, вы можете нажать H kbd>, чтобы показать пользовательские темы.
Просто для дальнейшего использования (и для удовольствия), давайте посчитаем загрузку ЦП!
Немного предыстории:
В современной операционной системе есть Планировщик , Он направлен на то, чтобы все процессы и их потоки получали справедливую долю вычислительного времени. Я не буду вдаваться в подробности планирования (это действительно сложно). Но, в конце концов, есть нечто, называемое очередь выполнения . Именно здесь все инструкции всех процессов выстраиваются в очередь, чтобы дождаться своей очереди.
Любой процесс помещает свои «задачи» в очередь выполнения, и, когда процессор готов, он выталкивает их и выполняет. Например, когда программа переходит в спящий режим, она удаляет себя из очереди выполнения и возвращается к «концу строки», как только она снова готова к запуску.
Сортировка в этой очереди имеет отношение к приоритету процессов (также называемому «хорошим значением» - т. Е. Процесс хорош в отношении системных ресурсов).
Длина очереди определяет нагрузку системы. Например, загрузка 2,5 означает, что для каждой инструкции, с которой может работать ЦП, есть 2,5 инструкции в реальном времени .
Кстати, в Linux эта нагрузка рассчитывается с интервалами в 10 мс (по умолчанию).
Теперь перейдем к процентным значениям загрузки ЦП:
Представьте, что у вас есть два часа, один называется t
, и он представляет реального времени . Он измеряет секунду за каждую секунду. Другие часы мы называем c
. Он запускается только при наличии обработки. Это означает, что только когда процесс вычисляет что-то, часы работают. Это также называется временем процессора. Каждый процесс в системе «получил» один из них.
Загрузка процессора теперь может быть рассчитана для одного процесса:
или для всех процессов:
На многоядерной машине это может привести к значению 3,9, конечно, потому что ЦП может вычислять стоимость вычислений за четыре секунды каждую секунду, если используется идеально.
Википедия предоставляет такой пример:
Программное приложение, работающее на 6-CPU UNIX-машине, создает три UNIX-процесса для выполнения требований пользователя. Каждый из этих трех процессов создает два потока. Работа программного приложения равномерно распределена на 6 независимых потоков исполнения, созданных для приложения. Если ожидание ресурсов не требуется, ожидается, что общее время ЦП будет в шесть раз превышать реальное время.
blockquote>Вот небольшой фрагмент кода 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 Сейчас в действительности существует более одного из этих часов времени обработки. Например, есть один для ожидания ввода / вывода. Таким образом, вы также можете рассчитать использование ресурсов ввода / вывода.
Возможно, это не помогло с первоначальным вопросом, но я надеюсь, что это интересно. :)