Chaveamento de Contexto Em Processadores

Saiba como o chaveamento de contexto em processadores afeta performance e os impactos do uso de threads ou processos e chamadas de sistemas


Introdução

Solicitações de entrada e saída, interrupções e outros eventos podem fazer com que o sistema operacional altere uma CPU de sua tarefa atual e execute uma rotina do kernel. Essa operação ocorre frequentemente em sistemas de uso geral. Quando ocorre uma interrupção, o sistema precisa salvar o contexto atual do processo em execução na CPU para que possa restaurar esse contexto quando o processamento for concluído, essencialmente suspendendo o processo e, em seguida, retomando-o. O contexto é representado no PCB do processo; inclui o valor dos registros da CPU, o estado do processo e as informações de gerenciamento de memória. Genericamente, executamos um salvamento de estado do estado atual da CPU, seja no modo kernel ou usuário, e depois uma restauração de estado para retomar as operações. 

Objetivo

O objetivo deste relatório é explicar a metodologia, as técnicas e o resultado do tempo de mudança de contexto. Os dois primeiros experimentos lidam com o tempo de chamada da função e os dois últimos focam no tempo de troca de contexto para processos e threads.

Metodologia

Utilizamos um cronômetro monotônico de alta resolução para medir todos os experimentos, pois nosso objetivo é medir o tempo decorrido em que esse cronômetro é o mais adequado. Relógio em si, levando algum tempo para ser executado. Para ser mais preciso, medimos o tempo de execução de duas funções de relógio, colocando nenhum código entre elas e subtraí-lo dos resultados experimentais.
A idéia por trás do uso de semáforo e pipes é que podemos obter a medição usando dois métodos diferentes para descobrir a exatidão de nossa metodologia.
Também foi usada a mesma metodologia para medir a troca de contexto de processo e thread, uma vez que os dois procedimentos podem ser medidos usando a mesma abordagem, o que teoricamente levará a alta precisão na comparação dos resultados finais.

Procedimentos de Pré-Medição

  Antes de executar as medições, dois procedimentos foram adotados para melhorar a fidelidade dos resultados das medições.
Primeiro, foi gerada uma função chamada “SetProcessMaxPriority ()”, responsável por configurar a prioridade do processo de processo e encadeamento para o nível de prioridade mais alto permitido pelo sistema operacional (sistema operacional), tentando evitar qualquer interrupção no processo de medição que possa resultar em um resultado impreciso e impreciso.
Em segundo lugar, foi gerada uma função chamada “WarmCPU ()”. A idéia por trás dessa função é evitar o escalonamento dinâmico de frequências, que é uma técnica popular na arquitetura de computadores empregada no design moderno dos processadores “Onde a frequência de um microprocessador pode ser ajustada automaticamente" em a mosca ", para economizar energia ou reduzir a quantidade de calor gerada pelo chip." [4] essa função está sobrecarregando a CPU através da execução de operações matemáticas sucessivas, a fim de aumentar o relógio da CPU, permitindo assim que os procedimentos de medição sejam executados. atingir a CPU em sua freqüência máxima de clock.
 Além disso, para medir o processo e a alternância de contexto do encadeamento, foi usada uma biblioteca chamada Portable Hardware Locality (hwloc). Essa biblioteca é responsável por forçar nossos processos e encadeamentos a serem executados no mesmo cpu necessário para os experimentos.


Procedimentos de Medição

Para cada experimento, a operação foi repetida um milhão de vezes e, em seguida, a média foi calculada, assim como o menor tempo gasto nesse experimento em particular foi medido.

Para encontrar o tempo para uma função vazia, colocamos um cronômetro antes e depois da chamada da função e medimos o tempo que estamos então.
A estratégia acima é usada para medir também a função getPid ().
Além disso, foi medido o tempo do código de operação NOP (No operation), que é a operação expansiva mais baixa no nível da CPU para comparações, novamente a estratégia acima foi usada.
Para medir o tempo de troca de contexto para processos, usamos pipes. Escrevemos uma extremidade de um pipe e esperamos que outro processo escreva de volta para outro pipe. O tempo entre esses procedimentos (excluindo leitura e gravação) é medido como o tempo de troca do processo. Também usamos dois semáforos para encontrar o horário da troca de contexto. Isso é feito definindo o valor do semáforo em um processo e diminuindo o valor em outro.
Para medir o tempo de alternância de contexto para threads, a mesma metodologia foi usada.
 

Medição de Chamadas de Função

Nos experimentamos três procedimentos

  • Chamada de função nula
  • chamada de função do sistema getPid
  • Opcode da operação NOP

Em todos os casos, observamos o tempo médio, o tempo médio subtraindo o tempo do timer, o menor tempo gasto em qualquer instância com o tempo do timer e o menor tempo gasto sem o tempo do timer.

Os resultados são mostrados abaixo em formato gráfico.


VI Inter processo e troca de contexto de encadeamento

O tempo entre processos e a alternância do contexto do encadeamento é medido usando dois métodos

  1. Pipes
  2. Semáforo

Os procedimentos acima resultaram em um tempo ligeiramente diferente quando os calculamos em média. Porém, para medir menos tempo, está demorando mais tempo usando pipes.


Conclusão

As experiências acima trazem alguns resultados interessantes relacionados ao timer e ao uso de diferentes métodos para alternar o contexto.

  1. O tempo necessário para executar a função getpid e void não é significativamente diferente, mesmo se comparado ao NOP.
  2. A menos que subtraamos o tempo necessário para o timer, o tempo real para a execução das funções e o NOP estão incorretos.
  3. O tempo de troca do contexto do processo é um pouco maior (cerca de 10 a 15%, conforme nosso experimento) do que o tempo de troca de threads.
  4. O tempo de troca de contexto é um pouco menor quando estamos usando o semáforo. A possível razão é que, apesar de todo o esforço para evitar interferências no processo de medição, o pipe ainda está introduzindo uma pequena sobrecarga na medição.

Trabalho original em inglês

Espero que este conteúdo tenha de ajudado 

Abraço

 

 

Se Inscreva Na Nossa Newsletter Tenha Acesso Aos Melhores Artigos