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) são normais em um servidor Linux?
Minha faculdade aqui trouxe isso, e ele está vendo 16K em uma x86_64
máquina de 8 núcleos .
Aqui estão algumas estatísticas do sarface nos últimos dias ...
E para ver as estatísticas de criação do processo, aqui está uma visão logarítmica do mesmo gráfico ...
E os 8 núcleos estão entediados até a morte ...
CS vs IOwait (escala x10000)
Mais informações inúteis no caso de alguém perguntar ..
- O armazenamento em que o servidor trabalha é uma SAN de 0,5 TB via FC
- Há 8 GB de RAM, principalmente cache - sem troca.
linux
performance
context-switch
Xerxes
fonte
fonte
Respostas:
Isso depende muito do tipo de aplicativo que você executa. Se você possui aplicativos que são syscalls WRT muito acionados, 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 taxas baixas 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:
Isso basicamente diz ao kernel para assumir a operação do processo, mover para
count
bytes, começando pelo endereço de memória apontado por*buf
para o descritorfd
de arquivo 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 de syscalls feitos 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 inativa, 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 alternância 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 boa descrição sobre o que são comutadores de contexto e chamadas de sistema . A Wikipedia possui informações genéricas e uma boa coleção de links nas chamadas do sistema.
fonte
System calls cause context switches by their very own nature
parece errada. Sistema chama causa interruptor do modo como foi afirmado pela linfo.org/context_switch.htmlmeu 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 processos principais 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 encadeamentos vinculados de E / S?
editar novamente postar gráficos: Certamente parece vinculado ao IO. o sistema está passando a maior parte do tempo no SYS quando as alternâncias de contexto sã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 de IO.
Qual cartão FC você está usando?
editar: hmmm. Alguma chance de obter alguns benchmarks no acesso à SAN com bonnie ++ ou dbench durante o tempo morto? Eu estaria interessado em ver se eles têm resultados semelhantes.
editar: 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.
fonte
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.
fonte
É 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 (principalmente servidores Oracle não muito ocupados), 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?
fonte
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.
fonte