Programmation en temps réel avec Linux

Je viens de construire et de configurer un kernel Linux vanille avec le correctif RT appliqué. Tout s’est bien passé et je peux maintenant démarrer correctement dans le nouveau kernel.

Voici ce que je me demande: j’ai créé un programme de simulation en C et je veux qu’il s’exécute en mode temps réel, comme le nouveau kernel le permettra. Il n’est probablement pas nécessaire d’exécuter le simulateur dans son intégralité avec une priorité en temps réel, mais certaines tâches internes le sont.

Comment puis-je accomplir cela? Je suppose que la simple exécution du programme ne suffira pas.

Si vous demandez comment exécuter certains threads dans un contexte en temps réel, et d’autres en tant que threads de partage de temps conventionnels, il vous suffit de définir correctement leurs planificateurs à l’aide de sched_setscheduler .

Les threads à partage de temps veulent être SCHED_OTHER ; Les threads du simulateur en temps réel veulent être SCHED_FIFO ou SCHED_RR .

Sous Linux, pour pouvoir exécuter des priorités en temps réel, votre utilisateur doit disposer de limites de ressources ( man 2 rlimit ) le permettant. En particulier, votre rtprio rlimit doit être réglé sur la priorité la plus élevée dont vous aurez besoin. Sinon, vous pouvez exécuter l’application en tant que root. Dans un système Linux avec PAM, ceci est généralement accompli en ajoutant la ligne appropriée à /etc/security/limits.conf

  @realtime - rtprio 99 

Cela accordera des limites rtprio allant jusqu’à la priorité temps réel 99 au groupe temps réel . Ensuite, vous ajoutez un groupe en temps réel à /etc/groups et assurez-vous que votre utilisateur est dans le groupe.

(Et comme cela semble être votre première fois, vous voudrez peut-être aussi avoir un fil de discussion en temps réel hautement prioritaire avec un “commutateur d’homme mort” pour vous assurer que votre simulateur ne deviendra pas incontrôlable et restituera le système. inutilisable … si vous simulez une charge de processeur élevée, vous risquez d’obtenir une charge de processeur réelle ÉLEVÉE et d’être incapable d’arrêter des choses sans redémarrage.)