É recomendado usar param.sched_priority no FIFO do Linux durante a criação do encadeamento?

0

No meu dispositivo incorporado, eu absorvo um comportamento estranho com o protocolo que usamos, às vezes demora um tempo para enviar os dados via dispositivo serial usando o FIFO.

Minha suspeita é que o Linux não é um sistema operacional em tempo real e por que ele tem uma função emulada em tempo real como pthread_setschedparam ? e ter essa prioridade em fila, fazendo com que outro processo morra de fome, devido ao fato de que leva muito tempo para detectar o dispositivo escravo.

Eu só quero saber se é aconselhável usar param.sched_priority = 40; no Linux? Eu tentei ajustar esse parâmetro, mas o problema é muito difícil de reproduzir isso acontece no campo.

Este é o código

if (1)
{
    int policy;
    int r;
    struct sched_param param;

    policy = SCHED_FIFO;
    param.sched_priority = 40;
    r = pthread_setschedparam(cc_state->ser_thread, policy, &param);
    printf("%s: pthread_setschedparam %d", __func__, r);
}
    
por danglingpointer 17.08.2018 / 09:11

1 resposta

1

O tempo real do Linux não é uma emulação, existem chamadas do sistema afetando o agendamento. Veja man sched(7) . Não está claro pela sua pergunta o que você está tentando fazer e qual é o seu problema exato. O valor de sched_priority é relevante apenas em relação às prioridades de outros segmentos. Por exemplo, se houver apenas um thread com prioridade > 0, não importa se a prioridade é 1 ou 40; um valor mais alto não dará "impulso" extra ao encadeamento. Você terá que determinar a prioridade relativa exigida pelos seus tópicos e atribuir-lhes os valores de prioridade de acordo.

Observe que não há quantum de tempo associado a SCHED_FIFO threads. Um encadeamento SCHED_FIFO é executado até que uma das ações a seguir ocorra: o encadeamento está bloqueado porque está aguardando E / S, um encadeamento de maior prioridade está pronto para ser executado ou o encadeamento voluntariamente produz o processador. Você terá que levar isso em consideração se tiver vários encadeamentos com igual prioridade, caso contrário, um encadeamento poderá sobrecarregar a CPU dos outros encadeamentos. Em uma máquina multiprocessador, vários encadeamentos podem, é claro, ser executados simultaneamente, cada um em sua própria CPU.

    
por 18.08.2018 / 12:59