it-swarm-pt.tech

Quantos comutadores de contexto são "normais" (em função dos núcleos da CPU (ou outros))?

Olá Overlords do Linux/UNIX,

Algum de vocês tem uma regra prática sobre quantas alternâncias de contexto (por núcleo do processador) existem Normal em um servidor Linux?

Minha faculdade aqui trouxe isso, e ele está vendo 16K em um núcleo de 8 núcleos x86_64 máquina.

Aqui estão algumas estatísticas do sarface nos últimos dias ...

texto alternativo http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png

E para ver as estatísticas de criação do processo, aqui está uma visão logarítmica do mesmo gráfico ...

texto alternativo http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png

E os 8 núcleos estão entediados até a morte ...

texto alternativo http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png

CS vs IOwait (escala x10000)

texto alternativo http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png

Mais informações inúteis no caso de alguém perguntar ..

  • O armazenamento em que o servidor trabalha é de 0,5 TB SAN via FC
  • Há 8 GB de RAM, principalmente cache - sem troca.
37
Xerxes

Isso depende muito do tipo de aplicativo que você executa. Se você possui aplicativos que chamam muito a atenção do WRT, pode esperar ver grandes quantidades de alternância de contexto. Se a maioria de seus aplicativos ficar inativa e acordar apenas quando houver coisas acontecendo em um soquete, você poderá esperar baixas taxas de troca de contexto.

Chamadas do sistema

As chamadas do sistema causam alternâncias de contexto por sua própria natureza. Quando um processo faz uma chamada de sistema, basicamente diz ao kernel para assumir o seu ponto atual no tempo e na memória para fazer coisas que o processo não tem o privilégio de fazer e retornar ao mesmo local quando terminar.

Quando analisamos a definição do syscall write (2) do Linux, isso fica muito claro:

 NOME 
 Write - grava em um descritor de arquivo 
 
 SINOPSE 
 #Include 
 
 Ssize_t write (int fd, const void * buf, size_t count); 
 
 DESCRIÇÃO 
 write () escreve até a contagem de bytes do buffer apontado buf para o arquivo 
 referido pelo descritor de arquivo fd. [..] 
 
 VALOR DE DEVOLUÇÃO 
 Em caso de sucesso, o número de bytes gravados é retornado (zero indica 
 Nada foi gravado). Em caso de erro, -1 é retornado e errno é definido como 
 Adequadamente. 
 [..] 

Isso basicamente diz ao kernel para assumir a operação do processo, movendo-se para count bytes, começando pelo endereço de memória apontado por *buf para arquivar o descritor fd do processo atual e, em seguida, retorne ao processo e diga a ele como foi.

Um bom exemplo para mostrar isso é o servidor de jogos dedicado para jogos baseados em Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 mostra um segundo valor de chamadas de syscalls feitas por uma única instância de um servidor de jogo que não tinha jogadores. Esse processo leva cerca de 3% do tempo de CPU em um Xeon X3220 (2.4Ghz), apenas para lhe dar uma idéia de quão caro isso é.

Multitarefa

Outra fonte de alternância de contexto pode ser processos que não fazem syscalls, mas precisam ser movidos de uma determinada CPU para abrir espaço para outros processos.

Uma boa maneira de visualizar isso é cpuburn . O cpuburn não realiza nenhum syscalls, apenas itera sobre a própria memória, portanto não deve causar nenhuma alternância de contexto.

Pegue uma máquina ociosa, inicie o vmstat e execute um burnMMX (ou qualquer teste diferente do pacote cpuburn) para cada núcleo de CPU que o sistema possui. Você deve ter uma utilização completa do sistema até então, mas quase nenhuma mudança de contexto aumentada. Em seguida, tente iniciar mais alguns processos. Você verá que a taxa de alternância de contexto aumenta à medida que os processos começam a competir pelos núcleos da CPU. A quantidade de alternância depende da relação processos/núcleo e da resolução multitarefa do seu kernel.

Leitura adicional

o linfo.org tem uma descrição legal do que são comutadores de contexto e chamadas do sistema . Wikipedia possui informações genéricas e uma boa coleção de links em chamadas do sistema.

26
Michael Renner

meu servidor da Web moderadamente carregado fica em torno de 100-150 switches por segundo na maioria das vezes, com picos de milhares.

Altas taxas de troca de contexto não são um problema, mas podem apontar o caminho para um problema mais significativo.

editar: opções de contexto são um sintoma, não uma causa. O que você está tentando executar no servidor? Se você possui uma máquina com multiprocessador, tente configurar a afinidade da CPU para os principais processos do servidor.

Como alternativa, se você estiver executando o X, tente entrar no modo de console.

edite novamente: a 16k cs por segundo, cada CPU tem em média dois comutadores por milissegundo - ou seja, metade a um sexto da fatia de tempo normal. Ele poderia estar executando muitos threads vinculados IO?

editar novamente postar gráficos: Certamente parece IO bound. O sistema está passando a maior parte do tempo no SYS quando as alternâncias de contexto estão altas?

edite mais uma vez: iowait e sistema elevados no último gráfico - eclipsando completamente o espaço do usuário. Você tem problemas IO.
Qual cartão FC você está usando?

editar: hmmm. alguma chance de obter alguns benchmarks em seu acesso SAN com bonnie ++ ou dbench durante o tempo morto? Eu estaria interessado em ver se eles têm resultados semelhantes.

edit: Estive pensando sobre isso no fim de semana e vi padrões de uso semelhantes quando Bonnie está fazendo o passe "escrever um byte de cada vez". Isso pode explicar a grande quantidade de comutações em andamento, pois cada gravação exigiria uma chamada de sistema separada.

7
jay_dubya

É por isso que você deve tentar manter as linhas de base de desempenho para seus servidores. Dessa forma, você pode comparar as coisas que percebe de repente com as que gravou no passado.

Dito isto, tenho servidores em execução (servidores Oracle não muito ocupados, principalmente), que são constantes em torno de 2k com alguns picos de 4k. Para meus servidores, isso é normal, para servidores de outras pessoas que podem estar muito baixos ou muito altos.

Até onde você pode voltar nos seus dados?

Que tipo de informação da CPU você pode nos fornecer?

1
wzzrd

Estou mais inclinado a me preocupar com a taxa de ocupação da CPU do estado do sistema. Se estiver perto de 10% ou mais, isso significa que seu sistema operacional está gastando muito tempo fazendo as alternâncias de contexto. Embora mover alguns processos para outra máquina seja muito mais lento, merece fazê-lo.

1
hashei

Não há regra de ouro. Uma alternância de contexto é apenas a CPU que passa do processamento de um encadeamento para outro. Se você executar muitos processos (ou alguns altamente encadeados), verá mais opções. Felizmente, você não precisa se preocupar com quantas alternâncias de contexto existem - o custo é pequeno e mais ou menos inevitável.

0
Alex J