linux-l: Messung kurzer Zeiten

Till Christian Siering till at munin.in-berlin.de
Mi Jul 23 19:13:46 CEST 1997


On Sun, 20 Jul 1997 thomsen at cs.tu-berlin.de wrote:

> In message <19970720134559.55409 at jane.biologie.fu-berlin.de>, Christoph Lange w
> rites:
> > 
> > Hallo, Linuxer!
> > 
> > Wie kann ich kurze Zeiten mit dem Computer möglichst genau messen? Ist
> > es da genauer, eine Differenz mit gettimeofday() zu messen oder kann
> > ich mich eher auf meine Soundkarte verlassen.
> > 
> > Frage also: Wenn ich bei einer Samplingrate von 20050 Hz 20050 Samples
> > eingelesen habe, ist dann auch 1 sec vorbei? - Oder läßt sich das
> > alles wirklich genau nur mit RT-Linux machen?

Du kannst auch den Real Time Clock Driver von Paul Gortmaker benutzen.
Dokumentation in
/usr/src/linux/Dokumentation/rtc.txt
und ein Blick in
/usr/src/linux/drivers/char/rtc.c
sowie
/usr/src/linux/include/linux/mc146818rtc.h
helfen weiter. Die Funktion
void get_rtc_time (struct rtc_time *rtc_tm);
sieht fuer solche Aufgaben glaube ich ganz vielversprechend aus. Die
Aufloesung der Real Time Clock ist 8192 [Hz].

> Wenn Du genauer an die 1.0 s heran willst, kannst Du den lesenden prozess
> in die POSIX RT Warteschlange schieben. Dann konkurriert er nur noch mit
> anderen POSIX RT procs (normalerweise kein anderer). Dann stehlen aber
> immer noch Interrupts Dir die Rechenzeit (wenn auch normalerweise recht
> wenig - schwammig ausgedrueckt aber wie sollte man dazu konkretere Aus-
> sagen machen ?).

Auf meinem Linux Rechner (Pentium 133 [MHz]) habe ich bei Verwendung
eines Intervall Timers vom Typ ITIMER_REAL, Timesharing-Scheduling,
einer Messdauer von 30 [s] und einer Periode von 10 [ms] für den
Intervall Timer eine mittlere Abweichung von ca. 5,5% mit der die
Periode eingehalten wird - Jitter - gemessen. Bei Verwendung von
Scheduling-Fifo und der Messung als einzigem Prozess mit Real-Time
Scheduling lag die mittlere Abweichung bei ca. 0,382%. Damit bin ich
auch schon zufrieden, doch mit mehr als 100 [Hz] kann man den Intervall-
Timer nicht triggern, siehe time.h!

> Wenn Du den Zeitverlust durch Interrupts minimieren willst, dann musst Du
> tatsaechlich Linux RT verwenden (dort gibt es wohl auch Bsp. mit Sound-
> karten).

Das Sound-Beispiel in RT-Linux benutzt keine Soundkarte, sondern die
Real-Time Clock als Interruptquelle. Mit diesem Beispiel kannst Du
Dateien im Sun Audio Format auf dem PC Speaker ausgeben (grausame
Qualitaet).

Ansonsten musst Du bei RT-Linux beachten, dass die Real-Time Tasks
im Betriebssystemadressraum laufen. Fuer Zeitmessungen, die Du in
Prozessen im Nutzeradressraum durchfuehren willst ist das vielleicht
nicht ganz so bequem. Zur Kommunikation zwischen den Real-Time Tasks
und Prozessen im Nutzeradressraum musst Du auch einen speziellen
Kommunikationsmechanismus (Real-Time Fifo's) benutzen.


    Greetings,
        Till!

...if {![regexp ^$ $what_has_been_said]} {
      puts "At least something was said"
   }





Mehr Informationen über die Mailingliste linux-l