Осмысление вывода sar на AIX

Я пытаюсь понять некоторые данные, которые были извлечены из SAR. У меня есть три основных вопроса. В конечном счете, я хотел бы определить, сколько процессоров простаивало на каждом интервале выборки в кластере серверов.

  1. Многие из процессоров не отображаются в каждой записи. Ожидается ли это, и что именно это означает? Связано ли это с №2?
  2. Существуют неиспользуемые строки (CPU = U). В документации указано, что «U обозначает общесистемную неиспользуемую емкость». На самом деле я не могу найти точное определение «Общесистемная неиспользуемая емкость» или любое определение. Я не уверен, как интерпретировать строку, которая говорит что-то вроде «неиспользуемая емкость – 70% бездействия».
  3. Наконец, я не уверен в том, как рассчитывается строка - или all . Я бы подумал, что это среднее значение для всех процессоров, но когда я занимаюсь математикой во всех процессорах, я получаю совсем другой ответ, чем то, что находится на этой линии. Может ли кто-нибудь сказать мне, что входит в этот расчет? Внимательно изучив этот связанный с этим вопрос о SAR, кажется, что простаивающий процент в системе – это сумма продукта для простаивания каждого CPU и значения «physc». К сожалению, у меня нет physc или entc% (если есть один), поэтому я не могу проверить это своими собственными данными. Если это правильно, означает ли это, что мне нужны значения physc чтобы действительно понимать процент простоя?

Вот некоторые примеры того, что я вижу. Все это с того же дня.

 CPU | Idle CPU | Idle CPU | Idle ---------- ---------- ---------- 0 | 8 0 | 15 0 | 17 1 | 25 1 | 94 1 | 32 2 | 79 2 | 100 2 | 97 3 | 62 3 | 99 3 | 71 4 | 5 4 | 13 4 | 5 5 | 7 5 | 13 5 | 23 6 | 6 6 | 99 6 | 71 7 | 7 7 | 44 7 | 98 8 | 11 8 | 12 8 | 48 9 | 17 12 | 0 12 | 38 10 | 33 16 | 12 16 | 37 11 | 64 20 | 3 20 | 42 12 | 6 U | 95 U | 97 13 | 6 - | 15 - | 85 14 | 6 15 | 6 16 | 12 17 | 15 18 | 62 19 | 69 20 | 7 21 | 7 22 | 6 23 | 7 U | 80 - | 15 case 1: avg(24): 22 case 2: avg(12): 42 case 3: avg(12): 48 

Эти данные создаются сценарием, который запускается: sar -P ALL 1 1 Затем он запускает команду awk. Я плохо разбираюсь в awk, но это, безусловно, важная часть:

Фильтр: /System|AIX|^$|%/ {next}

Parse: {k=0;if(NR==7) k=1} {sub("^-", "all", $1); cpu=$(1+k); user=$(2+k); sys=$(3+k); io=$(4+k); idle=$(5+k)} {k=0;if(NR==7) k=1} {sub("^-", "all", $1); cpu=$(1+k); user=$(2+k); sys=$(3+k); io=$(4+k); idle=$(5+k)}

Это кажется правильным, исходя из того, что мало я понимаю об awk и о том, что я вижу из примеров вывода.

Если я предполагаю, что недостающие значения равны нулю для случая 2, среднее значение равно 21, что, по-видимому, несколько соответствует случаю 1. Однако, если я сделаю это предположение для случая 3, я получаю 24%, что полностью противоречит 85% процентное значение, данное sar для общего простоя CPU.

Вот график захвата полного дня (каждые 30 секунд):

введите описание изображения здесь

Когда очень мало «общесистемного» времени простоя, корреляция между средним простоями процессора и «общесистемным» простоя почти идеальна. Но по мере увеличения «простоя» в масштабе всей системы корреляция становится намного слабее. Работая над тем, что это детерминированные машины, это говорит мне, что данные, которые у меня есть, не дают полной картины. Но насколько меня это волнует?

Я не совсем понимаю, почему некоторые CPU не сообщаются в каждой точке, но те, которые отсутствуют, не равномерно распределены, как видно из приведенных выше примеров. Кроме того, прочитав этот physc , я полагаю, что это должны быть логические процессоры, и без physc номеров я думаю, что с этими значениями я не могу многое сделать. Я попытался использовать значение U в разных уравнениях, но я не нашел ничего разумного. Мне даже не ясно, что общий процент простоя может быть взят по номинальной стоимости.

ПРИМЕЧАНИЕ . Что-то не так с захватом этих данных из sar является полностью верным ответом для # 1, если это так, он всегда должен возвращаться.

Выведенный вами результат отличается от стандартного sar -P ALL или sar -u вывода. Я не уверен, если вы отформатируете его, или если вы используете его с помощью другого инструмента, но я думаю, что для этого достаточно информации.

Вот важная информация, полученная с man-страницы для sar

Примечание. На компьютерах SMP процессор, который вообще не имеет активности (0.00 для каждого поля), является отключенным (автономным) процессором.

Поскольку вы работаете в кластере, кажется довольно безопасным предположить, что вы используете SMP-машины.

Обратите внимание, что в примерах 2 и 3 только 12 из 24 ядер сообщают статистику. Если вы считаете, что эти ядра отключены, как указано на странице руководства, статистика имеет смысл.

Давайте обновим ваши данные следующим образом, чтобы указать отключенное ядро ​​с -

 0 | 8 0 | 15 0 | 17 1 | 25 1 | 94 1 | 32 2 | 79 2 | 100 2 | 97 3 | 62 3 | 99 3 | 71 4 | 5 4 | 13 4 | 5 5 | 7 5 | 13 5 | 23 6 | 6 6 | 99 6 | 71 7 | 7 7 | 44 7 | 98 8 | 11 8 | 12 8 | 48 9 | 17 9 | - 9 | - 10 | 33 10 | - 10 | - 11 | 64 11 | - 11 | - 12 | 6 12 | 0 12 | 38 13 | 6 13 | - 13 | - 14 | 6 14 | - 14 | - 15 | 6 15 | - 15 | - 16 | 12 16 | 12 16 | 37 17 | 15 17 | - 17 | - 18 | 62 18 | - 18 | - 19 | 69 19 | - 19 | - 20 | 7 20 | 3 20 | 42 21 | 7 21 | - 21 | - 22 | 6 22 | - 22 | - 23 | 7 23 | - 23 | - 

Затем мы можем использовать следующее, чтобы вычислить средние значения (это быстрый oneliner, который я написал, я уверен, что что-то лучше может быть написано.)

 $ awk '{idle = $3; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f Cores: %d\n", output / cores, cores }' input_file Ave idle%: 22.208333 Cores: 24 $ awk '{idle = $6; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f Cores: %d\n", output / cores, cores }' input_file Ave idle%: 42.000000 Cores: 12 $ awk '{idle = $9; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f Cores: %d\n", output / cores, cores }' input_file Ave idle%: 48.250000 Cores: 12 

Обратите внимание, что количество ядер в примерах 2 и 3 равно 12, а средние значения соответствуют тому, что вы видите в своем примере вывода.

Похоже, что в какой-то момент между вашим первым и вторым случаем половина ваших ядер процессора отключена.

Краткое резюме по вашим вопросам:

  1. Отсутствующие данные, вероятно, означают, что ядро ​​процессора отключено.
  2. U в средней строке отличается от U на этой странице руководства. U указанный в man-странице, должен отображаться в столбце ID процессора.
  3. Выведенный вами результат отличается от стандартного вывода sar и недостаточно информации для определения того, к чему относится U или all в средней строке. Первое число, по-видимому, является простоями% на активных ядрах.