[Question] Linux et les clusters

Bonjour.

J’ai lu pas mal de choses concernant les clusters sous Linux, et une question à laquelle je ne trouve pas de réponse : est-ce qu’on peut faire tourner à peu près n’importe quoi sur un serveur LVS (genre d’un simple programme en bash à la compilation d’un noyau), ou bien il faut forcément utiliser des API spéciales qui ne permettent qu’une action en particulier (comme MPI et PVM; par exemple j’ai vu que MPI peut compiler un code source en C sur un cluster, mais compiler un kernel entier avec j’en doute).

Merci d’avance… :slightly_smiling:

J’ai pas tout compris. Je sais pas ce que c’est LVS (Linux VServer ?).

Pour les clusters, tu as 2 types de manière de les utiliser.

L’un consiste à envoyer des tâches sur chaque nœud et à récupérer le résultat. Les nœuds sont indépendants entre eux. C’est ce qui est utilisé dans le grid5000 (la fierté de la recherche informatique française). Tout le boulot consiste a écrire un ordonanceur qui prend les tâches sous une forme donnée, les envoies sur une machine ou une autre et récupère le résultat.

L’autre consiste en un programme « multiagent » qui va s’exécuter en parallèle sur plusieurs nœud.

La première catégorie tu peux exécuter ce que tu veux (les prérequis sont donnés par l’ordonnanceur), l’autre il te faut une techno pour gérer la synchronisation entre les agents (qui sont chacun d’eux des programmes apparentière) comme MPI (mais tu en a d’autres zeroMQ ou autre). Tu peut en faire en shell, mais ce n’est pas transparent.

Pour ce qui est de la compilation, tu as distcc.

Oui, je me suis certainement mal exprimé, je le conçois. :slightly_smiling:
LVS pour Linux Virtual Server.

En fait, pour faire simple, on s’imagine que j’ai un serveur. Ce serveur serait relié à un cluster. Ma question est : le serveur peut-il exécuter une tâche quelconque sur le cluster ?
Par exemple, je décide de compiler un programme, sur le serveur je lance une commande telle que ‘make’, et la tâche est répartie sur le cluster.

En gros, je voulais savoir si avec plusieurs machines, on peut faire comme si c’était une “grosse machine”, dans le but de gagner en puissance de calcul. :slightly_smiling:

Tu découvres le parallélisme, cela est faisable si on est capable de découper la tach en autant de taches élémentaires chacune sur une machine. Le problème est identique avec les multicoeurs. Dans un programme utilisant les «threads», il exploitera bien les multicoeurs pour autant qu’il y ait autant de «threads» (taches ou filaments) que de coeurs, par exemple ffmpeg le fait bien. Mais si tu prends mencoder, par défaut, il n’y a qu’une seule tache donc un seul coeur utilisé. Tu peux t’en sortir en encodant autant de videos qu’il y a de coeur en parallèle, tu verras que le temps d’encodage est à peine augmenté.

C’est loin d’être évident à faire et des algorithmes inefficaces peuvent se révéler excellent dans cette optique. À noter qu’avec un nombre infini de machines, les problèmes NP deviennent P et les codes s’écroulent, mais l’infini ça fait vraiment beaucoup…

Ce fil serait mieux à sa place dans SD, il me semble.
Je l’y déplace.

[quote=“fran.b”]Tu découvres le parallélisme, cela est faisable si on est capable de découper la tach en autant de taches élémentaires chacune sur une machine. Le problème est identique avec les multicoeurs. Dans un programme utilisant les «threads», il exploitera bien les multicoeurs pour autant qu’il y ait autant de «threads» (taches ou filaments) que de coeurs, par exemple ffmpeg le fait bien. Mais si tu prends mencoder, par défaut, il n’y a qu’une seule tache donc un seul coeur utilisé. Tu peux t’en sortir en encodant autant de videos qu’il y a de coeur en parallèle, tu verras que le temps d’encodage est à peine augmenté.

C’est loin d’être évident à faire et des algorithmes inefficaces peuvent se révéler excellent dans cette optique. À noter qu’avec un nombre infini de machines, les problèmes NP deviennent P et les codes s’écroulent, mais l’infini ça fait vraiment beaucoup…[/quote]

Je connais le parallélisme, heureusement d’ailleurs, je n’ai pas voulu prendre un Core i5 de chez Intel pour rien. :slightly_smiling:
Je connais quelques commandes qui utilisent plusieurs threads, comme le ‘make -j N’, ‘pigz’ et cetera.

À vrai dire, je demandais plutôt si il y avait moyen de brancher plusieurs machines, pour au final n’en voir plus “qu’une”. En gros, admettons que j’ai 4 machines, chacune avec un CPU dualcore et 2Go de RAM, le résultat serait une machine avec 4x2=8 cœurs et 4x2=8Go de RAM. Et moi, je voudrais par exemple faire un ‘make -j 8’ sur cette “machine”. Je me demandais si c’était possible, mais je cherche le plus de transparence possible. Je m’exprime sans doute mal. :unamused:

[quote=“ricardo”]Ce fil serait mieux à sa place dans SD, il me semble.
Je l’y déplace.[/quote]
Je n’avais pas mis dans la partie SD car j’ai vu plus ça comme une question générale sur Linux que sur une demande d’aide spécifique à Debian. :smiley:

[quote=“Xorg”][quote=“fran.b”]Tu découvres le parallélisme, cela est faisable si on est capable de découper la tach en autant de taches élémentaires chacune sur une machine. Le problème est identique avec les multicoeurs. Dans un programme utilisant les «threads», il exploitera bien les multicoeurs pour autant qu’il y ait autant de «threads» (taches ou filaments) que de coeurs, par exemple ffmpeg le fait bien. Mais si tu prends mencoder, par défaut, il n’y a qu’une seule tache donc un seul coeur utilisé. Tu peux t’en sortir en encodant autant de videos qu’il y a de coeur en parallèle, tu verras que le temps d’encodage est à peine augmenté.

C’est loin d’être évident à faire et des algorithmes inefficaces peuvent se révéler excellent dans cette optique. À noter qu’avec un nombre infini de machines, les problèmes NP deviennent P et les codes s’écroulent, mais l’infini ça fait vraiment beaucoup…[/quote]

Je connais le parallélisme, heureusement d’ailleurs, je n’ai pas voulu prendre un Core i5 de chez Intel pour rien. :slightly_smiling:
Je connais quelques commandes qui utilisent plusieurs threads, comme le ‘make -j N’, ‘pigz’ et cetera.

À vrai dire, je demandais plutôt si il y avait moyen de brancher plusieurs machines, pour au final n’en voir plus “qu’une”. En gros, admettons que j’ai 4 machines, chacune avec un CPU dualcore et 2Go de RAM, le résultat serait une machine avec 4x2=8 cœurs et 4x2=8Go de RAM. Et moi, je voudrais par exemple faire un ‘make -j 8’ sur cette “machine”. Je me demandais si c’était possible, mais je cherche le plus de transparence possible. Je m’exprime sans doute mal. :unamused:

[quote=“ricardo”]Ce fil serait mieux à sa place dans SD, il me semble.
Je l’y déplace.[/quote]
Je n’avais pas mis dans la partie SD car j’ai vu plus ça comme une question générale sur Linux que sur une demande d’aide spécifique à Debian. :smiley:[/quote]

Une façon de faire serait d’utiliser un ‘orchestrateur’ tel que openstack ou cloudstack et de former un serveur virtuel sous un ‘hyperviseur’ avec la quasi totalité des ressources, dans ton cas il y a aucun intérêt.

Ah, je crois avoir trouvé… Il faut que je cherche du côté des SSI (Single system image), tel MOSIX.
Mais j’ai du mal à comprendre la différence avec LVS (Linux Virtual Server).

Je veux bien que tu nous en dises plus si tu trouves des choses intéressantes car je me suis également posé cette question pas mal de fois.