Michael Schröpl: times(): Was genau bedeuten "system time" und "user time"?

Beitrag lesen

Ich kann es leider auch nicht beantworten. Ich hab es mir immer so vorgestellt, dass system time die verbrauchte Prozessorzeit ist, waehrend user time die absolute Laufzeit des Prozesses ist. Aber das ist nur Spekulation ;-)

... welche ich aber schnell zu wiederlegen können glaube.

Ich habe während meiner Tests das alte und das neue Skript auf derselben Maschine teilweise einzeln und teilweise parallel laufen lassen, einmal sogar mit massiver zusätzlicher Hintergrundlast.
Die user time hat sich dabei *nicht* geändert - also ist das die CPU-Zeit, welche das Perl-Skript braucht, den Index zu lesen und die Treffer zu berechnen. (Die Ausgabe von HTML "stoppe" ich nicht mehr mit, weil ich die Zeit ja "ganz oben" im Trefferdokument einblenden will.) Insbesondere ist die user time reproduzierbar.

Was sich ständig ändert, das ist die system time. Ich vermute, daß hierzu alles gehört, was das Skript an Verwaltungsarbeit im Betriebssystem auslöst.
Da wären zu nennen: 1. Abwicklung von Festplattenzugriffen für Dateiverarbeitung und Swapping (das würde beispielsweise eine Streuung erklären, wenn die Seiten teilweise schon im Cache liegen und teilweise nicht), 2. Taskwechsel usw.
Auf einem guten alten Host gab es für solche Aktionen sogar unterschiedliche Prozessorzustände (mit unterschiedlichen Unterbrechungsmasken), und für diese wurde die CPU-Zeit separate abgerechnet. Sinn der Sache war es, messen zu können, welcher Anteil der Realzeit für die Infrastruktur des Betriebssystems geopfert werden muß - wenn die system time ansteigt, dann sind normalerweise irgendwelche Ressourcen überlastet (z. B. nicht genug Hauptspeicher und deshalb zuviel Swapping).

Auch UNIX mißt seine Zeiten irgendwie in einer ähnlichen Weise. Ich würde raten, daß die system time diejenige ist, welche von den kernel-Prozessen belegt wird - ich habe aber nie einen UNIX-Kernel von innen gesehen und deshalb kein Gefühl, was alles hierzu gehören könnte.

Dieselbe Trennung in user und system time liefert times() in Active Perl 5 auch für Windows. Hier ist mein Wissen über "Systemprozesse" (mit dem Taskmanager von NT4 sieht man ja einige) noch viel diffuser.

Für die Beantwortung meiner Frage bräuchte man also wahrscheinlich detaillierte Kenntnisse über den Aufbau der entsprechenden Betriebssystemkerne - und die habe ich leider nicht. Deshalb ja mein Posting: Hat die jemand?