PHP: Präzises Benchmarking unter Linux

Das Benchmarking mittels microtime() gibt immer nur einen ungefähren Anhaltspunkt über die Ausführungszeit eines Programms. Denn die Abstützung auf die Realzeit verfälscht das Ergebnis. Besonders wenn der Computer während der Laufzeit noch andere Jobs erledigen muss, schlägt sich das auch in der Laufzeit des Programms nieder.

Besser ist es da, auf andere Zeitmesser zurückzugreifen – sofern die vorhanden sind. Linux führt in den internen Variablen user time und system time Buch über die aufgewendete Rechenzeit für Anwendungen und das System. Führt ihr PHP-Programm beispielsweise mathematische Berechnungen durch, zählt das zur user time. Dateioperationen zählen dagegen zur Systemtime da Linux-Systemfunktionen verwendet werden.

Zur Abfrage dieser Zeiten gibt es die Funktion getrusage() (“get resource usage”), die ein Array zurückliefert. Die Zähler für user time und system time werden dabei jeweils in zwei Felder aufgespaltet. Eines zählt die Mikrosekunden, das andere enthält die vollen Sekunden. Sobald der Mikrosekundenzähler die Million erreicht hat, wird er auf 0 zurückgesetzt und der Sekundenzähler um eins erhöht.

Um zum Beispiel den momentanen Wert für die user time zu ermitteln, merken Sie sich die Ausgabe von getrusage() in der Variablen $use und addieren die beiden Zeitfelder so, dass sich ein Sekundenwert ergibt:

$use = getrusage();

$utime1 = $use[‘ ru_utime.tv_sec’];

$utime1 += $use[‘ ru_utime.tv_usec’]/1000000;

Nachdem der zu messende Programmcode abgearbeitet ist, wiederholen Sie obige Zeitermittlung, merken sich das Ergebnis aber in der Variablen $utime2. Die Differenz beider Werte ergibt dann die benötigte user time für das gelaufene Programm.

Mit der Systemzeit funktioniert das mit folgendem Codeschnipsel

$use = getrusage();

$stime1 = $use[‘ ru_stime.tv_sec’];

$stime1 += $use[‘ ru_stime.tv_usec’]/1e6;

Wenn Sie die ermittelten Zeiten für user und system addieren, bekommen Sie einen praktikablen Wert, wenn es Ihnen auf die Unterscheidung nicht ankommt.

Ähnliche Beiträge