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.