Mudança de prioridade em tempo real não fez efeito visível

1

estávamos tentando obter o melhor resultado com o software PWM no raspberry pi com o Raspbian. Fizemos um script python que inicia o PWM em um pino GPIO e observamos os resultados com o osciloscópio.

Não foi bem, o atraso não foi aceitável.

Depois disso, definimos a prioridade em tempo real do nosso processo PWM de software para 99 e alteramos o agendamento para round-robin em tempo real, e depois para fifo (1865 é o processo pid).

sudo chrt -f -p 99 1865
sudo chrt -r -p 99 1865

Ele agiu da mesma forma que antes da mudança de prioridade.

ALL os outros processos foram executados com prioridades de tempo não real. No entanto, ocorreram cerca de 3000 interrupções por segundo do temporizador e USB.

Nesta pergunta a resposta afirmou:

... the vanilla kernel handles real time priorities, which gives them higher priority than normal tasks, and those tasks will generally run until they voluntarily yield the CPU

Alguma idéia de por que a mudança de prioridade não teve um efeito visível? As prioridades em tempo real influenciam o que acontecerá com o processo nas interrupções?

    
por TheMeaningfulEngineer 12.02.2013 / 15:38

1 resposta

0

Eu não fiz um efeito visível porque o processo foi executado no espaço do usuário e foi dado prioridades em tempo real no contexto de outros processos no espaço do usuário.

No entanto, o espaço do kernel ainda estava carregado de interrupções e, quando outros processos obtinham sua (pequena) parcela de tempo de processamento, eles poderiam ter iniciado uma chamada de sistema que resultou em uma migração para o espaço do kernel onde as prioridades em tempo real do nosso processo não significa nada.

As interrupções estavam todas acontecendo no espaço do kernel, e, portanto, não foram influenciadas pelas prioridades em tempo real.

    
por 19.02.2013 / 14:03