Myrinet

From Grid5000
Jump to: navigation, search
(thumbnail)
Switch Myrinet
 (48 ports myrinet, 8 ports ethernet)

Contents

Présentation

Les réseaux Myrinet [1] disposent de deux bibliothèques logicielles officielles MX (Myrinet eXpress) et GM (en fin de vie). Il est à noter ces bibliothèques ne peuvent pas fonctionner simultanément sur une même machine et ne peuvent pas communiquer entre elles.

Seul l'utilisation de la nouvelle bibliothèque MX sera décrite ici, pour pouvoir l'utiliser il est nécessaire de disposer de cartes Myrinet munies de Lanai X ou supérieur, c'est à dire à partir de la 4ème révision PCI-XD.

Les sources de ces bibliothèques peuvent être obtenues sur le site de Myricom à l'aide d'un login et d'un mot de passe que les clients peuvent obtenir en envoyant un mail à help@myri.com, ces bibliothèques sont composées de:

  • une bibliothèque utilisateur
  • un driver noyau (sa compilation nécessitant les sources du noyau installé sur la machine)
  • un firmware (généralement fourni précompilé)

Installation

Après avoir récupéré et extrait les sources de MX, aller dans le répertoire produit et taper:

./configure --with-linux=/chemin/vers/les/sources/du/noyau
            --prefix=/chemin/ou/installer/les/binaires
            --enable-kernel-lib

Note: --enable-kernel-lib, permet d'activer l'interface MX dans le noyau Linux. Si --prefix n'est pas spécifié l'installation se fait par défaut dans /opt/mx/.

make
make install

Attention: Le driver doit être compilé avec le même compilateur que le noyau, pour cela il peut être nécessaire de passer celui si en argument à make: KCC=gcc-3.4

$prefix/sbin/mx_local_install

L'exécution du script mx_local_install va réaliser la création des devices nécessaire dans /dev, aisi que de la mise en place du script de démarrage /etc/init.d/mx. Ce script de démarrage s'occupe du chargement des deux modules noyau mx_mcp (mise en place des firmwares) et mx_driver, ainsi que du démarrage du mapper qui va dresser la topologie du réseau; si GM était actif il est également arréter avant le démarrage de MX afin d'éviter tous conflits.

Installation avec serveur fms

La version 1.1.0 du driver MX inclus un nouveau "mapper", nommé fms

Cette nouvelle implémentation nécessite l'installation d'un serveur fms (sur une machine non nécessairement doté d'une carte myrinet, mais joignable par tcp, port 3333).

Pour les systèmes redhat, un fichier spec et script d'init se trouvent dans le svn grid5000:

http://gforge.inria.fr/plugins/scmsvn/viewcvs.php/admin/trunk/myrinet/?root=grid5000

Une fois le serveur installé, il faut l'initialiser avec l'IP du switch myrinet: fm_switch -a <switch_IP>

Les clients doivents également être configurés; avec le spec cité plus haut, il suffit de créer un fichier /etc/sysconfig/fms, sur tous les noeuds, avec le nom du serveur:

Par exemple à Sophia:

FMS_SERVER=services.sophia.grid5000.fr
Warning.png Warning

Le serveur FMS ne semble pas très stable, en tout cas dans la configuration Grid5000 où les noeuds sont fréquement rebootés. Le serveur FMS a donc été désactivé à Sophia .

Tests

Le répertoire /opt/mx/bin/ (et son sous-répertoire tests) regroupent un ensemble d'utilitaires de configuration et de tests de MX. Si vous prévoyez d'utiliser Myrinet, il peut être utile d'ajouter ce chemin à votre PATH.

mx_info

Cette commande donne des informations sur la machine et les autres noeuds detectés:

node-45:~> mx_info 
MX Version: 1.0.0
MX Build: bgoglin@frontale.lyon.grid5000.fr:/home/lyon/bgoglin/admin/mx-1.0.0 Wed Jun 15 08:19:51 CEST 2005
1 Myrinet board installed.
The MX driver is configured support up to 4 instances and 1024 nodes.
===================================================================
Instance #0:  333 MHz LANai, 100 MHz PCI bus
        Status:         Running, P0: Link up
        MAC Address:    00:60:dd:48:60:46
        Serial number:  245388
        Mapper:         00:60:dd:48:60:4d, version = 0x000c9cd1, !configured

                                                 ROUTE COUNT
INDEX   MAC ADDRESS     HOST NAME                 P0
-----   -----------     ---------                 ---
   0) 00:60:dd:48:43:68  node-45.lyon.grid5000.fr:1,1  
   1) 00:60:dd:48:60:46  node-1.lyon.grid5000.fr:07,3  
   2) 00:60:dd:48:60:45  node-10.lyon.grid5000.fr:4,3  
   3) 00:60:dd:48:60:44  node-5.lyon.grid5000.fr:05,3  

mx_pingpong

Ce programme de test permet de faire un ping-pong entre des machines, afin d'en vérifier le bon fonctionnement, il est à exécuter sur au moins deux machines:

  • sur le serveur
node-45:~> mx_pingpong -s
Starting pingpong receiver
  • sur le client
node-52:~> mx_pingpong -M 4 -E 1048577 -d node-45.lyon.grid5000.fr:0
Starting pingpong send to host node-45.lyon.grid5000.fr:0
Running 1000 iterations.
   Length   Latency(us)    Bandwidth(MB/s)
       0       2.814          0.000
       1       3.052          0.328
       4       3.038          1.317
      16       3.109          5.146
      64       3.691         17.342
     256       5.902         43.379
    1024      11.408         89.762
    4096      24.697        165.850
   16384      83.352        196.564
   65536     302.079        216.950
  262144    1131.330        231.713
 1048576    4433.694        236.502

Note: Les noms des machines utilisés dans MX sont les hostname suivi de :0 pour la première interface Myrinet, :1 pour la seconde et ainsi de suite.

mx_endpoint_info

Renseigne sur les endpoints ouverts, c'est-à-dire les applications qui utilisent MX.

node-45:~> mx_endpoint_info 
1 Myrinet board installed.
The MX driver is configured support up to 4 endpoints on 4 boards.
===================================================================
Board #0:
Endpoint         PID             Command                 Info
<raw>           2917            mx_mapper
There are currently 0 regular endpoints open

mx_dmabench

Permet de tester les transferts DMA entre la carte Myrinet et l'hôte:

node-45:~> mx_dmabench 
DMA timings for mx0 (00:60:dd:48:43:68) a 333 MHz LANai on a 100 MHz PCI bus:
DMA read  (send) Bandwidth =  678.43 MB/sec (4096 bytes per DMA)
DMA write (recv) Bandwidth =  738.55 MB/sec (4096 bytes per DMA)

Emulation Ethernet

MX fournit une émulation Ethernet en créant une interface virtuelle myri0 qui peut être alors configurée comme n'importe quelle interface Ethernet.

node-1:~# ifconfig myri0
myri0     Link encap:Ethernet  HWaddr 00:60:DD:48:60:46  
          BROADCAST MULTICAST  MTU:9000  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:29

Applications

MPICH

Après avoir installé MX, récupéré et extrait les sources de MPICH-MX, aller dans le répertoire produit et éditer le fichier mpich.make.linux. Il faut y préciser le chemin MX_HOME où MX a été installé (pas le répertoire de compilation) et le chemin PREFIX où MPICH-MX sera installé.

mpich.make.linux

Les librairies et binaires de MPICH-MX sont installés dans /opt/mpich-mx/. Pour compiler un binaire pour MPICH-MX, on peut utiliser le mpicc qui se chargera de linké avec les bibliothèques MX et MPICH-MX :

/opt/mpich-mx/bin/mpicc mpi_ping.c -o mpi_ping

L'utilisation impose de préciser où sont les bibliothèques MX; soit l'administrateur a déjà mis leur chemin dans /etc/ld.so.conf, soit il faut le préciser dynamiquement en ajoutant /opt/mx/lib à la variable d'environement LD_LIBRARY_PATH.

L'utilisation se fait comme pour n'importe quelle MPICH. On peut par exemple placer les machines cibles dans un fichier machines.

node-45:~> cat machines 
node-45.lyon.grid5000.fr
node-52.lyon.grid5000.fr

Le binaire mpirun permet alors de lancer le programme sur ces machines :

node-45:~> /opt/mpich-mx/bin/mpirun -machinefile machines.ch_mx -np 2 mpi_ping
(node-45.lyon.grid5000.fr): My rank is 0
(node-52.lyon.grid5000.fr): My rank is 1
The configuration size is = 2
ping with = 1
The configuration size is = 2
pong with = 0
src|dst|size        |latency     |10^6 B/s|MB/s    |
  0   1            4        3.234    1.237    1.180
  0   1            8        3.291    2.431    2.318
  0   1           16        3.224    4.962    4.732
  0   1           32        3.360    9.524    9.083
  0   1           64        3.848   16.632   15.861
  0   1          128        4.384   29.198   27.846
  0   1          256        6.043   42.362   40.399
  0   1          512        7.936   64.518   61.529
  0   1         1024       11.507   88.989   84.867
  0   1         2048       15.903  128.781  122.815
  0   1         4096       24.824  165.001  157.357
  0   1         8192       44.207  185.309  176.724
  0   1        16384       83.470  196.286  187.193
  0   1        32768      150.174  218.201  208.092
  0   1        65536      299.822  218.583  208.457
  0   1       131072      574.006  228.346  217.768
  0   1       262144     1118.927  234.282  223.428
  0   1       524288     2214.213  236.783  225.814
  0   1      1048576     4400.993  238.259  227.221
  0   1      2097152     8790.422  238.572  227.520
test series completed
Exiting
Exiting

Autres

Pour compiler une application utilisant MX, il suffit d'inclure myriexpress.h qui se trouve dans /opt/mx/include. L'édition de lien se fait avec la librairie libmyriexpress.so (-lmyriexpress) qui se trouve dans /opt/mx/lib.

Pour utiliser MX dans le noyau, il faut avoir passé --enable-kernel-lib lors de sa configuration. Lors de la compilation, il faut définir MX_KERNEL. L'interface de programmation est alors entièrement la même lorsqu'on manipule des zones mémoire du noyau. Elle fournit quelques primitives supplémentaires pour manipuler des zones mémoire de l'espace utilisateur ou des adresses physiques. Voir le détail dans /opt/mx/include/mx_kernel_api.h.

Personal tools
Namespaces

Variants
Actions
Public Portal
Users Portal
Admin portal
Wiki special pages
Toolbox