Schlagwort-Archiv: Oscar

Oscar 6.1: neue Version, neue Probleme

Vor einiger Zeit habe ich ja mal über das Cluster Framework Oscar geschrieben. Dieses funktionierte zwar sehr stabil, wenn es mal lief, jedoch bis dahin musste noch viel umgebogen und gewürgt werden.
Nun aber, in der kürzlich erschienen neusten Version 6.1 hat sich sehr viel davon geändert. Neue Funktionen habe ich bisher keine entdeckt, auch der Installationsprozess wurde nicht angepasst, aber nun funktioniert auch fast alles!
Denn als ich es kürzlich in der neusten Version neu installieren wollte, ist mir ein weiterer Fehler aufgefallen:

ERROR: Unable to copy “/usr/share/syslinux/pxelinux.0″ file to /tftpboot. at /usr/bin/setup_pxe line 221
ERROR: at /usr/lib/perl5/vendor_perl/5.8.8/OSCAR/GUI_MAC.pm line 847

Dieser tritt auf, weil ein Pfad falsch definiert wurde, sobald der Button “Setup Network Boot” gedrückt wird.
Die Lösung liegt im Script, hier muss der Pfad von /usr/lib geändert werden, da sonst die passenden Dateien nicht kopiert werden können:

if(($ARCH eq "i386") || ($ARCH eq "x86_64")) {
     # GV: We should use OS_Setting here
     switch ($os->{'distro'}) {
         case "centos" {
             $pxelinux_dir = "/usr/lib/syslinux";
             $pxelinux_bin = "pxelinux.0";
}

Als zweite Anpassung: Unter CentOS sind die iptables standardmässig aktiviert. In der alten Version hat eine Stelle des Scriptes diese wohl deaktiviert, in der neusten hat man dies aber scheinbar vergessen. Also wenn man nicht andauernd TFTP Errors und Timeouts will, dann:

/etc/init.d/iptables stop

Und danach läuft werden, wie man es schon kennt, die Nodes über das Netzwerk installiert und neu gestartet. Und spätistens hier zeigt sich auch noch der letzte Fehler: SELinux! Altbekannt, wenn man SELinux nicht über die Konsole deaktiviert, so bootet der Node in eine Kernel Panic:

Kernel panic – not syncing: Attempted to kill init!

Weiterlesen

Parallel Computing mit MPICH ohne SGE

Um zu sehen, was mein neuer Oscar Cluster so alles kann, habe ich mir vorgenommen die Performance mal genauer unter die Lupe zu nehmen.
Dabei wollte ich mich prinzipiell auf die Hardware konzentrieren, um aufzeigen zu können, welche Vorteile zum Beispiel Infiniband anstelle von Ethernet oder High Performance Storage oder NAS anstelle von lokalen Disks bieten können. Damit das auch gewährleistet wird, habe ich eine Möglichkeit gesucht einen Job auch ohne Batch Queueing System zu starten, damit die Kennzahlen der Analyse nicht dadurch verfälscht werden.

Dabei bin ich auf die Methode über ein Machinefile in Kombination mit MPICH gestossen.
Das ganze funktioniert wirklich erstaunlich einfach.

Verwendet habe ich wieder das folgende Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <mpi.h>
 
int main (argc, argv)
     int argc;
     char *argv[];
{
  int rank, size, 
 
  MPI_Init (&argc, &argv);	/* starts MPI */
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);	/* get current process id */
  MPI_Comm_size (MPI_COMM_WORLD, &size);	/* get number of processes */
  printf( "Hello world from process %d of %d\n", rank, size );
  MPI_Finalize();
  return 0;
}

Dieses muss zuerst natürlich noch kompiliert werden, alles wie man es schon kennt:

1
mpicc -o hello_world_c hello_world.c

Und danach kann der Job direkt mit mpirun und ohne SGE gestartet werden:

1
mpirun -np 16 -machinefile machine.file hello_world_c

In die Datei machine.file müssen lediglich die Namen der Nodes aufgeführt werden:

1
2
3
4
lcc102
lcc103
lcc104
lcc105

ACHTUNG: Wichtig bei dieser Methode ist es zu wissen; es ist nicht mehr alles so kontrolliert wie beim Batch Queueing System.
So muss man beachten, dass man mit der Option -np nur so viele Cores angibt, wie auch tatsächlich vorhanden sind. Gibt man zu viele an, so kommen ein paar der Jobs in die Queue der CPU und der ganze Cluster würde ausgehebelt werden und seine tatsächliche Geschwindigkeit inklusive aller Vorteile verlieren!
Wie genau dann schief geht, habe ich bereits in einem Beitrag mit dem Titel Load unter Linux beschrieben.

Diese Methode ist also nur für den Systemadministrator selbst und nicht für die “selbstsüchtigen Benutzer” ;)

Linux High Performance Cluster mit Oscar

Mir wurde die interessante, aber relativ anspruchsvolle Aufgabe gestellt, einen Linux High Performance Cluter (Linux HPC) aufzubauen. Weder eine genaue Software, noch ein Betriebssystem war dabei vorgegeben.

Zur Verfügung stehen mir dazu 7 Sun Fire x4000 mit je 7GB RAM und je 2 DualCore-CPUs.

Nun aber habe ich selbst noch nie einen eigenen Cluster erstellt und im Internet waren auf den ersten Blick keine wirklichen Anleitungen verfügbar.
Also habe ich mich mal an den ersten Hinweis von RedHat geklammert. Diese liefern eine schöne Dokumentation mit Schritt-für-Schritt Anleitung. Jedoch scheiterte schlussendlich alles an der Tatsache, dass die Maschine offiziell im RedHat Netzwerk registriert werden muss.
Also ging ich weiter zu Beowulf. Während ich mit der Mailling-Liste des Projektes schrieb, bin ich auf das HPC Framework Oscar gestossen, welches sehr einfach und unkompliziert aussieht, und zudem sehr einfach und übersichtlich dokumentiert wurde.

Da Oscar für Distribution wie Debian, Ubuntu oder Fedora nur bei sehr alten Version volle Kompatibilität versprechen kann, habe ich auf CentOS, die freie Kopie von RedHat zurückgegriffen.

Wer aber möchte, der kann auch auf die folgenden Distributionen zurückgreifen:

  • Ubuntu 8.04
  • Ubuntu 9.10
  • Fedora Core 9
  • Debian 4
  • Debian 5
  • CentOS 5
  • Suse 10
  • Redhat 5

Die gesamte Installation hat Struktur und ist sehr einfach gehalten.
Zu Beginn muss man die Paketquellen von Oscar für yum zufügen. Dazu legt man eine Datei CentOS-OSCAR.repo im Ordner /etc/yum.repo.d/ an mit folgendem Inhalt:

1
2
3
4
5
6
7
8
9
10
# CentOS-OSCAR.repo
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[oscar]
name=CentOS-$releasever - OSCAR
baseurl=http://bison.csm.ornl.gov/repos/rhel-5-i386
gpgcheck=0

Da meine Architektur auf 32-Bit basiert, habe ich die Endung x86_64 mit i386 unter dem Punkt baseurl ersetzt.

Danach muss ein Update ausgeführt werden, um die aktuellsten Pakete zu erhalten! Anschliessend kann Oscar installiert werden:

1
2
yum upgrade
yum install oscar

Nachdem die benötigten Pakete installiert sind, muss man Oscar mitteilen, welche Distribution man verwendet:

1
oscar-config --setup-distro centos-5-i386

Nun, bevor man weitergeht, muss ein Workaround ausgeführt werden, um ein Fehler im Script zu beheben.
Ohne diesen erhält man immer den folgenden Fehler:

1
ERROR: Impossible to detect the format of the online repository

Die Ursache liegt darin, dass RedHat / CentOS ihr Repository umgestellt hat.
Dass einzelne Daten nicht doppelt im Mirror vorkommen, wurde bisher der Ordner einer alten Version, in diesem Fall 5.4, immer zum Ordner der neusten Version, hier 5.5, verlinkt. Da dies aber nun scheinbar nicht mehr der Fall ist, und Oscar immer noch im Ordner 5.4 sucht, welcher dummerweise leer ist, schlägt die gesamte Installation fehl!
Also muss in der Datei /etc/oscar/ die Datei supported_distros.txt angepasst werden. Es müssen alle 5.4 in der Datei durch 5.5 ersetzt werden.

Weiterlesen