Multicomputing mit Realsoft3D

Vorwort

Die Lizenz von Realsoft3D erlaubt es, das Programm gleichzeitig auf beliebig vielen Rechnern zu installieren und auch gleichzeitig zu nutzen. Technisch bietet Realsoft3D die Möglichkeit, die Berechnung einer Szene auf mehrere Rechner zu verteilen. Im Gegensatz zu anderen Programmen dieser Art verteilt Realsoft3D die Berechnung eines einzelnen Bildes auf mehrere Rechner. Dadurch hat man selbst bei Testberechnungen im Ansichtsfenster direkt einen Vorteil von mehreren Rechnern. Hinzu kommt, daß es Realsoft3D nicht nur in einer Windowsversion gibt, sondern auch in einer Linuxversion. Beide Versionen können gleichzeitig an dem selben Bild rechnen.

Viele Provider bieten nun sogenannte Root-Server relativ günstig an. Dies sind im Prinzip ganz normale X86-Maschinen mit installiertem Linux-System, welche in einem Rechenzentrum mit Verbindung zum Internet untergebracht sind.

Ich habe schon 2 mal eine solche Intallation vorgenommen, nun kommt die dritte. Dies ist eine gute Gelegenheit, von dieser Installation praktisch ein Tagebuch als Tutorial anzulegen. Hier sind wir nun zusammengekommen.

Dieses Tutorial ist ein Mitschnitt einer echten Installation. Die Portnummern stimmen, lediglich der Servername wurde in diesem Protokoll durch example.com geändert. Überall, wo example.com auftaucht, muß man also den Namen des eigenen Linux-Servers eintragen.

Szenario

Ein Bekannter von mir hat einen Root-Server. Er nutzt ihn hauptsächlich als Mail- und Webserver. Ausgelastet ist die Maschine nicht. Somit ist noch locker Platz für meinen Realsoft3D-Renderdämon. Auf der Maschine ist Debian GNU/Linux 3.1 installiert. Ich selbst sitze hier an einer Win98SE-Box mit einer DSL-Verbindung zum Internet. Dort läuft Realsoft3D in der Version "5.1 SP1 (05.01.10)". Auf der Linux-Seite ist Version 5.1.17 aktuell. Die Verbindung zum Internet wird über einen speraten Hardware-Router aufgebaut. Auf dieser Maschine habe ich mir nun einen SSH-Account einrichten lassen. Portforwarding ist aktiviert, X11-forwarding aber nicht.

Voraussetungen

Auf der Windowsbox, genannt Workstation, ist die aktuelle Realsoft3D-Verison installiert. Diese dient uns zum erstellen der Szene. Alle weiteren Rechner und Installationen sind nur Arbeitstiere.

Um uns mit dem SSh-Account auf dem Linux-Rechner zu verbinden, benötigen wir natürlich auch eine Internetverbindung.

Für die SSH-Verbindung benötigen wir einen SSH-Client. Unter Windows bietet sich da am besten PuTTY, an.

Aufgrund des Beta-Status der Linuxversion von Realsoft3D benötigen wir auch einen X-Server für Windows. Passend dazu habe ich X-Deep/32 gewählt, da der Server auf jeden Fall das Feature "DoubleBuffering" unterstützen muß.

Installation von PuTTY

PuTTY ist ein einfach zu benutzender, freier SSH-Client für Windows. Von daher ist er wohl auch der am meisten benutzte unter Windows. Informationen zu PuTTY und eine Downloadmöglichkeit findet sich auf der PuTTY-Homepage.

Ein Installationsskript kommt nicht mit. Einfach das Paket in ein beliebiges Verzeichnis entpacken und PuTTY starten.

Dir Grundeinstellungen von PuTTY lassen sich in den meisten Fällen direkt übernehmen. Ich habe aber in der Einstellungsrubrik SSH die Kompression eingeschaltet. In den meisten Fällen ist dies ein Vorteil. Die Daten werden dadurch on the fly komprimiert, was letztenendes eine höhere Datenrate zur Folge hat. Man muß aber bedenken, daß diese Kompression auch Rechenzeit benötigt. Zusätzlich habe ich unter SSH/Tunnels das X11-forwarding, X-display-location: localhost:2.0, aktiviert und einen Tunnel eingerichtet; Source-port: 5000, Destination example.com:7000, Local. Beide Einstellungen vereinfachen die Benutzung etwas und die Kompression kommt auch bei der eigentlichen Bildberechnung zum Tragen. Man muß dabei dann auch keine Einstellungen in einer eventuell vorhanden Firewall oder einem Router vornehmen. Wenn der Server diese Möglichkeiten nicht unterstützt, so können wir uns in den meisten Fällen damit trotzdem verbinden. In den Log-Dateien von PuTTY können wir dann später auch sehen, ob der Server diese Optionen aktzeptiert hat oder nicht. Danach wieder unter Session dieser Session einen passenden Namen geben und erstmal speichern.

Mittels Open bauen wir nun eine Verbindung zum Server auf. Bei der ersten Verbindung fragt PuTTY, ob wir den Schlüssel des Servers akzeptieren wollen. Normalerweise kann man dies einfach tun. Geben Benutzernamen und Paßwort an, und sind, wenn alles funktioniert hat, mit dem Server verbunden und haben eine Shell. Über das System-Menü können wir nun das Event-Log aufrufen. Darin finden wir jetzt die Einträge, ob unser Portforwarding, auf deutsch Portweiterleitung, akzeptiert wurde:

2005-04-05 22:17:09	X11 forwarding refused
2005-04-05 22:17:09	Local port 5000 forwarding to example.com:7000
2005-04-05 22:17:10	Allocated pty (ospeed 38400bps, ispeed 38400bps)

In meinem Fall wurde jetzt das X11-portforwarding nicht akzeptiert. Gut, von mir aus.

Die dort angegebenen Geschwindigkeitsangaben, 38400bps, haben im Prinzip keine praktische Bewandnis. Ist mehr oder minder historisch bedingt.

X11-Portforwarding zu Fuß

Ok, X11-Portforwarding ist schon wichtig, da, wenn nicht vorhanden, es ein Sicherheitsproblem darstellen könnte, wenn man einen X-Server für alle Erreichbarbar auf seiner heimischen Maschine startet. Zudem ist es einfacher einzurichten über einen SSH-Tunnel.

Dazu richten wir ein Portforwarding ein. Ich lass den X-Server einfach als Server Nummer 2 laufen. Also auf beiden Seiten Port 6002 weiterleiten.

In den Einstellungen zu PuTTY also einfach angeben: Local-Port: 6002, Remote-Port: localhost:6002, Remote. Dann müssen wir die Display-Variable setzen. Also geben wir einfach auf der Shell folgendes ein:

export DISPLAY=localhost:2

Zusätzlich muß nun der lokale X-Server auf Display Nummer 2 laufen. Die Portnummer, an der der X-Server lauscht ergibt sich einfach aus:

6000 + Displaynummer

Einrichtung des X11-Server

Als X-Server für Windows habe ich mich für X-Deep/32 entschieden, da er kostenlos verfügbar ist und einfach zu installieren. Zudem unterstützt er das Feature "DoubleBuffering", welches für Realsoft3D zwingend erforderlich ist.

In den Einstellungen folgendes angeben: Display Number: 2 und ein binding zu "127.0.0.1". Dadurch akzeptiert der Server nur Verbindungen vom eigenen Rechner aus. Und aus der Sicht des X-Servers ist in unserem Fall PuTTY das Programm, welches sich zum X-Server verbindet, nicht Realsoft3D, bedingt durch die Portweiterleitung.

Wenn eine Basisinstallation der X11-Libs auf dem Server vorhanden ist, können wir nun die Installation testen. Wir starten einfach xlogo. Auf der Shell also einfach mal folgendes eingeben:

xlogo

Hier bei mir ist es jetzt leider nicht installiert. Egal, passt schon.

Installation von Realsoft3D auf dem Linux-Server

Dazu benötigen wir erstmal die Linuxversion von Realsoft3D. Die gibt es direkt auf der Homepage von Realsoft3D. Wir laden sie aber nicht auf unsere Windowsmaschine. Wir möchten sie schließlich auf der Linuxbox nutzen. Dabei gehen wir folgendermaßen vor:
Wir rufen über einen Webbrowser die Homepage von Realsoft3D auf unserer Windowsmaschine auf. Klicken auf den Button [Software Updates], und dann auf [Linux Version]. Dort muß man nun seinen Lizenzcode angeben. Wir kopieren uns nun die Adresse des aktuellen Releases in die Zwischenablage und wechseln danach zu PuTTY. Dort geben wir einfach "wget " ein und drücken dann die rechte Maustaste. Dadurch wird der Text aus der Zwischenblage eingefügt und auf der Kommandozeile steht nun:

wget http://realsoft.fi/updates/linux/packages/realsoft3d-5.1.15-beta-linux-i386.sh

Durch einen Druck auf [Enter] beginnt nun direkt der Download auf den Server. Ruckzuck sind 40 MB übertragen.

Vor der eigentlichen Installation sollte man noch ein Verzeichnis "bin" anlegen:

mkdir bin

Auch sollte man sich mit

pwd

den absoluten Pfad seines Heimatverzeichnisses besorgen. Diesen benötigt das Skript. Relative Pfade sind leider nicht möglich.
Zum Start der eigentlichen Installation geben wir folgendes ein (je nach aktueller Programmversion):

sh ./realsoft3d-5.1.15-beta-linux-i386.sh -t

Die Option -t sorgt dafür, daß kein Fenster geöffnet wird, sondern das die ganze Installation über das Terminalfenster läuft. Die eigentliche Installation ist praktisch selbsterklärend. Als Installationverzeichnis gibt man einfach /home/yogi/realsoft3d an. Als Verzeichnis für den symbolischen Link kann man einfach "/home/yogi/bin" angeben. Als Pfad muß man natürlich den Pfad zu seinem eigenen Homeverzeichnis angeben, welches man mittels "pwd" ermitteln kann, sofern man nach dem Login das Verzeichnis nicht gewechselt hat. Ansonsten kann man es mittels

echo $HOME

ermitteln.

Die fertige Installation benötigt ca 97 MB.

Die Installation der zusätzlichen Libraries

Die Linux-Server-Version befindet sich noch im Betastadium. Sie funktioniert zwar, aber die Installation ist noch nicht wirklich fertig. Aus diesem Grund müssen auf dem Server einige GUI-Libraries vorhanden sein, die eigentlich garnicht nötig sind. Dies wären die folgenden Libraries:

Eine vollständige Installation ist nicht erforderlich. Es reicht aus, die entsprechenden Libraries einfach in das Realsoft3D-Verzeichnis abzulegen. Zum Starten des Dämon muß man sich dann allerdings im Realsoft3D-Verzeichnis befinden. Diese Libraries brauchen auch nicht speziell für die Maschine kompiliert zu sein. Sie müssen einfach nur funktionieren. Sie werden nur zum Starten des Renderdämon benötigt. Danach werden Sie nicht mehr vom Programm benutzt.

Der erste Start

Es muß auf jeden Fall die Variable $DISPLAY gesetzt sein.

export DISPLAY=localhost:2

Zum Start des Dämon muß auch der X-Server auf dem Windowsrechner gestartet werden.

Der erste Start.

cd ~/realsoft3d
./rendd -port 7000

Ausgabe:

yogi@a15162200:~/realsoft3d$ ./rendd -port 7000
libGLU.so.1: cannot open shared object file: Datei oder Verzeichnis nicht gefunden
20:33:06    r3rendd.c/ 417: Using box count: 4 x 3
20:33:06    r3rendd.c/ 613: RendD  started. Host 'a15162200.alturo-server.de'. Port '7000'.
20:33:06    r3rendd.c/ 615: Ready

YES! Up and running! :-)

Nun kann der X-Server auf dem Windowsrechner wieder beendet werden. Er wird nun für den weiteren Betrieb nicht mehr benötigt. Nur für den Start des Dämons.

Den Renderdämon mit Realsoft3D nutzen

Wir starten nun Realsoft3D auf unserer Windowsbox. Nun laden wir zum Testen einfach ein Projekt, zum Beispiel einfach unser Lieblingsprojekt. Danach wechseln wir in die Rendering-Settings. Es gibt nun mehrere Wege. Zum Testen können wir einfach eine Kopie der Render-Settings "Super High Quality" anlegen. Einfach duplizieren. Auf die Kopie einfach Doppelklick drauf und den Namen ändern in "Multicomputing Super High Quality". Im Tab "Distr" tragen wir nun im Feld "Name" einfach "localhost:5000" ein und drücken [Return]. Nun lassen wir das Projekt mit diesen Renderingsettings berechnen. Im Fenster sollte nun zu sehen sein, wie 2 Boxen gleichzeitig berechnet werden. Im Fenster von PuTTY können wir nun die Ausgaben vom Renderdämon beobachten:

20:48:25    r3rendd.c/ 793: ** Starting server for job 244121600 at port 7000

20:48:25    r3rendd.c/ 417: Using box count: 4 x 3
Connected to client 'reaktorkern' at port 7000
  Server for client 'reaktorkern' at port 7000 starts rendering box 2...
  Rendering of box 2 for client 'reaktorkern' at port 7000 finished
  Server for client 'reaktorkern' at port 7000 starts rendering box 4...
  Rendering of box 4 for client 'reaktorkern' at port 7000 finished
  Server for client 'reaktorkern' at port 7000 starts rendering box 6...
  Rendering of box 6 for client 'reaktorkern' at port 7000 finished
  Server for client 'reaktorkern' at port 7000 starts rendering box 8...
  Rendering of box 8 for client 'reaktorkern' at port 7000 finished
Closing connection to client 'reaktorkern' at port 7000

Je nach Hardware bringt dieser Renderdämon einen zusätzlichen Geschwindigkeitsschub, sodaß es sich lohnt, auch aufwändigere Projekte mit höheren Qualitätseinstellungen zu rendern.

Ein zusätzlicher Renderdämon

Ich habe hier ja noch eine 2. Linuxmaschine zur Verfügung. Man kann sie nun direkt in Realsoft3D eintragen. Dies hat aber gerade bei Szenen mit vielen Texturen den Nachteil, daß die Texturen 2 mal über die langsame DSL-Verbindung übertragen werden. Meine DSL-Verbindung hat nur einen Upstream von 128 KiloBit/Sekunde. Lahm im Vergleich zu der Verbindungsgeschwindigkeit, welche die beiden Linuxkisten untereinander haben: 100 MegaBit/Sekunde!

Laut Realsoft3D-Anleitung gibt es nun die Möglichkeit, mehrere Sever hintereinander zu schalten. Die Szene inklusive Texturen wird also 1 mal über die DSL-Verbindung an den ersten Renderdämon übermittelt, und dieser leitet dann die Daten weiter an den 2. Renderdämon. In der Anleitung zu Realsoft3D wird dieses "hierarchical rendering farms" genannt. Eine solche Umgebung wollen wir nun aufbauen.

Das nun folgende Vorgehen ist nun wirklich etwas "krude". Aber es geht erstmal darum, überhaupt zu Testen, ob es funktioniert. Wir gehen also davon aus, das der Renderdämon RendD auf beiden Maschinen korrekt installiert wurde.

Wir starten also unseren loakeln X-Server, verbinden uns wieder mit Server1, setzen die DISPLAY-Variable und starten den RendD mit folgnden Optionen:

./rendd -port 7000 -host localhost:7500

Dies unterscheidet sich jetzt nun etwas von dem, was in der Anleitung steht. Anscheinend gibt es dort einen Fehler in der Anleitung. Schauen wir gleich mal, was die Linux-Mailingliste dazu sagt.

Ok, läuft. Nun bauen wir eine Verbindung zu Server2 auf und bauen dabei gleichzeitig die entsprechenden Tunnel auf. Dazu legen wir den aktuellen RendD in den Hintergrund und lassen ihn dann weiterlaufen:

[Strg-Z]
bg

Mit folgendem Kommando bauen wir nun eine SSH-Verbindung zu Server2 auf und richten die entsprechenden Tunnel ein:

ssh -R 6002:localhost:6002 -L 7500:x83.de:8000 x83.de

Dort setze ich nun die DISPLAY-Variable entsprechend und starte RendD:

export DISPLAY=localhost:2
cd realsoft3d
./rendd -port 8000

Ok, anscheinend mag Server2 kein Remote-Portforwarding. Also eine direkte Verbindung zum X11-Server aufsetzen. Dazu einfach im Router Port 6002 freischalten und die DISPLAY-Variable entsprechend setzen und rendd erneut starten:

export DISPLAY=84.163.168.186:2
./rendd -port 8000

Nun läuft rendd. In Realsoft3D auf meiner Windowskiste tragen ich nur Server1 ein und rendere meine Testszene. Schön, ein weiterer Geschwindigkeitszuwachs! Allerdings sieht der Vorgang auf dem Bildschirm jetzt etwas anders aus. Eine Box wird zeilenweise aufgebaut, aber die Box, die von den anderen Rechnern berechnet wird, erscheint erst, wenn diese die Box komplett berechnet haben.

Es ist hier festzuhalten, daß aus der Sicht von Realsoft3D auf meinem Windowscomputer nur 1 externer Rechner vorhanden ist. Dieser externe Rechner unterteilt allerdings die ihm zugewiesene Box wiederum in einzelne Boxen. Von daher muß man bei einer solchen Konfiguration schon ein Augenmerk auf die Einstellungen der einzelnen Renderdämonen bezüglich der Boxen-Anzahl haben, um die maximal mögliche Leistung aus dem System herauszuholen.