Schwierigkeiten im Umgang mit dem Scheduler
Hallo, Umfeld: Ich entwickle ein Messsystem auf auf einem Pentium 233 unter SuSE 2.4.10 und GnuC. Externe Daten werden von einem Abtastsystem ueber einen Treiber im Interruptbetrieb mit bis zu 5,6 kHz aufgenommen. Ich moechte die Prioritaet der diesen Treiber verwendenden Prozesse erhoehen, um sicherzustellen, dass sie auch dann Rechenzeit bekommen, wenn neue Messdaten vorliegen. Die Gesamtrechenkapazitaet des Systems ist nicht ausgeschoepft. Problem: Ich wuerde gerne die statische Prioritaet der betreffenden Prozesse mit sched_setschedluler() erhoehen und die Policy SCHED_FIFO verwenden. Das Makro _POSIX_PRIORITY_SCHEDULING existiert und hat den Wert 1. Ich kann die so eingestellten Parameter mit schd_getscheduler() und _sched_getparam() auch auslesen. Leider kann ich keinen Effekt auf die Prozesse feststellen. Fragen: 1. Kann ich die statische Prioritaet von Prozessen vom Betriebssystem aus abfragen? ps und top scheinen mir nur den nice-Wert und die dynamische Prioritaet auszugeben. /proc/$pid/stat enthaelt auf meinem System nur den nice-Wert und nicht die statische Prioritaet. 2. Kann es sein, das die entsprechenden Funtionalitaeten auf dem System gar nicht implementiert sind bzw. bei der Installation evtl. abgeschaltet worden sind. Wie kann ich das pruefen? Danke Martin Langer -- TEAM GmbH / Martin Langer Westerholter Strasse 781 / D-45701 Herten Tel.: ++49 - (0) 23 66 - 95 97 - 0 / Fax: ++49 - (0) 23 66 - 95 97 - 99 email: info@teamtec.de / http: www.teamtec.de
Hi Martin, Am Wednesday 11 June 2003 10:11 schrieb Martin Langer:
Umfeld: Ich entwickle ein Messsystem auf auf einem Pentium 233 unter SuSE 2.4.10 und GnuC. Externe Daten werden von einem Abtastsystem ueber einen Treiber im Interruptbetrieb mit bis zu 5,6 kHz aufgenommen.
Du suchst ein "Realtime Linux"?
Ich moechte die Prioritaet der diesen Treiber verwendenden Prozesse erhoehen, um sicherzustellen, dass sie auch dann Rechenzeit bekommen, wenn neue Messdaten vorliegen. Die
Normal geht das mit dem Systemruf 'nice'. Linux unterstüzt AFAIR standardmässig nicht RT, sondern nur "weiche Echtzeit"(Die Ausführung ist nicht garantiert). Es gibt aber die Möglichkeit den Kernel zu patchen ...
Problem: Ich wuerde gerne die statische Prioritaet der betreffenden Prozesse mit sched_setschedluler() erhoehen und die Policy SCHED_FIFO verwenden. Das Makro _POSIX_PRIORITY_SCHEDULING existiert und hat den Wert 1. Ich kann die so eingestellten Parameter mit schd_getscheduler() und _sched_getparam() auch auslesen.
Es gibt noch SCHED_RR, was AFAIK die Interrupts benutzen. Genauer kannst Du das hier nachlesen(besser als meine Tips): http://www.oreilly.de/german/freebooks/linuxdrive2ger/book1.html oder in '/usr/src/linux/Documentation/'
/proc/$pid/stat enthaelt auf meinem System nur den nice-Wert und nicht die statische Prioritaet.
s.o. man nice
2. Kann es sein, das die entsprechenden Funtionalitaeten auf dem System gar nicht implementiert sind bzw. bei der Installation
Doch schon, aber eben keine "harte Echtezeit"... Ciao Andre
participants (2)
-
Andre Heine
-
Martin Langer