Во время работы 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чтобы показать пользовательские темы.
Просто для справки в будущем (и для удовольствия), давайте посчитаем загрузку процессора!
Немного предыстории:
В современной операционной системе есть Планировщик. Он направлен на то, чтобы все процессы и их потоки получали справедливую долю вычислительного времени. Я не буду вдаваться в подробности планирования (это действительно сложно). Но, в конце концов, есть нечто, называемое очередью запуска . Здесь все инструкции всех процессов выстраиваются в очередь, чтобы дождаться своей очереди.
Любой процесс помещает свои «задачи» в очередь выполнения, и когда процессор готов, он выталкивает их и выполняет их. Например, когда программа переходит в спящий режим, она удаляет себя из очереди выполнения и возвращается к концу строки, как только она снова готова к запуску.
Сортировка в этой очереди имеет отношение к приоритету процессов (также называемому «хорошим значением» - то есть процесс хорош в отношении системных ресурсов).
Длина очереди определяет нагрузку на систему. Например, загрузка 2,5 означает, что для каждой инструкции, с которой ЦПУ может работать в режиме реального времени , имеется 2,5 инструкции .
Кстати, в Linux эта нагрузка рассчитывается с интервалами в 10 мс (по умолчанию).
Теперь перейдем к процентным значениям загрузки процессора:
Представьте, что у вас есть два часа, один называется,
t
и он представляет собой реальное время . Он измеряет секунду за каждую секунду. Другие часы мы называемc
. Он запускается только при наличии обработки. Это означает, что только когда процесс вычисляет что-то, часы работают. Это также называется временем процессора. Каждый процесс в системе «имеет» один из них.Загрузка процессора теперь может быть рассчитана для одного процесса:
или для всех процессов:
На многоядерном компьютере это может привести к значению 3,9, конечно, потому что ЦП может рассчитывать четыре секунды вычислений каждую секунду, если используется идеально.
Википедия предоставляет этот пример:
Вот небольшой фрагмент кода Python, который делает это
В идеальном мире из этого можно сделать вывод, что загрузка системы составляет 100 - 66,93 = 33,1%. (Но на самом деле это было бы неправильно из-за сложных вещей, таких как ожидание ввода-вывода, планирование неэффективности и т. Д.)
В отличие от нагрузки , эти вычисления всегда будут давать значение от 0 до числа процессоров, то есть от 0 до 1 или от 0 до 100%. В настоящее время нет способа провести различие между машиной, на которой выполняются три задачи, использующей 100% ЦП, и машиной, выполняющей миллион задач, выполняющей едва ли любую работу, выполненную на одной из них, в том числе на 100%. Например, если вы пытаетесь сбалансировать кучу процессов на многих компьютерах, загрузка ЦП практически бесполезна. Загрузка это то, что вы хотите там.
Сейчас на самом деле существует более одного из этих часов времени обработки. Например, есть один для ожидания ввода / вывода. Таким образом, вы также можете рассчитать использование ресурсов ввода-вывода.
Возможно, это не помогло с оригинальным вопросом, но я надеюсь, что это интересно. :)
источник