Benchmark – Textpattern mit und ohne Cache
Ich habe heute rein aus reiner Neugierde ausprobiert, wie effektiv das Cache-System asy_jpcache für Textpattern arbeitet beziehungsweise um welchen Faktor die Anzahl der ausgelieferten Seiten steigen würde. Mir ist klar, dass solche Benchmark-Werte nicht die repräsentativsten sind, daher beschreibe ich in aller Kürze die Testbedingungen damit sich jeder selbst ein Bild machen kann. Der Benchmark wird mit ApacheBench auf einem EEE PC ausgeführt und das Gerät, dessen Leistung getestet wird ist eine SheevaPlug mit einem 1,2Ghz ARM Prozessor und 512MB RAM. Der verwendete Webserver ist (natürlich) Nginx in der Version 0.8.31, der auf einem Debian Lenny läuft. Die beiden Rechner sind über einen 100Mbit-Switch verbunden (was aber keine Rolle spielen sollte, da die SheevaPlug ohnehin nicht so viel ausliefern kann). Die Seite, auf die der Benchmark ausgeführt wurde ist die Startseite von Textpattern nach einer frischen Installation.
Benchmark erfolgte mit diesen Parametern
ab -n 1000 -c 10 http://SheevaPlug/index.php
Benchmark #1 (ohne Cache)
Server Software: nginx/0.8.31 Server Hostname: SheevaPlug Server Port: 80 Document Path: /index.php Document Length: 7668 bytes Concurrency Level: 10 Time taken for tests: 390.297 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 8008000 bytes HTML transferred: 7668000 bytes Requests per second: 2.56 [#/sec] (mean) Time per request: 3902.969 [ms] (mean) Time per request: 390.297 [ms] (mean, across all concurrent requests) Transfer rate: 20.04 [Kbytes/sec] received
Benchmark #2 (mit Cache)
Server Software: nginx/0.8.31 Server Hostname: SheevaPlug Server Port: 80 Document Path: /index.php Document Length: 7668 bytes Concurrency Level: 10 Time taken for tests: 90.844 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 8238254 bytes HTML transferred: 7668000 bytes Requests per second: 11.01 [#/sec] (mean) Time per request: 908.438 [ms] (mean) Time per request: 90.844 [ms] (mean, across all concurrent requests) Transfer rate: 88.56 [Kbytes/sec] received
Natürlich ist die Betrachtung aller Werte wichtig für das Ergebnis, doch ich nehme für einen ungefähren Performancevergleich die “Time taken for tests” heran, die ohne Cache bei 390 Sekunden und mit Cache bei 91 Sekunden lag. Daraus folgt, dass durch den Einsatz eines Cache-Systems wie hier asy_jpcache etwa Faktor 390/91=4,3 mehr Seiten ausgeliefert werden können.
//Nachtrag: Ich habe (ohne mir noch viel mehr zu Versprechen) zu der oben genannten Konfiguration noch XCache hinzugefügt und es hat mich fast aus den Socken gerissen. Ich hätte ja mit einer winzigen Verbesserung gerechnet, aber seht selbst:
Benchmark #3 (mit Textpattern Cache und XCache)
Server Software: nginx/0.8.31 Server Hostname: SheevaPlug Server Port: 80 Document Path: /index.php Document Length: 7667 bytes Concurrency Level: 10 Time taken for tests: 26.063 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 8238247 bytes HTML transferred: 7667000 bytes Requests per second: 38.37 [#/sec] (mean) Time per request: 260.625 [ms] (mean) Time per request: 26.063 [ms] (mean, across all concurrent requests) Transfer rate: 308.69 [Kbytes/sec] received
Noch einmal konnten die 1000 Abfragen um fast Faktor 4 schneller ausgegeben werden, was am Ende bedeutet, dass ein optimiertes System mit einem Cache für das CMS kombiniert mit einem opcode Cache wie XCache in meinem Beispiel Faktor 390/26=15 schneller arbeiten kann. Mit weiteren Optimierungen ist da sicherlich noch etwas mehr drin, allerdings reicht dieser Wert für mich erstmal locker aus ![]()