O documento descreve algoritmos para contabilidade e escalonamento de interrupções considerando o processo associado. O algoritmo de contabilidade mede o tempo de execução de bottom-halves para ajustar o tempo de sistema cobrado de cada processo. O algoritmo de escalonamento prioriza interrupções associadas a processos de maior prioridade que o processo ativo. Experimentos mostram que as abordagens melhoram o desempenho de processos concorrentes em relação ao kernel Linux padrão.
4. Serviços de Interrupção e
Algoritmos de Contabilidade
● Algoritmo de Contabilidade de Interrupções
○ Algoritmo de compensação baseado no tempo
usado nas interrupções
● Algoritmo de Escalonamento de
Interrupções
○ Escalonamento baseado na prioridade do processo
ativo em relação ao processo que requeriu
interrupção
5. Visão geral do processo de
contabilidade
● Temporizador de Interrupções
○ Um tick de clock está entre 1 - 10ms no Linux x86
● Tempo de execução de um I/O
○ Geralmente menor que 1 tick de clock
○ Para contabilizar corretamente o tempo de
execução, é necessário utilizar instruções que
verifiquem o temporizador em cilcos de CPU (rdtsc
no Linux x86)
6. Algoritmo de Compensação (1)
● Medir o tempo de execução de uma bottom
half
● Medir o número total de interrupções
processadas e o número de interrupções em
nome de cada processo
● Ajuste do tempo de sistema cobrado para
cada processo
7. Algoritmo de Compensação (2)
● t - tempo (clock do sistema)
● N(t) - número de interrupções cujo tempo
total de execução é um tick de clock
● m(t) - número de interrupções processadas
no último tick de clock
● xk
(t) - número de interrupções não
contabilizadas ao processo Pk
.
10. Algoritmo de Escalonamento de
Interrupções (1)
● Encontrar os candidatos
● Prever o processo associado com a
interrupção
● Escalonar a metade inferior
12. Implementação
● Modificações no kernel Linux;
● Focado em recebimento de pacotes de rede;
● softirqs representa o bottom-half;
13.
14. Implementação do interrupt
accounting algorithm
● Tempo de execução dos bottom-halves são
medidos em cada execução;
● Quanto o socket apropriado é encontrado
pro pacote, o processo correspondente é
conhecido;
● Calcula-se o tempo gasto no bottom-half e
recalcula o timeslice dos processos de
acordo;
15. Implementação do algoritmo de
escalonamento de interrupções
● Implementado na função do_softirq();
● Antes do net_rx_action(), checa-se os
possíveis softirqs, comparando as
prioridades dos seus processos
correspondentes com a do processo atual;
● Executa imediatamente se for mais
prioritário ou aguarda momento apropriado
caso contrário;
16. Experimentos
● Um processo UDP-server recebendo
pacotes rodando concorrentemente com
outro processo CPU-bound em uma
máquina;
● Outro processo UDP-client que envia
pacotes frequentemente em outra máquina;
● Comparação usando kernel Linux-2.6.14 e
sua versão modificada com algoritmos
apresentados;