Voodooalert+x264 Logo
US+UK Flagge DE+AT Flagge
Sprache wechseln:
 

x264 Benchmark Kompilier- & Installationsanleitung für NetBSD >=6.0 RC2

NetBSD Logo

Systemvoraussetzungen

Vor allem anderen sollte eine Sache gleich vorweg erwähnt werden: Die hier präsentierte Anleitung ist NICHT fü OpenBSD <=5.1 oder FreeBSD <=9.1 oder älter gültig. Auf diesen BSD Derivaten ist es mir aufgrund von Einschränkungen des GNU portable Assemblers noch nicht gelungen, ein zufriedenstellendes Resultat zu erzielen. Bisher sind NetBSD und DragonFly BSD die einzigen BSD Systeme, auf dem der Bau und Betrieb von x264 zufriedenstellend funktioniert.

Um den x264 Benchmark auf NetBSD übersetzen und installieren zu können, muß zuerst einmal eine gewisse Basissoftware vorhanden sein. Um selbige zu installieren, werden wir uns des BSD Package Managers bedienen, der vorerst aber konfiguriert werden muß. Zum Zeitpunkt an dem diese Anleitung geschrieben wurde, setzte der Benchmark NetBSD 6.0 Release Candidate 2 voraus, da die finale Version 6.0 noch nicht zur Verfügung stand. Daher gehen wir hier von der Version 6.0 RC2 aus, bei neueren Release Candidates oder der finalen Version wäre der hier angegebene Pfad etwas anzupassen. Wir setzen also die Umgebungsvariable PKG_PATH, um dem Package Manager zu erklären, von wo Softwarepakete zu beziehen sind. In unserem hypothetischen Testfall gehen wir von einem Core 2 Duo Prozessor aus, wir wählen also die Architektur x86_64, auch das is entsprechend der eingesetzten Maschine anzupassen. Wir konfigurieren also als Superuser root den Package Manager, und installieren auch gleich alle nötigen Pakete:


Da die Konfigurationsskripte der zu bauenden Software nicht direkt sehr gut für NetBSD vorbereitet sind, machen wir uns das Leben etwas einfacher, und legen einen der vorausgesetzten Pfade einfach selber an, und fügen ihn dann den Suchpfaden für die aktuelle Session hinzu. Wie auch beim PKG_PATH sollte man auch nach dem Setzen der PATH Variable die aktive Terminalsitzung nicht schließen, ansonsten muß man diese Variablen beim erneuten Öffnen eines Terminals neu setzen:

Nun geht es ans Eingemachte:

Die Benchmark-Software selbst

Um x264 benutzen zu können, brauchen wir die Decodingfilter von libavcodec (kurz libav) und den x264 Encoder selbst, der im Verlauf der Installation gegen libav linked wird. Weiters natürlich das Benchmarkvideo, das als Input verwendet wird, Downloadmirror zum Download des letzteren sind am Ende der [Benchmarkergebnisliste] verfügbar. Als Ersatz für libav kann man auch ffmpeg/ffms verwenden, wenn man dies möchte.

Der Einfachheit halber nehmen wir hier an, daß die Dateien nun in /home/user/x264src/ liegen. Auf der Konsole wechseln wir also in dieses Verzeichnis, und beginnen mit libav. Entpackt wird das Archiv mit tar -xzvf <filename.tgz>, wonach es einen libav Ordner gibt. In diesen Ordner wechsle man nun, und beginne mit den notwendigen Modifikationen und dem Ausführen der entsprechenden Scripts:

Ein Perl Script, das Bestandteil des libav Quellcodes ist und sich für die Erzeugung der Dokumentation verantwortlich zeichnet, hat eine für NetBSD falsche Shebang Zeile im Code. Die Shebang Zeile ist die allererste im Script, die es also zu ändern gilt. Das Script liegt im libav Ordner im Unterordner doc und heißt texi2html.pl. Wir editieren dieses Script mit vi oder falls man über eine grafische Oberfläche verfügt z.B. mit xedit und suchen gleich am Anfang die folgende Stelle:

#! /usr/bin/perl -w

Wir ersetzen dies einfach durch den Pfad, in dem das tatsächliche Perl Binary liegt:

#! /usr/pkg/bin/perl -w

Nach dieser einfachen Modifikation können wir libav konfigurieren, bauen und installieren:

Damit ist libav installiert, und wir können mit x264 selbst fortfahren.

Zuerst entpacken wir - wieder im Verzeichnis /home/user/x264src den x264 Quellcode ca. wie folgt: tar -xjvf <x264 Archivdatei> und wechseln dann in das neu erzeugte x264 Unterverzeichnis.

Für x264 selbst ist wieder ein Trick anzuwenden, der mindestens das configure Skript selbst, möglicherweise aber auch noch einige andere Skripte betrifft, die hier eine Shebang Zeile eingetragen haben, die auf die Bash Shell verweist, die sich aber auf NetBSD in einem anderen Pfad befindet. Die einfachste Lösung ist es hier, einfach einen Link für die Bash zu erzeugen, damit die Shell von allen beteiligten Skripten gefunden wird:

Hiernach setzen wir unsere CFLAGS und CXXFLAGS für den C/C++ Compiler. Diese sind relativ generisch, sollten also auf den meisten Prozessorarchitekturen Gültigkeit besitzen:

Danach konfigurieren wir den Quellcodebaum:

Nach diesem Schritt ist zu prüfen, ob die Ausgabe des Skripts die Zeile "lavf yes" aufweist. Nur wenn dies der Fall ist, wird x264 korrekt gegen libav gelinked werden. Sollte dem nicht so sein, wäre das Fehlverhalten anhand der Ausgabe in config.log zu analysieren. Sofern dies in Ordnung scheint, müssen wir nur noch die neu erzeugte Datei config.mak anpassen, da das configure Skript hier einen kleinen Fehler einbaut bzw. üblicherweise eine Kleinigkeit vergißt. Wir suchen also eine Zeile gegen Ende der Datei, die in etwa so aussieht:

LDFLAGSCLI = -L. -lavformat -lavcodec -lswscale -lavutil -lm -lz -lbz2 -lpthread -lswscale -lavutil

Wir ergänzen diese Zeile wie folgt:

LDFLAGSCLI = -L. -L/usr/local/lib -lavformat -lavcodec -lswscale -lavutil -lm -lz -lbz2 -lpthread -lswscale -lavutil

Danach können wir zum Bau und zur Installation von x264 schreiten:

Damit ist auch x264 installiert und betriebsbereit! Die Funktion der Software läßt sich einfach über x264 --version prüfen. Funktioniert das, und zeigt das Binary an, daß es gegen libswscale und libavformat linked ist, dann hat alles sauber funktioniert. Nun kann man folgendes Benchmarkscript herunterladen:

Diese Datei launchbenchmark.sh kopieren wir nun in einen für den Benchmark gedachten Unterordner, den wir ggf. anlegen: mkdir -p /home/user/x264benchmark. In diesem Ordner sollte auch das Inputvideo elephantsdream_source.264 landen.

Nun wird x264 (leider) eine Art der CPU Kern Detektion verwenden, die zwar auf Linux und ggf. manchem Unix funktioniert, nicht aber auf BSD und damit nicht auf NetBSD. Das resultiert darin, daß x264 keine Ahnung haben wird, wieviele logische Prozessoren im System verfügbar sind. Wenn das passiert, wird x264 nur einen Worker Thread starten, und damit nur einen logischen Prozessorkern auslasten, obwohl wir Multithreading Support an Bord haben. Doch auch das läßt sich richten, indem wir die launchbenchmark.sh ändern, und x264 eine fixe Anzahl von Worker Threads vorgeben. Hier soll gelten:

Bei einer CPU mit 4 Kernen wären das also 6 Threads. Bei einer CPU mit 4 Kernen und Hyper-Threading (=8 logische CPUs) wären das 12 Threads. Sollte man einen Triple Core besitzen, funktioniert diese alte, über den Daumen gepeilte Regel für x264 natürlich nicht mehr, hier rundet man einfach auf 5 Threads auf. Das Maximum an verfügbaren Worker Threads in x264 ist zum Zeitpunkt an dem diese Anleitung verfaßt wurde übrigens 32, mehr Worker lassen sich also nicht starten. Um diese Änderung also vorzunehmen, öffnen wir die launchbenchmark.sh mit einem Texteditor wie vi oder xedit, und fügen jeweils hinter den beiden Optionen --cqm flat einfach folgendes hinzu:

Wobei n = Anzahl der Worker Threads, also z.B. --threads 12 für ein System mit 8 logischen CPUs. Damit steht auch der Nutzung mehrerer CPUs, CPU Kerne und Hyperthreads nichts mehr im Wege!

Nun kann man den Benchmark im Prinzip ausführen, hierzu gebe man einfach folgendes ein, während man im Ordner /home/user/x264benchmark sitzt und nachdem man geprüft hat, daß das Script auch ausführbar ist (chmod +x ./launchbenchmark.sh):

Das könnte dann zum Beispiel so aussehen (Klicken, um zu vergrößern), das Ergebnis ist danach einfach von der Konsole abzulesen, interessant ist der Wert nach der Zeile "Real", sobald der Test durchgelaufen ist:

NetBSD Screenshot

Je nach Maschine kann das jetzt durchwegs mehrere Stunden, in extremen Fällen auch Tage, Wochen oder Monate dauern. Bei Problemen mit dieser Anleitung oder weiteren Fragen zum x264 Benchmark auf NetBSD/BSD bitte einfach im [entsprechenden Forumsthread] nachfragen.

[Zurück zur x264 Benchmark Ergebnisliste]

[Anleitung kommentieren]