Как разобраться, хватает ли нам процессорных мощностей и где тот параметр, который нам укажет, что процессора не тянут те задачи, которые мы им вешаем?

В однопроцессорных системах это просто — команда uptime. А что делать, если у нас многопроцессорный многоядерный сервер?
В качестве отправной точки можно использовать отношение «очереди ожидающих процессов» к «количеству процессорных ядер«. Если рассматривать работу системы в течении дня, то конечно это значение будет меняться.
Ну и в зависимости от задач, нужно выбрать период для анализа — например, нам нужно обосновать покупку нового сервера — выбираем самый загруженный час работы сервера, и снимаем показания каждые 2 минуты ;) Ну и потом график на стол начальству…

Шкала субъективные показателей:

  • < 0.5 Cистема не загружена (читай — такие бабки вбухали, а сервак просто греет воздух :). Ну а так — хорошо.
  • 0.5-0.8 Отлично, процессора нагружены и есть запас по мощности
  • 0.8-1 Система работает без запаса, иногда на пределе. Оценка — удовл.
  • 1-1.2 Ну уже начинаются заметные тормоза. Неуд.
  • > 1.2 Система тупит конкретно. Вызываем родителей в школу…

Например:
# uptime
12:28pm up 82 day(s), 20:07, 16 users, load average: 5.74, 5.79, 5.81
# /usr/sbin/psrinfo | wc -l
8

Итак, отношение 5.74/8=0.71. В системе все в порядке, еще есть запас.

ЗЫ Значение 100% занятости процессоров (снимаемое, например через vmstat), не является показателем перегрузки системы. Реально, процессора могут быть загружены на 100%, а очередь процессов — мала. То есть, все процессы, успевают обрабатываться — тормозов по системе нет. А вот при показателе больше 1.2 тормоза на всех задачах заметны реально.

2 комментария на запись “Хватает ли нам процессорных мощностей?”

  1. mrbungle пишет:

    То есть отношение длина_очереди/число_процессоров однозначно определяет латентность и производительность системы?

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

    Может в «Шкале субъективные показателей» сделать раскладку для количества процессоров?

  2. ikorolev пишет:

    > То есть отношение длина_очереди/число_процессоров однозначно определяет латентность и производительность системы?

    однозначно нет. на процессорную производительность влияет еще масса факторов (ну например, большое количество форков в системе создает большую очередь, но производительность системы падает незначительно), так же возможные задержки в устройствах ввода-вывода могут притормаживать, процессы реального времени ну и т.д. Но в общем случае, можно придерживаться вышеприведенных значений.

    > Но ведь при том же соотношении, чем больше процессоров, тем больше вероятность того, что в следующий момент времени хотя бы один из процессоров будет свободен.
    Не понял. (Прочел еще раз — не понял все равно). Процессы работают одновременно. На всех процессорах. Если у нас больше процессоров, то большее кол-во процессов они смогут переварить за тоже время.

    > Может в “Шкале субъективные показателей” сделать раскладку для количества процессоров?

    Судя по данным, полученным опытным путем — зависимость практически линейная (ну до 24-32 ядер ). При большем кол-ве ядер можно ввести корректирующий коэфициент ;) Для этого в Hi-End системах, типа sun 25k на аппаратном уровне начинают использовать всякие хитрые механизмы, чтобы этого избежать.