Por que o top não lista meu aplicativo como em tempo real?

0

Estou tentando aprender a política de agendamento no Linux com um pequeno aplicativo C++ . O mesmo deve ser válido para C . Estou mudando a prioridade do meu aplicativo usando o código abaixo:

sched_param tParam;
sched_getparam(0, &tParam);                                             
tParam.sched_priority   = 20;
sched_setscheduler(0, SCHED_RR, &tParam);

Eu esperava que meu aplicativo fosse exibido em tempo real, rt , quando executo top , mas não é. Isso é o que eu recebo:

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
2652 root      -21   0  145452  63460  11444 R  1.3  1.6   0:02.08 myRealTimeApp

um valor PR negativo. Mas quando eu corro chrt -p 2652 eu recebo:

pid 2652's current scheduling policy: SCHED_RR
pid 2652's current scheduling priority: 20

que faz sentido.

top não lista meu aplicativo como rt , a menos que eu aumente o nível de prioridade para 99 .

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
2770 root      rt   0  145452  63460  11444 S  1.0  1.6   0:01.93 myRealTimeApp

Minhas perguntas são:

  • Por que top não considera meu aplicativo como em tempo real, a menos que a prioridade esteja definida como 99 ?

  • Por que top mostra o nível de prioridade como um número negativo, enquanto não é.

  • Quais são os riscos se eu definir a prioridade para 99 ?

por Ali 31.08.2016 / 03:22

1 resposta

0

Se o seu processo requer muito poucos recursos, não há motivo para preocupação e você pode fazê-lo funcionar em tempo real, mas isso não fará muita diferença. Os riscos e problemas ocorrem quando o processo em questão sobrecarrega a CPU e impede que tarefas essenciais façam seu trabalho.

Geralmente, não há necessidade de fazer mais do que renice -20 (prioridade 0), pois ela será priorizada em relação a qualquer processo sem importância, exceto aqueles que você mesmo renomeou.

Quando você define a prioridade para -21 definindo-a no RT, na verdade você está passando por processos importantes, incluindo (mas não se limitando a) gerenciadores de janela, processos de login e até gerenciamento de rede. Felizmente, devido ao que você considera uma falha, o sistema continuará a processar tarefas importantes (embora com menos eficiência), mesmo que o processo esteja sobrecarregando a CPU.

Se você decidir que seu processo é tão importante que precisa ser realmente considerado em tempo real e requer todo o poder da CPU, todos os outros processos em tempo não real serão interrompidos. Esta é uma receita garantida para o desastre, pois nada além do que o sistema já colocou em tempo real operará e muitas operações falharão ou ficarão inseguras (principalmente acesso a disco e rede). Mesmo o controle de troca pode ser afetado, causando efeitos colaterais na capacidade do sistema de gerenciar a memória disponível.

Normalmente, é mais razoável dar a um processo a pior prioridade na qual ele pode operar adequadamente, a fim de evitar qualquer um dos problemas mencionados acima.

Observe que alguns sistemas são projetados para serem executados em tempo real, mas isso implica em uma reformulação maciça de todas as prioridades e processos em execução para evitar resultados indesejados.

    
por 31.08.2016 / 04:47