Что использование % означает в htop, если только 1 процесс может выполниться за один раз?

Я всегда думал, что это было:
.текущий/рабочий каталог
.. → родительский каталог

Это было некоторое время, но не думает, что VMS имел их.

4
09.07.2014, 20:50
3 ответа
[

] Это статистика: 50% означает "половина процессора за время", если посмотреть глубже, то можно узнать, что это за время. [

]
0
27.01.2020, 20:56

Топ показывает использование в течение некоторого периода времени - по умолчанию, примерно 3 секунды. В основном он показывает, какой процент процессорного времени используется за этот интервал. И обратите внимание, что этот процент может быть более 100% - если бы у вас был один процесс, работающий в два потока и занимающий оба ядра двухядерной системы, вы бы увидели цифру около 195% в столбце %CPU для этого процесса.

Чтобы добавить некоторые подробности, как описано в man-странице:

       k: %CPU  --  CPU usage
          The task's share of the elapsed  CPU  time  since  the  last  screen
          update,  expressed as a percentage of total CPU time.  In a true SMP
          environment, if 'Irix mode' is Off, top  will  operate  in  'Solaris
          mode'  where  a task's cpu usage will be divided by the total number
          of CPUs.  You toggle 'Irix/Solaris' modes with the  'I'  interactive
          command.
...
       -d : Delay time interval as:  -d ss.tt (seconds.tenths)
            Specifies the delay between screen updates, and overrides the cor-
            responding value in  one's  personal  configuration  file  or  the
            startup  default.   Later  this can be changed with the 'd' or 's'
            interactive commands.
...
           Global_defaults
              'A' - Alt display      Off (full-screen)
            * 'd' - Delay time       3.0 seconds
              'I' - Irix mode        On  (no, 'solaris' smp)
            * 'p' - PID monitoring   Off
            * 's' - Secure mode      Off (unsecured)
              'B' - Bold disable     Off

Итак, столбец %CPU - это процент от общего процессорного времени машины с момента последнего обновления экрана. Вы можете изменить время между обновлениями экрана либо в командной строке, либо в интерактивном режиме, но по умолчанию оно составляет 3 секунды. По умолчанию включен режим Irix и в многопроцессорной системе %CPU может быть >100%, но режим Irix можно отключить, чтобы процентное время было уменьшено в зависимости от количества ядер.

4
27.01.2020, 20:56

Краткий ответ

  • Ядро Linux подсчитывает использование в мгновениях(Единица времени процессора ), /proc/<PID>/statпоказывает, сколько мгновений использует один процесс с момента его запуска
  • htopсравнивает два моментальных снимка суммированных jiffies (, разделенных на количество потоков ЦП ). Интервал между этими двумя временными точками можно настроить с помощью -d --delay=DELAYв десятых долях секунды. например. 1sинтервал обновления (по умолчанию 1.5s, т.е.-d 15):
htop -d 10
  • 100%означает, что один процесс использовал 1 поток ЦП все время в наблюдаемом временном окне (, например. 1.5второй ). Такое значение может быть нерепрезентативным в течение более длительного периода.
  • Вы можете использовать клавиши + /-для изменения интервала обновления

Подробное объяснение

Лучшим источником будет исходный код:)(для Linux, ищите LinuxProcessList_scanCPUTimeфункцию ).

  1. htopчитает PROCSTATFILE, который указывает на общую статистику системы, хранящуюся в /proc/stat, вы можете проверить это самостоятельно:
$ cat /proc/stat

Значения для каждого процесса см. в :

.
/proc/<PID>/stat
  1. В первой строке показано общее использование ЦП, а в столбцах у нас есть следующие значения
usertime, nicetime, systemtime, idletime, ioWait, irq, softIrq, steal, guest, guestnice
  1. Следующие строки показывают одинаковые значения для каждого ядра ЦП (потока ).
  2. Общее время вычисляется как:
totaltime = usertime + nicetime + systemalltime + idlealltime + steal + virtalltime

  1. totaltimeделится на число процессоров($ nprocзначение в Linux ).
double period = (double)this->cpus[0].totalPeriod / cpus;

Наконец, в LinuxProcessList_recurseProcTreeпроцент вычисляется как использование между двумя метками времени

percent_cpu = (period < 1e-6) ? 0.0f : ((lp->utime + lp->stime - lasttimes) / period * 100.0);
  • utimeВремя ЦП, потраченное на пользовательский код, измеренное в тактах
  • stimeВремя ЦП, затраченное на код ядра, измеряемое в тактах
  • lasttimes— предыдущее «время»lp->utime + lp->stime(в тактах)
  1. Наконец, единицы времени, используемые в этих вычислениях, основаны на мигах, см. man 7 timeдля получения дополнительной информации.
 t * 100 / jiffy

, где jiffy— количество тактов часов в секунду вместо обычного времени.

 jiffy = sysconf(_SC_CLK_TCK);

Вы можете получить значение такта часов, используя:

$ getconf CLK_TCK
100

(что означает, что вы можете игнорировать это вычисление, если вы не используете специальное оборудование или Linux реального времени -и т. д.)

3
10.12.2020, 15:36

Теги

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