Home > Allgemein > Benchmark – Textpattern mit und ohne Cache

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 ;)


Verwandte Artikel:

  1. Wordpress vs Textpattern


  1. 19. Januar 2010, 14:42 | #1

    Interessant :)

    Interessanter wäre bei dem Testaufbau, wann welches Serverprogramm inkl. MySQL was ausgibt im Sinne von “überhaupt noch etwas ausgeben muss”.

    asy_jpcache = full page cache = Ausgabe einer fertigen, optional gezippten Datei (wenn im Cache + Zeitrahmen)

    XCache = PHP op-code cache = index.php + asy_jpcache PHP code wird compiliert vorgehalten.

    Interessant wären also 1.000 verschiedene Seiten, die vor Auslieferung erst in den Cache eingelagert werden, weil das die Optimierungen auf dem ganzen Weg aufzeigen würde.

  2. chris
    11. Februar 2010, 18:28 | #2

    Hallo Markus,

    vorab, du hast vollkommen Recht! Ich habe daher jeden Anspruch auf Repräsentativität vorher ausgeschlossen, weil man Äpfel ja nicht mit Birnen vergleichen kann. Im Produktiven Einsatz ist das Beispiel von Oben wahrscheinlich nicht wirklich so performant wie mit einer Seite gemessen, aber es war ja auch nur eine Spielerei mit dem neuen kleinen Homeserver, der keine Höchstleistung bringen und auch keine Umfangreiche Datenbank beherbergen muss.

    Ich bin nach wie vor mit der Performance der oben genannten Konstellation zufrieden und habe mich auch weiterhin über die funktionsweise und das Zusammenspiel von einem Op-Code Cache System und einem CMS-Cache informiert. Im Nachhinein halte ich meine Verwunderung über die Performance-Steigerung mit einem Op-Code Cache auch für ein wenig überflüssig, aber man lernt immer wieder dazu ;)

  3. 22. März 2010, 14:39 | #3

    Eine 4-fache Beschleunigung finde ich schon genial. Ist die Frage wieviel man einer guten Optimierung noch an Geschwindigkeit rausholen kann. Danke für diesen lehrreichen Bericht ! LG Jenni

  4. Name (benötigt)
    14. April 2010, 18:35 | #4

    Kbytes/sec – zieh Dir mal die IEC 80000-13 rein.

  1. Bisher keine Trackbacks