Ad Widget

Collapse

В чем измеряется и что измеряет system.cpu.load?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • imperorr
    Member
    • Oct 2010
    • 73

    #16
    У меня и 7 единиц бывает CPU Utilized максимум 54,77%

    Что-то мне подсказывает, зависит от архитектуры системы, на 8 процессорной системе, это один параметр, на 2-х процессорной, другой.

    Вот я и хочу докопаться до формулы
    А то есть параметр, а как им оперировать никто не знает, лишь догадки.



    Вместо system.cpu.util я использую PerfCounter=usr.proc.time.total,"\Processor(_Total )\% Processor Time",30

    Jimson ты какие счетчики используешь? Для win систем и роутеров с коммутаторами.
    Last edited by imperorr; 22-10-2010, 07:30.

    Comment

    • dima_dm
      Senior Member
      • Dec 2009
      • 2697

      #17
      Именно по этой причине, я написал, что вопрос темный. Я так и не смог найти единой официальной методики вычисления данного параметра, у меня сложилось впечатление, что каждый производитель придумывает “свой велосипед”.
      Поэтому пока я отношусь к параметру system.cpu.load как к неким условным “попугаям”. Для которых не определено множество допустимых операций для сравнения с другими системами. Физический смысл имеет только колебание данного параметра, относительно базовых величин, которое определяется экспериментальным путём на конкретной системе.
      P.S. У меня есть системы, которые показывают загрузку 60 и более единиц, и чувствуют себя прекрасно, успешно справляются с возложенными на них задачами. Однако эксперты из штаб квартиры VMWare, увидев статистические данные по ним, сразу исключили данные системы из рассмотрения для любого типа виртуализации.

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #18
        load 60 больше похоже на баги, линуксы ?
        возможно это как то связано с мультитредовостью, хз
        а каждый его вычисляет по своему, потому что у всех свой алгоритм конкурентного доступа к процессору

        с серверов я снимаю только util, да и то это бесполезное занятие, мат задачи не крутим
        с цисковых железок cpmCPUTotalMonIntervalValue+cpmCPUInterruptMonInte rvalValue (по ним строю график)
        тригер одновременно проверяет cpmCPUTotal1minRev и cpmCPUInterruptMonIntervalValue что бы избежать ложных срабатываний

        P.S. возможное объяснения таких высоких load это то что выдаваемое значение не является арифметически средним, те достаточно что бы 10 секунд из 5 минут в системе была жесткая конкуренция за процессорное время что бы load это отразил, а average utilization покажет в данном случае пару процентов
        Last edited by Jimson; 22-10-2010, 08:05.

        Comment

        • dima_dm
          Senior Member
          • Dec 2009
          • 2697

          #19
          Originally posted by jimson
          load 60 больше похоже на баги, линуксы ?
          Нет, это не бага. Просто на сервере запускается большое количество процессов, которые быстро отрабатывают и завершаются. Да, RedHat Enterprise Linux.
          P.S. Ответ на P.S. в графиках
          Attached Files
          Last edited by dima_dm; 22-10-2010, 10:11.

          Comment

          • flashvoid
            Junior Member
            • Jan 2010
            • 10

            #20
            CPU load формируется из среднего двух значений
            первое - это количество процессов в очереди на исполнение
            второе - это количество процессов в непрерываемом сне - как правило это ожидание дисковой посистемы.

            команда vmstat 1 показывает реальные значения - то есть прямое сейчас ... там нужны первые две колонки ... собственно первая это очередь на процессы, вторая это очередь к диску.

            Вот про граничные значения говорить сейчас сложно - я использую проверку на отношение loadavg к количеству CPU - 1 нормально, 2 много, 3 пипец и надо спасать.
            Code:
            ({host:system.cpu.load[,avg15].last(0)})/({host:system.cpu.num.last(0)})>3

            Если видишь loadavg 60 и у тебя еще отзывается консоль это вероятнее всего значит что перегрузка идет не по процессору а по диску ... например отвалился nfs-server а у тебя примонтирована его директория с hard и туда кто-то писать пытается ... процессы вешаются со статусом D и накручивают счетчик.

            В реалтайме можно попробовать такую команду

            Code:
            while :; do ps axo stat,pid,cmd,wchan | egrep '^R|^D'; echo --; sleep 5; done;
            Собственно этот цикл должен расшифровывать первые два столбика из vmstat 1, но многопоточные процессы будут показывать одной записью.

            Comment

            • imperorr
              Member
              • Oct 2010
              • 73

              #21
              Предлагаю добавить в faq

              Comment

              • dima_dm
                Senior Member
                • Dec 2009
                • 2697

                #22
                Originally posted by flashvoid
                Вот про граничные значения говорить сейчас сложно - я использую проверку на отношение loadavg к количеству CPU - 1 нормально, 2 много, 3 пипец и надо спасать.
                Code:
                ({host:system.cpu.load[,avg15].last(0)})/({host:system.cpu.num.last(0)})>3
                Я, пожалуй, не соглашусь с этим утверждением, на графиках видно, что iowait близок к 0. Все было просто с CPU Load, пока не появились многопроцессорные и многоядерные системы. Сейчас, я думаю правильнее, делить CPU Load на количество конвейеров
                http://ru.wikipedia.org/wiki/Конвейер_(процессор).
                CPU Load очень сильно зависит от способности аппликации и OS распараллелить выполнение кода.
                Я, в свое время, достаточно подробно изучал эти вопросы, когда писал на Parallel C.

                Comment

                • flashvoid
                  Junior Member
                  • Jan 2010
                  • 10

                  #23
                  Originally posted by dima_dm
                  Я, пожалуй, не соглашусь с этим утверждением, на графиках видно, что iowait близок к 0.
                  ...
                  Сейчас, я думаю правильнее, делить CPU Load на количество конвейеров
                  Вот как раз в описанном примере с nfs iowait нерастет ... вернее растет но не критично, я довольно часто наблюдаю эту картинку с la > 300 и при этом сервер управляется и продолжает работать.

                  По поводу конвееров это да - правильнее все же делить именно на количество конвееров (или в приближении на количество ядер) - просто встроенная проверка cpu.num возвращает количество процессоров и что бы не парсить /proc/cpuinfo я слежу по ядрам.


                  Originally posted by imperorr
                  Предлагаю добавить в faq
                  Ну для фака наверное надо написать по человечески и с примерами.

                  Comment

                  Working...