Wer bremst "arecord" aus?

16/07/2008 - 23:48 von Helmut Waitzmann | Report spam
Wenn ich mit »arecord« Aufnahmen vom »Line«-Eingang der Soundkarte mache,
erhalte ich, wenn ich gleichzeitig die Festplatte quàle, indem ich
z.B. sowohl ein »firefox«- oder ein »Open-Office«-Fenster öffne,
Fehlermeldungen darüber, die aussagen, dass »arecord« mit Aufnehmen nicht
nachkommt (die Zeitstempel vorne dran rühren daher, dass ich die Ausgabe
von »arecord« durch »ts« laufen lasse, um im Protokoll zu sehen, wann die
Aussetzer auftreten):

2008-07-10T21:02:48+0200 overrun!!! (at least 154.201 ms long)
2008-07-10T21:16:53+0200 overrun!!! (at least 266.339 ms long)
2008-07-10T21:16:54+0200 overrun!!! (at least 197.776 ms long)
2008-07-10T21:16:55+0200 overrun!!! (at least 667.021 ms long)
2008-07-10T21:16:56+0200 overrun!!! (at least 609.541 ms long)
2008-07-10T21:16:57+0200 overrun!!! (at least 261.183 ms long)
2008-07-10T21:16:58+0200 overrun!!! (at least 349.083 ms long)
2008-07-10T21:16:59+0200 overrun!!! (at least 628.056 ms long)
2008-07-10T21:17:03+0200 overrun!!! (at least 91.992 ms long)
2008-07-10T21:17:06+0200 overrun!!! (at least 1086.976 ms long)

Solange ich den Rechner wàhrend der Aufnahme in Ruhe lasse (d.h. keine
interaktiven X11-Programme bediene), treten solche Aussetzer nicht auf.

So, wie ich die Manual-Pages »sched_setscheduler(2)«, »chrt(1)« und
»ionice(1)« verstanden habe, sollte es Abhilfe geben:

Stelle ich den »arecord«-Prozess ins real-time scheduling class
»SCHED_RR« (siehe »sched_setscheduler(2)«), dann erhàlt er den Prozessor,
wenn er ihn haben will und kein weiterer Prozess mit gleicher oder
höherer Prioritàt ebenfalls laufen will.

Stelle ich den »arecord«-Prozess ins real-time io scheduling class (siehe
»ionice(1)«), dann erhàlt er als erster Zugriff auf die Festplatte.

Die o.g. Prozesse, die die Aussetzer bewirken, laufen jedoch alle im
time-sharing scheduling class und im best-effort io scheduling class.

Meinem Verstàndnis nach können das soviele sein wie sie wollen: Kein
einziger von ihnen erhàlt die Betriebsmittel, die gerade von Prozessen im
real-time io scheduling class bzw. im round-robin scheduling class
gebraucht werden.

Der einzige weitere Prozess, der im real-time schedulung class làuft, ist
laut

$ ps -o 'ppid sid pgid pid stat wchan nice class priority args' -ww -e

folgender:

PPID SID PGID PID STAT WCHAN NI CLS PRI COMMAND
1 0 0 2 S< migrat - FF -100 [migration/0]

Ich habe keine Ahnung, was der tut; aber er ist m.W. der einzige außer
»arecord«, der nicht im best-effort io class oder nicht im time-sharing
class làuft.

Bekommt dieser Prozess Arbeit, wenn andere minderbemittelte (d.h. im
time-sharing class und im best-effort io class laufende) Prozesse die
Festplatte oder den Prozessor haben wollen? Das hàtte dann zur Folge,
dass die minderbemittelten Prozesse indirekt dem »arecord«-Prozess
vorgezogen werden.

Was làsst sich dagegen tun?
Wer mir E-Mail schreiben will, stelle | When writing me e-mail, please
bitte vor meine E-Mail-Adresse meinen | precede my e-mail address with
Vor- und Nachnamen, etwa so: | my full name, like
Helmut Waitzmann <xxx@example.net>, (Helmut Waitzmann) xxx@example.net
 

Lesen sie die antworten

#1 Helmut Waitzmann
16/07/2008 - 23:52 | Warnen spam
Ich vergaß zu erwàhnen: Das Linux ist Debian Etch.
Wer mir E-Mail schreiben will, stelle | When writing me e-mail, please
bitte vor meine E-Mail-Adresse meinen | precede my e-mail address with
Vor- und Nachnamen, etwa so: | my full name, like
Helmut Waitzmann , (Helmut Waitzmann)

Ähnliche fragen