Kornshell (ksh) vs. Perl – Part I – Verarbeitungszeiten von Dateien bei String/File Operationen

Bei vielen Analysen oder wiederkehrenden Jobs wird weiterhin auf Shell (Bash oder Ksh) gesetzt. Vorallem bei Aktionen wo einer Datei analysieren oder der Inhalt verändert werden sollen. Allerdings stellt sich immer wieder mal die Frage: in wie weit, wie in diesem Fall die Kornshell, die Performance eines System belastet wird, wenn z.B. die schnell geschrieben Skripte vollständig in die automatische Verarbeitung integriert werden. Dieser Beitrag soll aufzeigen ob und in wie fern es sich lohnt anstelle von Shell Scripting auf Perl Scripting zu setzen, wenn es sich um Datei oder String Operationen handelt.

Test Definition

  • Einheitlicher Skriptaufruf
  • Einheitlich Zeitmessung; außerhalb der jeweiligen Scripte
  • Mindesten drei Testläufe pro Skript/Dateigröße
  • Berechnung des Mittelwert der Verarbeitungszeiten aus den Testläufen
  • Gleiche Testdateien – verschieden Dateigrößen (Vergrößerung jeweils mit Faktor 10)
  • Tests erfolgen auf der gleichen Maschine (Unix AIX)
  • Tests erfolgen zur gleichen Tageszeit in abwechselnder Reihenfolge

Testdatei

Folgende drei Zeilen sind der Basisinhalt für alle Testdateien, die Zeilen werden einfach vervielfältigt.

Vorbereitung

(Zeitmessung in Millisekunden)
Erstellung eine Perl Script zur Anzeige von Start- und Endzeit inklusive Millisekunden, aus welchen nachher die Laufzeit in Millisekunden ermittelt wird.

Test Scripts

Kornshell (ksh) Perl
MyTest.ksh MyTest.pl

Was machen die Scripts? Die beiden Scripts machen folgendes:

  1. Datei Zeilenweise auslesen
  2. Den String jeder Zeile, bis zum letzten Punkt, links vernichten (abschneiden)
  3. Den String rechts abschneiden inklusive „,commando“
  4. Den ermittelten String ausgeben

Hinweis: Das ganze könnten man beliebig erweitern z.B. prüfen ob der String als innerhalb eines Verzeichnispfades existiert, den Output in eine Datei schreiben, Strings als Kommandos verketten und und … Hier sollten allerdings nur die vier kleine String-Operationen ausgeführt werden.

Run Test Scripts

Run Kornshell (ksh) Testing Script

Run Perl Testing Script

Erklärung
Vor und nach jedem Aufruf des Perl oder Kornshell Scripts wird die Zeit gemessen, so dass man die Start und Endzeit hat, mit welchen man die Laufzeit berechnen kann.

Ergebnisse Laufzeit

Inhalt Size Laufzeit
Perl
Laufzeit
Kornshell
Faktor
Wie viel schneller ist Perl?
3 Lines 125 Byte 53 ms 61 ms 1,15
30 Lines 1.250 Byte 59 ms 75 ms 1,27
300 Lines 12,2 Kb 54 ms 109 ms 2,02
3000 Lines 122 Kb 65 ms 799 ms 12,29
30000 Lines 1.221 Kb 123 ms 10.163 ms 82,63
300000 Lines 12.207 Kb 773 ms 96.719 ms 125,12

Vergleich Laufzeiten

Darstellung: Standard Skalierung
vergleich_kornshell_vs_perl_standard
Darstellung: Logarithmische Skalierung
vergleich_kornshell_vs_perl

Zwischenfazit:
Je größer die Datei wird, desto mehr Laufzeit benötigt Kornshell gegenüber Perl.

Vergleich KSH vs Perl Laufzeitfaktor

Wie viel langsamer ist Kornshell als Perl?

Standard Skalierung
faktor_perl_vs_kornshell_standard_skalierung
Logarithmische Skalierung
Faktor_Perl_kornshell_logarithmisch

Zwischenfazit:
Der Faktor der Kornshell Laufzeit gegenüber Perl, nimmt zu je größer die Datei wird.

Fazit

Scripte in Shell geschrieben, sind meist schnell von jedem mit rudimentären Programmierkenntnissen und Internetanschluss geschrieben. Auf Grund der Tatsache das dies meist ohne jegliche Quality Assurance oder Testing Framework geschieht, ist ein Shell Script schnell fertig. Allerdings zeigt der Vergleich der Verarbeitungszeiten von Kornshell (ksh) und Perl, dass die geringen Anforderungen an den Programmierer und die Geschwindigkeit, bei der Erstellung durch Systemlast erkauft werden. Bei B2B Systemen wo der Punkt Systemauslastung einen nicht zu unterdrückenden Punkt entspricht, sollte konsequent Zeit, Know-How und Ressourcen in andere Script Sprachen wie in diesem Fall Perl investiert werden. Auf das ganze System ist die Nutzung von Perl ab einer Dateigröße von >100 Kilobyte bei String Operationen lohnenswert und bei >1 Megabyte dringen zu empfehlen.

(Visited 87 times, 1 visits today)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.