GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la précision des compteurs d'intervalles sous Linux ?

Vous avez raison de ne pas vous attendre à ce que les minuteries se déclenchent tôt - et elles ne le font pas. L'apparent le déclenchement précoce est dû au fait que vous ne mesurez pas le temps écoulé depuis l'expiration de la minuterie précédente - vous mesurez le temps depuis le précédent gettimeofday() appel. S'il y a eu un délai entre l'expiration du minuteur et la planification du processus, vous verrez alors ce gettimeofday() en retard, et le suivant en avance du même montant .

Au lieu de consigner la différence entre les gettimeofday() suivants appels, essayez d'enregistrer les temps absolus renvoyés, puis comparez les temps renvoyés à N * 100 ms après le temps initial.

Si vous voulez PREEMPT_RT pour vous aider, vous devrez définir une politique de planification en temps réel pour votre programme de test (SCHED_FIFO ou SCHED_RR ), qui nécessite root.


J'ai apporté quelques modifications à votre code, et principalement remplacé le timer comme suit et exécutez le processus en tant que progression RT (SCHED_FIFO).

setitimer()      ->    timer_create()/timer_settime()
gettimeofday()   ->    clock_gettime()

mon banc d'essai est un processeur i9-9900k et PREEMPT-RT patché Linux avec le noyau 5.0.21. L'intervalle de temps de la minuterie est de 1 ms et le programme s'exécute environ 10 heures pour générer le résultat suivant.

J'utilise aussi Cyclictest (basé sur nanosleep() ) sur ma machine, et il montre un meilleur contrôle de la latence (latence maximale inférieure à 15us). Donc, à mon avis, si vous souhaitez réaliser vous-même une minuterie haute résolution, un thread RT autonome exécutant nanosleep sur un noyau isolé peut être utile. Je suis nouveau dans le système RT, les commentaires sont les bienvenus.


Linux
  1. Quel est le but du groupe "roue" sous Linux

  2. Quel est le but du fichier .bashrc sous Linux

  3. Quel est l'équivalent de getch() &getche() sous Linux ?

  4. Quel serait l'équivalent de l'API Win32 sous Linux ?

  5. Quelle est la définition d'une session sous Linux?

Qu'est-ce que la commande Linux Watch + Exemples

Qu'est-ce que le Shell sous Linux ?

Quelle est la différence entre Linux et Unix ?

La commande timer sous Linux

Les 10 meilleurs livres Linux à lire en 2019

Qu'est-ce que la commande kill sous Linux ?