Community-Tutorials (Source)

Im Netzwerk mit mehreren Rechnern compilen

Im Netzwerk compilen
(mehrere Rechner nutzen)

Author: DrSilence
Download: source_compile.rar (Vorgefertigte Batch-Compile-Skripte)

Da es hier schon einmal behandelt wurde aber zu keiner Lösung führte möchte ich hier in diesem Tutorial erklären wie man den, mitunter sehr rechenlastigen, Compile-Prozess auf mehrere Rechner verteilen kann.

Vorraussetzungen:

  • Erfahrung mit Windows,
  • Erfahrung mit dem SourceSDK,
  • Erfahrung mit der Windowskonsole,
  • ggf. Erfahrung mit der eig. Firewall/Router,
  • Pro Rechner (PC) der mitmachen möchte:
    [LIST]
  • 1x installiertes Steam mit Source SDK eingerichtet für das jeweilige Spiel (ja auch die unverschlüsselten Cache-Files) und das SDK muss gestartet sein!
  • Für den Master (Server) genug UpStream (Bandbreite in Senderichtung)
[/LIST]

Bandbreite, wofür ?
Nun ja das ganze ist recht einfach: Der Server verteilt alle Daten an die Worker (Clients) und das sind mitunter Datenpakete in die 100 MB oder mehr. Beispiel meiner Map über 300 MB. Dem Leser sollte nun auffallen, dass dieses Prinzip der Rechenverteilung nur im LAN mit 10/100 oder 1000 MB Verbindung Sinn macht. (Ist nur doof wenn man für den Upload und Download länger braucht als wenn man alleine rechnen würde …)
Ich sage es noch mal hier deutlich: Dieses Tutorial ist für Interessierte die mehrere Rechner (haben und) in einem Lokalen Netzwerk betreiben.

So genug gelabert legen wir los :D. Erm, Kein extra Programm!? nö :}
Was wir brauchen haben wir bereits.

Prinzip:
Wir erstellen einen Master (Server) der auf die Worker (Clients) wartet. Sind genug Clients verbunden starten wir den Compile-Prozess. Der Server verteilt die Daten, die Clients berechnen diese und zum Schluss setzt der Server die Fragmente zu einem Ganzen zusammen.
Laut Valve lohnt sich das nur für die Abschnitte VVIS und VRAD, weswegen VBSP diese Funktion nicht hat. (Eigene Meinung: sogar VVIS braucht das nicht da eine gut optimierte Map da auch nicht länger als max. 10min. brauchen sollte.)

Vorbereitung Master:
Wir können dies im Hammer-Editor direkt machen oder in eine Batchdatei auslagern. Ich bevorzuge die Batch-Lösung da Fehler auch gleich Farblich hervorgehoben werden.

Wir erstellen eine leere Textdatei, öffnen diese und tragen folgendes ein:

%sdk_toolpath%\vbsp.exe -game "%sdk_gamedir%" "%sdk_mapsrc%\%sdk_mapname%"
%sdk_toolpath%\vvis.exe -mpi -mpi_Graphics -mpi_TimingWait -game "%sdk_gamedir%" "%sdk_mapsrc%\%sdk_mapname%" 
%sdk_toolpath%\vrad.exe -mpi -mpi_Graphics -mpi_TimingWait -game "%sdk_gamedir%" "%sdk_mapsrc%\%sdk_mapname%"

Nun genauer zu den Einstellungen (müssen ersetzt werden!):
"%sdk_gamedir%" ist ein Platzhalter für den Dateipfad zu dem Spielverzeichnis.
"%sdk_mapsrc%\%sdk_mapname%" für den kompletten Pfad zu der Map-Quelldatei (die vom Hammer-Editor, aber ohne die Endung .vmf)
%sdk_toolpath% für den Dateipfad zu den Compieletools des SourceSDK's.
-mpi bewirkt das aktivieren der Multirechnerunterstützung
-mpi_Graphics das aktivieren der grafischen Ausgabe auf dem Master (Server)
-mpi_TimingWait bewirkt das warten auf einen Tastendruck damit die Clients genug Zeit haben sich zu verbinden.

So die nun befüllte Textdatei speichern und die Dateiendung von .txt auf .bat ändern.

So das war schon ziemlich viel und kompliziert. Aber wir müssen noch etwas ändern und zwar die Firewall ggf. dem Router. Schlagwort "Portfreigabe" "Portweiterleitung" und zwar den Port 23311 (TCP und UDP).

Vorbereitung Worker:
Wir erstellen wieder eine leere Textdatei und befüllen sie mit:

%sdk_toolpath%\vvis.exe -game "%sdk_gamedir%" -mpi_Worker <Master IP> -mpi_Port 23311 -low
%sdk_toolpath%\vrad.exe -game "%sdk_gamedir%" -mpi_Worker <Master IP> -mpi_Port 23311 -low

Nun genauer zu den Einstellungen (müssen ersetzt werden!):
"%sdk_gamedir%" ist ein Platzhalter für den Dateipfad zu dem Spielverzeichnis.
%sdk_toolpath% für den Dateipfad zu den Compieletools des SourceSDK's.
-mpi_Worker aktiviert den Compile Worker und sagt ihm wo/wer der Master ist, dazu
<Master IP> durch die IP-Adresse des Masters ersetzen.
-mpi_Port kann genutzt werden um den Port zu ändern.
-low verringert die Rechenlast bei leerlauf.

So die nun befüllte Textdatei wieder speichern und die Dateiendung von .txt auf .bat ändern.

Ablauf:
Als erstes starten wir den Master; dieser berechnet VBSP und dürfte dann nach ca. 2-10 fertig sein. Der Master startet dann den Compile-Prozess für VVIS und bleibt mit der Aufforderung zum Tastendrücken stehen.
Nun haben alle Worker die Zeit sich mit dem Master zu verbinden. Sind genug Worker verbunden, start man mit Tastendruck den Master und ein neues Fenster öffnet sich. In diesem Fenster kann man nun den Compile-Prozess in grafischer Form anschauen (Hinweis: Das Fenster erscheint nur auf dem Master!).
Ist der VVIS compile abgeschlossen, folgt der VRAD Compile-Prozess auf die selbe art und weise.

Hinweis:
Hat man den Luxus, dass die Worker immer präsent sein können. Empfiehlt es sich bei den Worker zusätzlich die Parameter "-mpiRetry" und "-mpiAutoRestart" hinzuzufügen. Dadurch brauch man die Worker nicht immer wieder neu starten, da sie sich immer wieder von alleine neu starten und auf den Master warten. ;)

Zum Anhang:
Der Anhang enthält einen Ordner mit mehren Batch Dateien wobei die Init.bat mit einem Texteditor (z.B. Notepad) geöffnet, und die Variablen bei SET angepasst werden müssen.
compile_master.bat - startet den Master
compile_worker.bat - startet den Worker
compile_single.bat - startet einen lokalen Compile-Prozess (Ich compile lieber auf diese Art, da schneller und durch Farben übersichtlicher ;))

So ich hoffe, dass ich nun endlich einen neuen Verwendungszweck für Eure alten und ungenutzten Rechner daheim gefunden habe.

Viel Spaß bei testen

dere :wink: