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

x264 Benchmark Kompilier- & Installationsanleitung für DragonFly BSD >=3.0

DragonFly BSD 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 also die einzigen BSD Systeme, auf dem der Bau und Betrieb von x264 zufriedenstellend funktioniert.

Um den x264 Benchmark auf DragonFly BSD ü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. Anders als bei anderen BSD Derivaten heißt der Package Manager für die Installation von Paketen von entfernten Quellen nicht pkg_add, sondern pkg_radd. Eine Übergabe der -r Option an pkg_radd so wie sonst von pkg_add bekannt ist nicht notwendig. Wir starten also als Superuser root den Package Manager, und installieren alle nötigen Pakete:


Manchmal muß man das Terminal neu starten, damit die neu installierten Programme auch gefunden werden. Sollte man sich auf einer reinen Textkonsole befinden, so genügt es, sich aus- und wieder einzuloggen (CTRL+D). Sollte man sich auf einer grafischen Oberfläche befinden, reicht es, das Terminalfenster zu schließen und neu zu öffnen. Nun geht es aber auch schon 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 DragonFly BSD falsche Shebang Zeile im Code. Die Shebang Zeile ist die allererste im Skript, 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:

Bevor wir nun die Konfiguration des Quellcodes vornehmen können, müssen wir noch das configure Skript von x264 abändern, damit es die DragonFly BSD Plattform auch erkennt. Vorbereitet ist das Skript nämlich eigentlich nur für die gängigeren Distributionen FreeBSD/NetBSD/OpenBSD. Auf DragonFly BSD schlägt das Skript fehl, wir müssen also in die Datei eingreifen, und sie z.B. mit vi oder nano editieren.

Wir suchen nach folgender Stelle im Code von configure:

openbsd*)
  SYS="OPENBSD"
  LDFLAGS="$LDFLAGS -lm"
  ;;

Nach dieser Stelle fügen wir den folgenden Block neu hinzu:

*dragonfly*)
  SYS="DRAGONFLYBSD"
  LDFLAGS="$LDFLAGS -lm"
  ;;

Nun empfiehlt es sich, von der csh auf die bash zu wechseln, da es ansonsten ein paar Probleme mit der Konfiguration des Quellcodes kommen kann. Man gebe also einfach ein:

Nun machen wir - auf der Bash shell bleibend - mit der Konfiguration weiter. Zuerst setzen wir ein paar notwendige Umgebungsvariablen für den Bau:

Damit können wir das configure Skript auch schon aufrufen, und den Code abschließend bauen und installieren:

Gegebenenfalls sollte man nach dem Konfigurationsschritt noch 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 diese Zeile sauber angezeigt wird, kann man mit den obenstehenden gmake Befehlen fortfahren, um Bau und Installation von x264 abzuschließen.
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. Wenn x264 nicht gefunden werden sollte, reicht es normalerweise, das Terminal neu zu starten bzw. sich aus- und wieder einzuloggen. Nun kann man folgendes Benchmarkscript, sowie die Inputvideodatei 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 DragonFly BSD. 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). Es ist bitte sicherzustellen, daß man auch wirklich /usr/bin/time und nicht einfach nur time aufruft, da der in die Shell eingebaute Befehl keine brauchbare Ausgabe produziert:

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:

DragonFly BSD 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 DragonFly BSD/BSD bitte einfach im [entsprechenden Forumsthread] nachfragen.

[Zurück zur x264 Benchmark Ergebnisliste]

[Anleitung kommentieren]