Fazendo sentido da saída do sar no AIX

12

Estou tentando entender alguns dados extraídos do SAR. Eu tenho três perguntas principais sobre isso. Por fim, gostaria de determinar quantas CPUs estavam ociosas em cada intervalo de amostragem em um cluster de servidores.

  1. Muitas das CPUs não estão aparecendo em todas as entradas. Isso é esperado e o que exatamente isso significa? Está relacionado com o nº 2?
  2. Existem linhas não utilizadas (CPU = U). A documentação diz que "U indica a capacidade não utilizada por todo o sistema ". Não consigo encontrar uma definição precisa de "capacidade não utilizada em todo o sistema" ou qualquer definição, na verdade. Não sei como interpretar uma linha que diz algo como "a capacidade não utilizada estava 70% ociosa".
  3. Por fim, não tenho certeza de como a linha - ou all é calculada. Eu acho que é a média de todas as CPUs, mas quando faço as contas em todos os processadores, recebo uma resposta muito diferente da que está nessa linha. Alguém pode me dizer exatamente o que acontece nesse cálculo? Analisando atentamente esta pergunta relacionada sobre a SAR , parece que a system-wide porcentagem ociosa é a soma do produto da porcentagem inativa de cada CPU e do valor 'physc'. Infelizmente, não tenho o physc ou entc% (supondo que haja um), portanto não posso confirmar isso com meus próprios dados. Se isso estiver correto, isso significa que preciso dos valores de physc para realmente entender a porcentagem inativa?

Aqui estão alguns exemplos do que estou vendo. Todos são do mesmo dia.

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

Esses dados são produzidos por um script que executa: sar -P ALL 1 1 Em seguida, ele executa um comando awk. Eu não sou bom com o awk, mas estas são claramente as partes importantes:

Filtro: /System|AIX|^$|%/ {next}

Analise: {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)}

Isso parece correto com base no pouco que eu entendo do awk e o que eu vejo de exemplos da saída.

Se eu assumir que os valores omissos são todos zero para o caso 2, a média é 21, o que parece um pouco consistente com o caso 1. No entanto, se eu fizer essa suposição para o caso 3, obtive 24% que é completamente diferente o valor de 85% por cento dado pelo sar para a CPU geral inativa.

Aqui está um gráfico das capturas de um dia inteiro (a cada 30 segundos):

Quandohámuitopoucotempoociosoemtodoosistema,acorrelaçãoentreamédiadeCPUociosaeainatividadedosistemaéquaseperfeita.Porém,àmedidaqueotempoociosodo"sistema inteiro" aumenta, a correlação se torna muito mais fraca. Partindo do pressuposto de que essas são máquinas determinísticas, isso me diz que os dados que tenho não dão a imagem completa. Mas quanto me importo?

Eu não entendo completamente por que algumas CPUs não estão sendo relatadas em cada ponto, mas as que estão faltando não são distribuídas uniformemente como visto nos exemplos acima. Também da leitura deste redbook , considero que estes devem ser CPUs lógicas e que sem os números physc , acho que não há muito que eu possa fazer com esses valores. Eu tentei usar o valor U em várias equações, mas não encontrei nada sensato. Não está claro para mim que a porcentagem geral inativa pode ser obtida pelo valor de face.

OBSERVAÇÃO : Há algo errado com a captura destes dados do sar é uma resposta completamente válida para o # 1, se for o caso, deve sempre retornar.

    
por JimmyJames 03.03.2017 / 23:52

1 resposta

4

A saída que você forneceu parece diferente da saída padrão sar -P ALL ou sar -u . Não tenho certeza se você o formatou manualmente ou se você está usando outra ferramenta, mas acho que há informações suficientes para descobrir isso.

Aqui está a informação importante, obtida da página man do sar

Note: On SMP machines a processor that does not have any activity at all (0.00 for every field) is a disabled (offline) processor.

Como você está executando em um cluster, parece bastante seguro assumir que você está usando máquinas SMP.

Observe que, nos exemplos 2 e 3, apenas 12 dos 24 núcleos estão relatando estatísticas. Se você assumir que esses núcleos estão desativados, como mencionado na página do manual, as estatísticas farão sentido.

Vamos atualizar seus dados da seguinte maneira, para indicar um núcleo desativado com -

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  | -

Então podemos usar o seguinte para calcular as médias (este é um rápido oneliner que eu escrevi, tenho certeza de que algo melhor poderia ser escrito.)

$ 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

Observe que o número de núcleos no exemplo 2 e 3 é 12 e as médias correspondem ao que você vê na saída de exemplo.

Parece que, em algum momento entre o primeiro e o segundo caso, metade do seu núcleo de CPU foi desativado.

Um resumo rápido das suas perguntas:

  1. A falta de dados provavelmente significa que o núcleo do processador está desativado.
  2. O U na linha média é diferente do U nessa página do manual. O U referido na página man deve aparecer sob a coluna ID do processador.
  3. A saída que você forneceu é diferente da saída sar padrão e não há informações suficientes fornecidas para determinar a que a U ou all na linha média se refere. O primeiro número parece ser o% ocioso nos núcleos ativos.
por 07.03.2017 / 01:10