загрузка процессора: uptime

Установка, обновление, настройка Linux

Модераторы: Olej, adminn

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

загрузка процессора: uptime

Непрочитанное сообщение Olej » 02 май 2022, 18:59

Цифры uptime помнят все - это "средняя загрузка" за 1, 5, и 15 минут - так пишет man.
Что-то типа такого:

Код: Выделить всё

olej@nvidia:/proc$ uptime
 18:54:28 up  2:43,  1 user,  load average: 0,77, 1,03, 0,92
Те же цифры дают top и htop ...
А почему им давать что-то другое, если все они используют:

Код: Выделить всё

olej@nvidia:/proc$ cat /proc/uptime 
9535.11 35123.37
И в man по /proc (http://man7.org/linux/man-pages/man5/proc.5.html)
/proc/uptime
This file contains two numbers: the uptime of the system
(seconds), and the amount of time spent in idle process
(seconds).
Из этих 2-х чисел за интервальное время можно всё вычислять (я когда-то помнил как и делал это, но сейчас в точности не вспомню ... да и не важно)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка процессора: uptime

Непрочитанное сообщение Olej » 02 май 2022, 19:06

Но при сборке из исходников GoLang (Raspberry Pi 2 - GoLang) вижу такие цифры:

Код: Выделить всё

olej@localhost:~/go/x86_64 $ uptime
 17:59:02 up  3:08,  6 users,  load average: 10,85, 7,61, 4,55

Код: Выделить всё

olej@localhost:~/go/x86_64 $ uptime
 18:32:16 up  3:42,  6 users,  load average: 10,06, 8,60, 7,94
и т.д.
Это на 4-ядерном ARM процессоре:

Код: Выделить всё

olej@localhost:~/go/x86_64 $ inxi -Cxxxf
CPU:       Info: Quad Core model: ARMv7 v7l variant: cortex-a7 bits: 32 type: MCP arch: v7l rev: 5 bogomips: 256 
           Speed: 1000 MHz min/max: 600/1000 MHz Core speeds (MHz): 1: 1000 2: 1000 3: 1000 4: 1000 
           Features: edsp evtstrm fastmult half idiva idivt lpae neon thumb tls vfp vfpd32 vfpv3 vfpv4 
Когда у меня на 1-м процессоре загрузка ~1 - это я понимаю, это 100% загрузка процессора.
Когда у меня на 4-х процессорах загрузка 1 - это я тоже понимаю - 75% времени процессоры простаивают.
А что здесь и как это толковать?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка процессора: uptime

Непрочитанное сообщение Olej » 02 май 2022, 19:10

Olej писал(а):
02 май 2022, 18:59
Из этих 2-х чисел за интервальное время можно всё вычислять
Собственно, это можно подсмотреть в коде утилиты uptime.c :

Код: Выделить всё

  FILE *fp;

  fp = fopen ("/proc/uptime", "r");
  if (fp != NULL)
    {
      char buf[BUFSIZ];
      char *b = fgets (buf, BUFSIZ, fp);
      if (b == buf)
        {
          char *end_ptr;
          double upsecs = c_strtod (buf, &end_ptr);
          if (buf != end_ptr)
            uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
                      ? upsecs : -1);
        }

      fclose (fp);
    }

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузка процессора: uptime

Непрочитанное сообщение Olej » 02 май 2022, 19:58

Linux - начинающим. Что такое Load Average и какую информацию он несет
Автор: Уваров А.С. 29.06.2016
Справа показана ситуация, когда каждый тик был занят своим процессом, но некоторые процессы так и не получили своего тика или не смогли получить, например, ждали окончания операции ввода-вывода. В таком случае загрузка процессора составит все те же 100%, но load average вырастет до 1,33, указывая на наличие очереди.
Искажают ли такие процессы значение load average? На наш взгляд нет. Следует понимать, что средняя загрузка - это не показатель производительности процессора, не результат бенчмарка, не текущая нагрузка, а отношение числа процессов, которым требуются вычислительные ресурсы системы к имеющимся в наличии ресурсам.

Т.е. если у нас имеется 1 процессор и 500 тиков, но за это время процессорные ресурсы требуются тысяче процессов, то нагрузка у нас явно вдвое превышает имеющиеся ресурсы. И то, что часть процессов ждут жесткий диск и процессор работает вхолостую, не говорит о том, что система находится в простое, наоборот, она не может обработать нагрузку, правда по другой, не зависящей от процессора причине.
Подведем промежуточный итог. Load average показывает отношение имеющихся запросов на вычислительные ресурсы к количеству этих самых ресурсов (тиков). Для одного процессора (одного процессорного ядра) использование всех имеющихся ресурсов обозначает load average = 1. Причем это будет справедливо и для Core i7 и для Pentium I, хотя производительность у этих двух процессоров разная.
Теперь перейдем к многопроцессорности и многоядерности. При появлении второго процессора или второго ядра у нас появляются дополнительные вычислительные ресурсы, т.е. же самые 500 тиков. Но за эти 500 тиков система уже может обработать уже 1000 запросов, что покажет нам load average = 2.

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

Это хорошо видно на примере технологии Hyper-threading, которая позволяет сделать из одного физического ядра процессора два виртуальных. Физическая производительность ядра процессора, т.е. количество производимых им вычислений в единицу времени не меняется, но появляется, хоть и виртуальное, но второе ядро, а это еще 500 тиков. Как показывают тесты, прирост производительности от Hyper-threading составляет 15-30%, что еще раз подтверждает старую поговорку, что лучше плохо ехать, чем хорошо стоять. Второе ядро, хоть и виртуальное, позволяет обрабатывать вычислительные запросы тех процессов, которые в одноядерном варианте стояли бы в очереди.
О чем это говорит и как интерпретировать данные значения? Можно сказать, что LA 1 представляет собой недавнее прошлое (несколько минут назад), LA 5 прошлое (полчаса-час) и LA 15 отдаленное прошлое (несколько часов).

Теперь, располагая этим багажом знаний, мы можем правильно интерпретировать простые, на первый взгляд, три числа load average.

Код: Выделить всё

load average: 0.99 0.75 0.35
Это говорит о том, что имеет место достаточно кратковременный (около десятка минут) всплеск нагрузки, при этом вычислительных ресурсов пока достаточно.
А вот такая картина:

Код: Выделить всё

load average:  4.55 4.22 4.18
Для четырехядерного процессора означает, что он работает на пределе своих возможностей в течении длительного времени (несколько часов).

Ответить

Вернуться в «Администрирование Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей