o cálculo da média de carga é melhor considerado como uma média móvel de processos na fila de execução do Linux marcada em execução ou ininterrupta. As palavras “pensamento de” foram escolhidas por uma razão: é assim que as medidas devem ser interpretadas, mas não exactamente o que acontece por detrás da questão. É neste momento da nossa jornada que a realidade da mecânica de itall, como a mecânica de likequantum, parece não se encaixar na forma intuitiva como se apresenta.,
As médias de carga que os comandos de topo e de uptime exibem são captadas diretamente de /proc. Se estiver a correr o kernel Linux 2. 4 ou mais tarde, poderá ler esses valores com o comando cat/proc/loadavg. No entanto, é o núcleo Linux que produz thosevalues in /proc. Especificamente, o temporizador.C e sched.ele trabalha em conjunto para fazer o cálculo. Para perceber que Temporizador.o c ganha a vida, o conceito de corte de tempo e o jiffy counter ajudam a completar a imagem.
no kernel Linux, a cada processo de despacho é dada uma quantidade fixa de tempo no CPU por expedição., Por padrão, este valor é de 10 milisegundos, ou 1/100th de um segundo. Para esse curto período de tempo, o processo é atribuído um CPU físico sobre o qual executar suas instruções e autorizado a assumir esse processador. Mais frequentemente do que não, o processo vai desistir de controle antes que os 10ms estejam acima através de chamadas de socket, chamadas de I/O ou chamadas de volta para o kernel. (Em um processador Intel 2,6 GHz, 10ms é tempo suficiente para aproximadamente 50 milhões de instruções ocorrerem. É mais do que tempo de processamento suficiente para a maioria dos ciclos de Aplicação.,) Se o processo usa seu tempo de CPU devidamente alocado de 10ms,uma interrupção é levantada pelo hardware, e o kernel recupera o controle do processo. O kernel então promptlypenaliza o processo por ser um porco. Como você pode ver, esse timeslicing é um conceito de design importante para fazer o seu sistema parecer Torun sem problemas no exterior. É também o veículo que produz os valores médios da carga.
a fatia de tempo de 10ms é um conceito importante o suficiente para garantir um aname para si: valor quântico., Não há necessariamente nada de especial em torno de 10m, mas há sobre o valor quântico em geral, porque qualquer que seja o valor definido (é configurável, mas 10m é o padrão), Ele controla quantas vezes, no mínimo, o kerneltake controle do sistema de volta das aplicações. Um dos manicores que o kernel realiza quando ele toma o controle de volta é o contador incrimentits jiffies. O jiffies contra-mede o número de carrapatos Quantum que ocorreram desde que o sistema foi inicializado. Quando o temporizador do quantum estourar, o temporizador.c é introduzido em uma função no kernel chamado timer.,c: do_timer (). Aqui, todas as interrupções são desativadas de modo que o código não está funcionando com alvos em movimento. O jiffies contador é incrementado por 1 e a carga-cálculo da média é verificada para ver se ele deve ser calculado.Na realidade, a carga média de computação não é verdadeiramente calculado oneach quantum de escala, mas impulsionado por um valor variável, que é baseado no theHZ definição de frequência e testado em cada quantum de escala. (HZ não deve ser confundido com a notação de MHz do processador. Esta variável define a taxa de pulsação de uma atividade particular do kernel Linux e 1HZ é igual a um or10ms quântico por padrão.,) Embora o valor HZ possa ser configurado em algumas versões do kernel, ele é normalmente definido como 100. O código de cálculo utiliza o valor HZ para determinar a frequência de cálculo. Especificamente, o temporizador.c: a função calc_load () irá executar o algoritmo de média a cada 5 * HZ, ou aproximadamente a cada 5 segundos. A seguir está essa função em sua totalidade:
A matriz de avenrun contém as três médias que temos estado discutindo. A função Thecalc_load () é chamada por update_vezes (), também encontrada no temporizador.c, e é o código responsável por fornecer a função calc_load () com o parâmetro theticks., Infelizmente, esta função não revela o seu aspecto mais interessante: o próprio cálculo. No entanto, pode ser localizado facilmente em sched.h, um cabeçalho usado por grande parte do kernel code.In lá, a macro CALC_LOAD e seus valores associados estão disponíveis:
aqui é onde os pneus se encontram no pavimento. Deve agora ser evidenciado que a realidade não parece corresponder à ilusão. Pelo menos, este não é certamente o tipo de média que a maioria de nós é ensinada em gradescool. No entanto, é uma média., Tecnicamente, é uma função exponencialdecay e é a média móvel de escolha para a maioria dos sistemas UNIX e Linux. Vamos examinar os detalhes.
a macro toma em três parâmetros: o balde médio de carga (um dos três elementos em avenrun), um expoente constante e o número de processos em execução/ininterruptíveis atualmente na fila de execução. As constantes expoentes possíveis estão listadas acima: EXP_1 para o intervalo de 1 minuteaverage, EXP_5 para a média de 5 minutos e EXP_15 para o intervalo de 15 minuteaverage. O ponto importante a notar é que o valor diminui com a idade., As constantes são números mágicos que são calculados pelo themathematical função mostrada abaixo:
Quando x=1, então y=1884; quando x=5, y=2014; e quando x=15 e y=2037. O propósito dos números mágicos é que ele permite que a MACROTO de CALC_LOAD use precisão de ponto fixo representação de frações. Os magicnumbers são então nada mais do que multiplicadores usados contra a média de runningload para torná-lo uma média móvel. (A representação matemática de ponto fixo está além do âmbito deste artigo, por isso não vou tentar uma explicação.,) O propósito da função de decaimento exponencial é que ela não só suaviza os dips e picos mantendo uma linha usefultrend, mas diminui com precisão a qualidade do que mede as idades de atividade. À medida que o tempo avança, os sucessivos eventos da CPU aumentam a sua significância na média da carga. Isto é o que nós queremos, porque mais recente atividade da CPU provavelmente tem mais impacto no estado atual do que eventos antigos., No final, as médias de carga dão uma tendência suave de 15 minutos até o minuto atual e nos dão uma janela intonot apenas o uso da CPU, mas também a demanda média para os CPUs. Como a média de carga vai acima do número de CPUs físicas, quanto mais a CPU está sendo utilizada e mais demanda há para ela. E, à medida que recua, há menos procura. Com este entendimento, a média de carga pode ser utilizada com a porcentagem de CPU para obter uma visão mais precisa da atividade de CPU.,
é minha esperança que isso sirva não só como uma interpretação prática das médias de carga do Linux, mas também ilumina alguns dos matemáticos escuros que estão por trás deles. Para mais informações, um estudo da função exponencialdecay e das suas aplicações forneceria mais luz sobre o assunto. Mas para os mais práticos, planejar a carga média. um número controlado de processos (isto é, modelando os efeitos do algoritmo de CALC_LOAD em um loop controlado) lhe daria uma sensação para a relação atual e como o filtro de decomposição se aplica.