AA_burnout_sxc781495_ChrisQuinnell-Brock.jpg

© Chris Quinnell-Brock, sxc.hu

Burnout

Benchmarks unter Linux

10.02.2010 Nach dem Auspacken, Zusammenschrauben oder Einrichten des neuen Rechners will jeder Anwender den neuen Boliden erst einmal testfahren. Doch wie misst man sinnvoll die Leistung? Und was haben die Ergebnisse im Alltagsbetrieb für eine Relevanz?

Benchmarking dient nicht nur dem virtuellen Kräftemessen, sondern bildet einen eigenen Industriezweig der IT-Welt: Benchmark-Ergebnisse beeinflussen viele Kaufentscheidungen maßgeblich – nicht nur bei Privatanwendern, sondern oft auch bei Firmen, die im Sinne der Gewinnmaximierung immer auf der Suche nach der für sie idealen Hard- oder auch Software sind.

Deshalb ist es besonders wichtig, dass Sie ihren Rechner in Benchmarks mit Aufgaben herausfordern, die wenigstens entfernt Ihrem tatsächlichen Nutzungsverhalten entsprechen. Ein Spitzenergebnis im populären Benchmark Super-Pi [1], der die Kreiszahl auf 32 Millionen Stellen genau ausrechnet, hilft niemandem. Viele "künstliche" Benchmarks wie beispielsweise Geekbench [2] werden jedoch zu Unrecht oft als synthetisch und deshalb irrelevant klassifiziert. Denn meistens integrieren die Autoren in diesen synthetischen Benchmarks Routinen für Algorithmen, die in normalen Anwendungen sehr häufig zum Einsatz kommen.

Fast-Fourier-Transformationen (FFT) beispielsweise spielen eine große Rolle bei der Kompression oder dem Filtern von Audio-, Video- und Bilddaten. Der Hidden-Markov-Model-Algorithmus (HMM) kommt bei der Erkennung von Sprache, Gesten und Schriften zum Einsatz. Matrixmultiplikationen, wie sie etwa GEMM/BLAS im Supercomputer-Benchmark Linpack testet, sind nicht nur für Rechencluster relevant: Zahllose Programme multiplizieren Matrizen, etwa beim Verrechnen zweier Ebenen in einem Bild. Finite Elemente kommen beispielsweise bei Physiksimulationen zum Einsatz – hierbei geht es nicht etwa nur um Spiele, sondern auch um 3D-Modelling in Blender oder simulierte Crashtests am Computer.

Generelles

Ein paar Dinge gibt es bei korrektem Benchmarking zu berücksichtigen. Um verlässliche Werte zu erlangen, sollte der Benchmark exklusiv laufen, damit keine anderen Programme oder Hintergrundprozesse Ressourcen abzwacken. Bildschirmschoner erweisen sich oft als erstaunlich ressourcenverschwendend, also sollten Sie auch diese unbedingt deaktiveren. Ein Benchmark sollte eine gewisse Zeit laufen, um verlässliche Werte zu liefern: Es gibt immer Hintergrundprozesse, die den Benchmark beim Lauf stören – und je kürzer der Benchmark läuft, umso stärker fallen die Auswirkungen aus. Auch die unvermeidliche Messtoleranz schlägt bei kurzen Benchmark-Lauzeiten unvermeidlich stärker zu Buche.

Es ist immer eine gute Idee, Benchmarks mehrmals laufen zu lassen, um eventuelle Störungen durch Systemprozesse auszuschließen. Vorsicht vor den Caches: Wenn nach dem ersten Lauf der Benchmark bei allen darauffolgenden Durchläufen deutlich schneller ist, dann wurden beim Benchmark geladene Dateien vom System im Speicher gepuffert. Da dies nicht dem Praxiseinsatz entspricht, sollten Sie Caching nach Möglichkeit ausschließen – bei Datei-Kopiertests beispielsweise durch das Kommando sync, das die Festplattencaches leert.

Schlussendlich sollten Sie sicherstellen, dass keine Flaschenhälse das System ausbremsen. Lädt der Benchmark beim Lauf beispielsweise größere Dateien und arbeitet das Speichermedium sehr langsam, kann die CPU ihr volles Potential nicht ausspielen, da sie die meiste Zeit auf Daten wartet. Bei zu wenig RAM im System lagert der Rechner auf den Swap-Bereich der Festplatte aus, was alle Vorgänge stark verlangsamt. Ähnlich verhält es sich bei einem Grafikbenchmark mit sehr großen Texturen in einem System mit wenig Videospeicher.

Wahl des Benchmarks

Zusätzlich sollten Sie bei der Beurteilung der Praxisrelevanz eines Benchmarks für Ihren Bedarf wissen, welche Systemkomponenten ihr bevorzugter Einsatzzweck primär beansprucht. Datenbankanwendungen etwa brauchen viel und schnellen Speicher sowie schnelle Festplatten mit möglichst niedriger Latenz, andererseits spielt schnelle Grafik hier keine Rolle. Spiele andererseits benötigen vor allem hohe Grafik-Performance und meist eine leistungsfähige CPU, kurze Speicher- und Plattenzugriffszeiten sind hier nur sekundär relevant – etwa beim Laden eines Levels.

Server brauchen viel Speicher, einen hohen Netzwerkdurchsatz, gute Festplattensysteme und – je nach Nutzeranzahl – so viele CPU-Kerne wie möglich. Die Grafikleistung spielt hier dagegen ebensowenig eine Rolle wie – zumindest bis zu einer gewissen Benutzeranzahl – die Geschwindigkeit des Speichers. Liegt der Haupteinsatzzweck eines Rechner bei Video-Encoding oder Raytracing, braucht er viele möglichst schnelle CPU-Kerne. Festplatten-Performance und Speicherdurchsatz spielen hier eine untergeordnete Rolle, ebenso Grafik – zumindest bis Video-Encoding auf der Grafikkarte auch unter Linux Realität wird.

Wissen Sie die für ihren Nutzungszweck relevanten Systemkomponenten, können Sie einen passenden Benchmark auswählen. Für Server und Datenbanken empfiehlt sich beispielsweise auf jeden Fall ein Festplattentest, je nach Server-Art mit sequenziellem (Fileserver) oder zufälligem (Webserver) Datenzugriff.

Benchmarking unter Linux

Für einzelne Disziplinen gibt es unter Linux zahlreiche Benchmarks. Die Linux Benchmark Suite Homepage [3] listet sehr viele für Linux verfügbare Benchmarks, sowohl synthetische als auch Server- und Anwendungsbenchmarks. Suiten, die alle Aspekte eines Systems untersuchen, sind jedoch rar gesät – der Hauptgrund, warum wir mit dem LUbench [4] unsere eigene Benchmark-Suite zusammenstellten.

Während der Entwicklung des LUbench kündigte die Linux-Benchmarkwebseite Phoronix [5] ebenfalls eine umfassende Linux-Benchmarksuite [6] an, die Phoronix Media im Juni 2008 in Version 1.0 vorstellte. Im April 2009 kam mit Version 1.8 auch ein grafisches Frontend dazu, mittlerweile ist Version 2.0 aktuell. Mit ihr kam auch PTS Live dazu, eine speziell für das Benchmarking zusammengestellte, auf Ubuntu 9.10 basierende Live-Distribution mit der Phoronix Test Suite, die Sie einfach von USB-Stick oder DVD booten.

Datenträger

Zum Geschwindigkeitstest von Datenträgern (Festplatten, USB-Massenspeicher etc.) eignet sich das in fast jeder Distribution integrierte hdparm hervorragend. Unsere Messungen beim Kopieren großer Dateien von Datenträgern beim USB-3.0-Test in Ausgabe 02/2010 [7] mit der Stoppuhr zeigten, dass die Testergebnisse von Hdparm maximal zwei MByte/s abweichen. Mit dem Befehl sudo hdparm -t /dev/sdX testen sie die Lesegeschwindigkeit eines Geräts, das dazu noch nicht einmal gemountet sein muss. Auch Dateisystemunterstützung spielt keine Rolle, da Hdparm nur die rohen Blöcke liest. Das Tool schreibt dabei auch keinerlei Daten aufs Gerät, was versehentliche Datenverluste ausschließt.

Doch das blockweise Lesen von großen Dateien ist nur eines von mehreren gängigen Szenarios. Der Festplattenbenchmark Bonnie++ testet deshalb neben großen Dateien (sequential) auch Zufallszugriffe (random), was bei vielen kleinen Dateien stark zu Buche schlägt. Auch das (Über-)Schreiben, Erstellen und Löschen von Dateien testet das Programm, wobei es jeweils auch die resultierende CPU-Last festhält. Zusätzlich zum blockweisen Lesen testet Bonnie++ auch das Lesen einzelner Zeichen ("Chars").

Hauptspeicher

Um zu sehen, ob die Dual-Channel-Bestückung im neuen Rechner auch funktioniert eignet sich der Speicherbenchmark RAMspeed [8]. Er misst das Lesen und Schreiben von Integer- und Fließkommawerten in unterschiedlichen Blockgrößen. Dabei nutzt das Programm in seiner aktuellen Version zwei Threads und unterstützt somit auch Mehrkern-CPUs.

Die Szenarien, in denen die deutlich höhere Geschwindigkeit von Dual-Channel-RAM jedoch wirklich etwas bringt, sind rar gesät. Arbeiten Sie beispielsweise viel mit sehr großen Datenmengen, die es in Echtzeit zu verrechnen gilt, erweist sich der Dual-Channel-Betrieb als echter Segen. Solche Anforderungen treten etwa beim Arbeiten mit unkomprimierten HD-Videostreams auf.

Eine wesentlich höhere Bedeutung als dem schieren Datendurchsatz kommt in den meisten Einsatzfällen der Speicherlatenz zu, also jener Zeit, die der Prozessor mit Warten auf Daten aus dem Speicher verbringt. Die Integration des Speichercontrollers in die CPU – erstmals von AMD im Opteron vollzogen und erst kürzlich von Intel im Core i7 eingeführt – hat in Sachen Speicherlatenz wahre Wunder gewirkt. Linux-Kernelentwickler verwenden für Latenzmessungen normalerweise das schon sehr betagte, aber weiterhin äußerst nützliche lmbench [9]. Das etwas umständlich zu bedienende Programm ermittelt neben Durchsatzmessungen auch die Cache- und Speicherlatenz in Mikrosekunden sowie die Zeit, die der Prozessor für die Kontextumschaltung zwischen Prozessen benötigt.

Prozessor

Prozessor-Benchmarks gehören zu den populärsten Vertretern der Zunft – entsprechend umfangreich fällt die Zahl der verfügbaren Benchmarks aus. Für Linux gibt es beispielsweise den schon erwähnten Geekbench, der jedoch Closed Source und in der 64-Bit-Version zudem kostenpflichtig ist. Auch der bekannte altehrwürdige Bytemark des gleichnamigen US-Computermagazins läuft unter Linux, man findet ihn unter dem Namen nbench [10].

Der quasi als amtlich geltende SPEC-CPU-Benchmark läuft auch unter Linux – nicht zuletzt, weil es ihn ausschließlich im Quelltext gibt. Das hat seinen Grund, da er den Compiler bei der Bewertung der Leistungsfähigkeit mit einbezieht. Problematisch an SPEC-CPU ist lediglich, dass ein großer Teil der SPECfp-Fließkomma-Hälfte des Tests aus Fortran-Code besteht. Fortran kommt zwar im wissenschaftlichen und Cluster-Umfeld nach wie vor verbreitet zum Einsatz, bei Desktopanwendungen jedoch nie. Entsprechend nichtssagend fallen die Ergebnisse für Endanwender aus, hier wären eher C/C++ oder auch Java als Programmiersprachen relevant.

Grundsätzlich lässt sich zum Testen der CPU-Performance jedes prozessorintensive Programm verwenden: Man misst einfach die Zeit, die die CPU für eine typische Aufgabe benötigt, und vergleicht. Nichts anderes machen wir bei den CPU-Tests in unserem LUbench, wo wir die CPU unter anderem mittels Raytracing, Encoding und Kompression testen.

Grafikchip

In Sachen Grafik-Benchmarks sieht es unter Linux etwas mager aus. Zwar gibt es viele Spiele, die sich für Leistungsmessungen eignen würden, doch die verwendeten 3D-Engines sind meist schon etwas betagt und basieren oft auf der selben, von der Spieleschmiede Id Software im Quelltext veröffentlichten Quake-Engine. Die Shader-Möglichkeiten moderner GPUs liegen weitgehend brach. Obwohl die proprietären Treiber von ATI und Nvidia immer die neuesten OpenGL-Erweiterungen und sämtliche Shader-Techniken unterstützen, gibt es abgesehen von Linux-Portierungen einiger kommerzieller Spiele nahezu nichts, womit man unter dem freien Betriebssystem Shader-Leistung messen kann.

Deshalb erstellten wir für die LinuxUser-Benchmark-Suite aus dem Open-Source-Spiel Sauerbraten (Abbildung 1) mit Hilfe der Entwickler einen Benchmark, der explizit auf Grafik-Shader ausgelegt ist. Das Spiel basiert auf der recht modernen Cube-2-Engine, einer kompletten Eigenentwicklung des Sauerbraten-Projekts. Zur Leistungsmessung in gängigen 3D-Engines eignet sich hingegen beispielsweise der Open-Source-Shooter Nexuiz [11].

Abbildung 1: Die Cube-2-Engine von Sauerbraten nutzt Shader und eignet sich damit perfekt als Leistungstest für Grafikkarten.

Aber Spiele-3D ist nicht der einzige Grafik-Maßstab: Die Anforderungen und die recht klar umrissenen 3D-Welten unterscheiden sich stark von 3D im Anwendungsbereich, wie etwa 3D-Animation, CAD oder Visualisierung. Bei 3D-Anwendungen spielen Texturen selten und Shader meist überhaupt keine Rolle, hier kommt es auf möglichst hohe Zeichenleistung bei einfarbigen Polygonen sowie Drahtgitterdarstellung an – was wiederum im Spielebereich selten bis nie relevant ist.

Speziell zum Messen von 3D-Anwendungsperformance hat die Benchmarking-Organisation SPEC den OpenGL-Benchmark SPECviewperf [12] (Abbildung 2) entwickelt. Er besteht aus dem originalen OpenGL-Code diverser populärer 3D-Modelling-, CAD- und Visualisierungs-Programme – den Großteil davon gibt es auch für Linux. Das klassische, bei fast allen Distributionen enthaltene glxgears hingegen eignet sich nicht zum Leistungstest für 3D-Anwendungen. Dessen OpenGL-Code fällt zu alt und viel zu simpel aus, um brauchbare Ergebnisse zu bekommen.

Abbildung 2: SPECviewperf testet 3D-Anwendungsleistung. Hier eine der wenigen texturierten Szenen aus dem Maya-Subtest.

Doch Grafikleistung heißt nicht nur 3D. Auch die reine Zeichenleistung in 2D können Sie ermitteln, beispielsweise mit gtkperf [13]. Der ermittelte Wert sagt aus, wie flott das System Fenster zeichnet, was Einfluss auf die tägliche Arbeit mit dem Windowmanager ihrer Wahl hat: Nicht nur im Benchmark, sondern auch bei der normalen Nutzung werden Fenster ständig skaliert, verschoben und neu erstellt.

Newcomer OpenCL

In nicht allzu ferner Zukunft kommt bei den GPU-Tests ein weiterer Bereich hin: OpenCL, ein neuer plattform- und herstellerübergreifender Standard, der normale Rechenaufgaben statt auf der CPU auch auf dem Grafikchip ausführen kann. OpenCL dürfte in den nächsten Jahren sehr wichtig werden, weshalb wir bereits an einer OpenCL-Erweiterung für LUbench arbeiten. Viele rechenintensive Aufgaben, die heute noch die CPUs belasten, laufen aller Voraussicht nach schon bald weitgehend auf dem Grafikchip – und das auch noch deutlich schneller und stromsparender. H.264-Video-Decoding per VDPAU auf Nvidia-Grafikchips [14] machte hier unter Linux den Anfang.

Benchmarks auf DVD

Die LinuxUser Benchmark-Suite LUbench [4] enthält viele der im Artikel erwähnten Programme, darunter Bonnie++, GTKperf, Nexuiz, RAMspeed, Sauerbraten und SPECviewperf. Die übrigen oben erwähnten Tests finden Sie gesondert auf der DVD.

Infos

[1] Super-Pi (Windows): http://www.computerbase.de/downloads/software/benchmarks/super_pi/

[2] Geekbench: http://www.primatelabs.ca/geekbench/

[3] Linux Benchmark Suite: http://lbs.sourceforge.net

[4] LUbench v2.1.1: Daniel Kottmair, "Messdiener", LinuxUser 03/2010, S. 40, http://www.linux-community.de/artikel/20490/

[5] Phoronix: http://www.phoronix.com

[6] Phoronix-Testsuite: http://www.phoronix-test-suite.com

[7] USB 3.0 in der Praxis: Daniel Kottmair, "Entfesselt", LinuxUser 02/2010, S. 70, http://linux-community.de/artikel/19634/

[8] RAMspeed: http://www.alasir.com/software/ramspeed/

[9] Lmbench: http://www.bitmover.com/lmbench/

[10] Bytemark/Nbench: http://www.tux.org/~mayer/linux/bmark.html

[11] Nexuiz: http://www.alientrap.org/nexuiz/

[12] SPECviewperf: http://www.spec.org/gwpg/

[13] GTKperf: http://gtkperf.sourceforge.net

[14] GPU-Vergleich: Daniel Kottmair, "Elefantenrunde", LinuxUser 05/2009, S. 78, http://linux-community.de/artikel/18355/

Einem Freund empfehlen    Druckansicht beenden Bookmark and Share
Kommentare