Como impedir que aplicativos em tempo real sejam interrompidos

0

Eu tenho um aplicativo em tempo real cujo desempenho está sendo afetado pelo restante do sistema. Como posso parar isso?

Minha inscrição é assim:

#include <sys/timerfd.h>

int main() {

  timer_fd = timerfd_create(CLOCK_MONOTONIC, 0);  // Create the timer

  itimerspec itval;
  itval.it_interval.tv_sec = 0;      
  itval.it_interval.tv_nsec = 10000; // 10ms period
  itval.it_value.tv_sec = 0;      
  itval.it_value.tv_nsec = 10000;    // First deadline in 10ms

  timerfd_settime(timer_fd, 0, &itval, 0); // Start the timer

  while (true) { // Main loop

    do_stuff();

    unsigned long long missed;
    read(timer_fd, &missed, sizeof(missed) ); // Wait till next deadline
  }
}

Para iniciá-lo, faço isso para definir a prioridade em tempo real:

$ ./realtime-app & 
$ sudo chrt -f -p 70 $!

Eu tenho o patch em tempo real do Linux instalado no meu kernel:

$ uname -r
4.18.0-0.bpo.1-rt-amd64

Em média, do_stuff() demora cerca de 4 ms. Isso deixa read() para bloquear por aproximadamente 6 ms.

No entanto, quando faço coisas como redimensionar janelas ou rolar por uma página da Web, do_stuff() às vezes leva de 11 a 12 ms, o que significa que read() não bloqueia.

Uma prioridade alta como 70 e a configuração da diretiva como SCHED_FIFO em chrt não devem impedir que o ambiente de desktop afete meu sistema? Eu tenho o Gnome3 instalado como um ambiente de desktop.

    
por Stewart 25.10.2018 / 15:22

0 respostas