'htop' не показує правильний% CPU, але 'top' робить


12

Під час роботи 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

Які прапори ви використовуєте для htop?
sep332

sep332 ... Я просто запускаю "htop" ... так що це стосується будь-яких за замовчуванням.
Пітер.О

Бінго! sep332 .. зробіть відповідь на це, і я позначу це вирішеним .. Ви змусили мене переглядати мої налаштування за замовчуванням .... "H" - це кнопка перемикання для "Сховати потоки користувачів" ... Коли все інше не вдається " Прочитайте інформаційну допомогу ", але іноді зручна підказка у правій дирекції допомагає більше. Дякую.
Пітер.О

@ Peter.O: Випадково скажений (тачпад миші!). Я скасую його, якщо ви відредагуєте свою публікацію.
SabreWolfy

Відповіді:


24

Як ви самі сказали, ви можете натиснути, Hщоб показати потоки користувачів.

Просто для подальшої довідки (і для розваги) давайте розрахуємо використання процесора!

Трохи фону:

У сучасній операційній системі є Scheduler. Він спрямований на те, щоб усі Процеси та їх нитки отримували справедливу частку часу на обчислення. Я не буду надто сильно вступати в планування (це дуже складно). Але врешті-решт є щось, що називається чергою запуску . Тут викладені всі вказівки всіх процесів, щоб дочекатися їх черги.

Будь-який процес ставить свої "завдання" на чергу запуску, і як тільки процесор готовий, він вискакує їх і виконує їх. Наприклад, коли програма переходить у режим сну, наприклад, вона видаляється з черги запуску та повертається до "кінця рядка", як тільки вона буде готова знову запуститися.

Сортування за цією чергою має відношення до пріоритету процесів (також називається "приємне значення" - тобто процес приємний щодо системних ресурсів).

Довжина черги визначає Навантаження системи. Наприклад, завантаження 2,5 означає, що є 2,5 інструкції для кожної інструкції, з якою CPU може працювати в режимі реального часу .

У Linux, до речі, це навантаження обчислюється в інтервалах 10 мс (за замовчуванням).

Тепер про відсоткові значення використання процесора:

Уявіть, у вас є два годинники, один називається, tі він представляє реальний час . Він вимірює секунду на кожну секунду. Інший годинник ми дзвонимо c. Вона запускається лише в тому випадку, якщо є обробка. Це означає, що тільки коли процес щось обчислює, годинник працює. Це також називається час процесора. Кожен процес у системі 'отримав' один із них.

Тепер використання процесора може бути обчислено для одного процесу:

U = c / t = 0,5s / 1s = 0,5

або для всіх процесів:

alt текст

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

Вікіпедія надає такий приклад:

Програмне забезпечення, що працює на 6-центральному процесорі UNIX, створює три процеси UNIX для виконання вимог користувача. Кожен із цих трьох процесів створює дві нитки. Робота програмного забезпечення рівномірно розподілена на 6 незалежних потоках виконання, створених для програми. Якщо зачекання ресурсів не зачекане, очікується, що загальний час процесора в 6 разів перевищить реальний час.

Ось невеликий фрагмент пітона, який робить це

>>> 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%. (Насправді це було б неправильно через складні речі, такі як очікування вводу-виводу, планування неефективності тощо)

На відміну від навантаження , ці обчислення завжди призводять до значення між 0 і кількістю процесорів, тобто від 0 до 1 або від 0 до 100%. Зараз немає можливості розмежовувати машину, яка виконує три завдання, використовуючи 100% процесор, і машину, яка виконує мільйон завдань, отримуючи ледь будь-яку роботу на будь-якій одній з них, також на 100%. Якщо ви, наприклад, намагаєтесь збалансувати купу процесів на багатьох комп’ютерах, використання процесора поруч із марною. Навантаження - це те, що ви хочете там.

Зараз насправді існує більше одного з таких годин обробки часу. Наприклад, є один для очікування вводу / виводу. Таким чином, ви також можете розрахувати використання ресурсів вводу / виводу.

Це може бути не корисним щодо початкового питання, але я сподіваюся, що це цікаво. :)


Я дійсно повинен був би включити значення невизначеності, тому що, використовуючи цей простий метод, обчислення, ймовірно, буде вимкнено на ± 1%, але я не хотів усіх занадто нудити.
Стефано Палацо

Дякую за урок Я знав більшість із цього, але кілька речей були більш конкретні, ніж те, що я дізнався.
NightwishFan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.