tache de 20 msec sous linux

Le
Salut
Bonjour,
Je fais actuellement un logiciel sous linux ( base pentium + gcc ) et je
dois avoir une petite tache synchronisée sur une base de 20 msec.
Je voudrais savoir si je dois utiliser une interruption sur l'HTR ou y a
t_il une fonction spécial de l'ordonanceur pour faire ca facilement.

  • Partager ce contenu :
Vos réponses Page 1 / 2
Trier par : date / pertinence
kilobug
Le #453255

Bonjour,
Je fais actuellement un logiciel sous linux ( base pentium + gcc ) et je
dois avoir une petite tache synchronisée sur une base de 20 msec.
Je voudrais savoir si je dois utiliser une interruption sur l'HTR ou y a
t_il une fonction spécial de l'ordonanceur pour faire ca facilement.


Ca dépend de ton besoin de précision... nanosleep() et setitimer()
peuvent convenir si tu n'as besoin de trop de précision, sinon voir du
côté des extensions temps réel (sachant qu'avec le HZ de 100 de base
sur IA-32, la précision est de l'ordre de 10ms pour nanosleep et
setitimer).

--
Gael Le Mignot "Kilobug" - - http://kilobug.free.fr
GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959
Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA

Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org

no_spam
Le #453249
On Mon, 19 Apr 2004 18:13:00 +0200, Gaël Le Mignot wrote:



Bonjour,
Je fais actuellement un logiciel sous linux ( base pentium + gcc ) et je
dois avoir une petite tache synchronisée sur une base de 20 msec.
Je voudrais savoir si je dois utiliser une interruption sur l'HTR ou y a
t_il une fonction spécial de l'ordonanceur pour faire ca facilement.


Ca dépend de ton besoin de précision... nanosleep() et setitimer()
peuvent convenir si tu n'as besoin de trop de précision, sinon voir du
côté des extensions temps réel (sachant qu'avec le HZ de 100 de base
sur IA-32, la précision est de l'ordre de 10ms pour nanosleep et
setitimer).


Même avec les extensions temps-réel, la résolution du timer reste
de 10 ms. Le mode user ne peux pas scheduler plus vite, quelle que
soit l'API utilisée, sauf si on utilise un kernel à 1000 Hz (2.6 ou
2.4 patché).
Il reste deux possibilités:
soit c'est une contrainte soft (genre afficher 50 images/s) et il
suffit d'être assez rapide et de bufferiser un peu. Pas besoin d'un timer
précis (au moins aussi précis que celà...).
soit il y a une vrai contrainte temps-réel et ça ne peut pas être
géré en dehors du kernel. Il n'y a de toute façon que quand des
données viennent ou vont vers le hard et sont susceptibles d'etre
perdues qu'on a des contraintes de ce type... Dans ce cas, il faut
utiliser l'IRQ du device en question et il n'y a aucune contrainte de
scheduling, à part le fait que le code exécuté dans le handler d'IRQ se
doit d'être le plus court possible.


Michael Schnell
Le #453076
Bonjour,


I suppose only 1 % of the readers here have enough French to follow you.
If you write in English you will get _much_ more answers.

-Michael

no_spam
Le #453073
On Mon, 19 Apr 2004 17:54:39 +0200, Salut wrote:

Bonjour,
Je fais actuellement un logiciel sous linux ( base pentium + gcc ) et je
dois avoir une petite tache synchronisée sur une base de 20 msec.
Je voudrais savoir si je dois utiliser une interruption sur l'HTR ou y a
t_il une fonction spécial de l'ordonanceur pour faire ca facilement.


Quel est le problème ?
D'ou vient la contrainte de 20 ms ?
Est-ce une contrainte hard ?
Dans ce cas, ça se passe dans un driver et le hard en question doit
sans doute avoir une IRQ. Attention: il ne faut faire que le strict
minimum dans le handler d'interruption et le plus possible en
asynchrone.
Si ce n'est pas une contrainte hard, alors il suffit de bufferiser
intelligement et de se contenter de la précision de 10 ms du timer
système. Sur un kernel 2.6, pas de problème si le timer système
est à 1000 Hz...

Laurent Grassay
Le #453070
tou depend de la precision que tu veux : 1ms, 5ms ou ...
le plus simple est de patcher ton noyau soit avec le patch preempt soit
avec le patch low-latency qui ont a peu pres les memes resultats (ou les
deux ) et qui te permettent d'avoir une precision de 1ms sur plus de 99% des
cas. Mais le noyau fonctionne encore en temps partagé
Sinon passe au noyau temps reel : RTLinux ou RTAI. Là tu n'auras pas de cas
isolés..

"Gaël Le Mignot" news:


Bonjour,
Je fais actuellement un logiciel sous linux ( base pentium + gcc ) et
je


dois avoir une petite tache synchronisée sur une base de 20 msec.
Je voudrais savoir si je dois utiliser une interruption sur l'HTR ou y
a


t_il une fonction spécial de l'ordonanceur pour faire ca facilement.


Ca dépend de ton besoin de précision... nanosleep() et setitimer()
peuvent convenir si tu n'as besoin de trop de précision, sinon voir du
côté des extensions temps réel (sachant qu'avec le HZ de 100 de base
sur IA-32, la précision est de l'ordre de 10ms pour nanosleep et
setitimer).

--
Gael Le Mignot "Kilobug" - - http://kilobug.free.fr
GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959
Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA

Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org



Loïc Joly
Le #452697
Gaël Le Mignot wrote:


Bonjour,
Je fais actuellement un logiciel sous linux ( base pentium + gcc ) et je
dois avoir une petite tache synchronisée sur une base de 20 msec.
Je voudrais savoir si je dois utiliser une interruption sur l'HTR ou y a
t_il une fonction spécial de l'ordonanceur pour faire ca facilement.


Ca dépend de ton besoin de précision... nanosleep() et setitimer()
peuvent convenir si tu n'as besoin de trop de précision, sinon voir du
côté des extensions temps réel (sachant qu'avec le HZ de 100 de base
sur IA-32, la précision est de l'ordre de 10ms pour nanosleep et
setitimer).

Bonjour,


Je n'ai pas compris toute ta réponse, en particulier la partie "le HZ
de 100 de base sur IA-32". Pourrais-tu détailler ?

Merci,

--
Loïc, curieux de comprendre pourquoi la fonction nano de linux est à si
basse fréquence...


kilobug
Le #452696

Bonjour,

Je n'ai pas compris toute ta réponse, en particulier la partie "le HZ
de 100 de base sur IA-32". Pourrais-tu détailler ?


Le HZ c'est la fréquence du timer pour le noyau. Ça donne un ordre de
grandeur de la précision des différents sleep/setitimer/... ainsi que
de la fréquence de changement de tâches.

Sur IA-32 (i386 et compatibles), le HZ est à 100 (donc, 100 ticks par
seconde) pour le 2.4 et à 1000 pour le 2.6. Sur Alpha, il est 1000
tout le temps. Certains parchs permettent de changer la valeur de HZ à
la compilation, voir même dynamiquement.

Merci,


--
Loïc, curieux de comprendre pourquoi la fonction nano de linux est à
si basse fréquence...


Parce qu'un tick de timer coûte beaucoup de CPU. Rien que "iret"
(retour au code utilisateur) prend plusieurs milliers de cycles sur un
P4. Augmenter HZ augmente la vitesse de réaction du système (sleep
plus précis, ordonnancement plus rapide des tâches, ...) mais augmente
aussi le nombre de cycles CPU "gaspillés". En général, on conseille un
HZ élevé pour une machine de bureau (pour augmenter la réactivité des
applications) mais un HZ faible pour un serveur type serveur mail ou
serveur web.

--
Gael Le Mignot "Kilobug" - - http://kilobug.free.fr
GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959
Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA

Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org

joan rodo
Le #454764
Hi

Quizas en este mundo no solo se habla Ingles

Pot ser que en aquest mon no nomes es parla Angles.

Pot ser que sou menys que un 1%

Joan

"Michael Schnell" mensaje news:
Bonjour,


I suppose only 1 % of the readers here have enough French to follow you.
If you write in English you will get _much_ more answers.

-Michael



Michael Schnell
Le #457488
While I have a little bit French I don't have any Spanish (silly thing,
as of course Spanish is much more used in the World than French...) ),
so I can't follow you.

-Michael
legalguillaume
Le #456531
Michael Schnell
While I have a little bit French I don't have any Spanish (silly thing,
as of course Spanish is much more used in the World than French...) ),
so I can't follow you.

-Michael


C'est mieux le français..
c'est beaucoup plus joli et compréhensible...

Poster une réponse
Anonyme