[[mx]]
 

Cheats MX

Contrôler les communications en mémoire partagée

MX sait faire communiquer deux endpoints de la même carte par mémoire partagée. Pour réduire le cout du polling, on peut désactiver le communication en mémoire partagée.

$ export MX_DISABLE_SHMEM=1

Attention, cela signifie qu'il doit y avoir un chemin entre endpoints locaux par le réseau, ce qui en gros signifie la présence d'un switch. Donc si MPI (ou autre) ne fait pas les communications locales au dessus de MX, on ne peut pas avoir plusieurs processus par noeud sans switch et avec MX_DISABLE_SHMEM=1.

Contrôler le regcache

Les performances de MX varient d'environ 10% si le regcache est par défaut. Heureusement il l'est par défaut, avec interception des symboles malloc and co. MX le désactivera dès qu'il trouvera un indice de possible conflit pour l'interception. C'est notamment le cas de OpenMPI:

$ /opt/openmpi-1.2.6/bin/mpiexec -np 2 --mca pml cm -host bob /home/bgoglin/mpi/NetPIPE-3.7.1/NPmpi.ompi
warning:regcache incompatible with malloc
Now starting the main loop
...

Cependant, le warning est bénin. Il n'y a en fait aucun risque. Donc on peut dire de MX d'activer le regcache sans risque:

$ MX_RCACHE=2 /opt/openmpi-1.2.6/bin/mpiexec -np 2 --mca pml cm -host bob /home/bgoglin/mpi/NetPIPE-3.7.1/NPmpi.ompi
Now starting the main loop
...

Vérifier l'état du driver

Vérifier l'état du driver dans la sortie de mx_info

$ mx_info

Vérifier dans les logs noyau

$ dmesg

Redémarrer

Pour redémarrer le driver:

$ /etc/init.d/mx restart

Redémarrer avec une seule carte

Quand on fait du OpenMPI (ou autre) sur une machine à plusieurs cartes, ca ne marche pas s'il n'y a pas de switch. A moins d'arriver à forcer MPI à utiliser une seule carte, le plus simple est de désactiver N-1 cartes dans MX:

$ /etc/init.d/mx restart mx_max_instance=1

Ou bien

$ echo -n 0000:0e:00.0 > /sys/bus/pci/drivers/mx_driver/unbind

Passer en mode MX-over-Ethernet

Pour redémarrer MX en mode MXoE (routage Ethernet dans paquets MX normaux), on peut préciser un bitmask dont le bit N indique si la carte N doit être en mode MXoE ou non.

$ /etc/init.d/mx restart mx_ethernet_bitmap=0xff

Ca sert notamment pour faire MX d'un coté et du Open-MX/myri10ge de l'autre. Ca sert aussi s'il y a un switch Ethernet (comme sur Borderline).

Passer en mode Ethernet natif

Pour mettre la carte en mode Ethernet natif, on décharge MX puis on charge le driver myri10ge.

$ /etc/init.d/mx stop
$ modprobe myri10ge
$ ifconfig eth2 ...
$ ifconfig eth3 ...

Forcer le write-combining

Si PAT foire, les MTRR peuvent aider. Dans sbin/mx_start_stop, on peut rajouter:

à la fin de “unload_mx”:

lspci -d 14c1: -v | grep ' prefetchable)' | awk '{print $3}' \
 | while read base ; do
     egrep 'base=0x0*'$base' .* size= *16MB' /proc/mtrr | cut -d: -f1 | cut -c4- \
      | while read count ; do 
          echo "disable=$count" > /proc/mtrr
        done
   done

à la fin de “load_mx”:

lspci -d 14c1: -v | grep ' prefetchable)' | awk '{print $3}' \
 | while read base ; do
     echo "base=0x$base size=0x1000000 type=write-combining" > /proc/mtrr
   done
mx.txt · Last modified: 2010/01/20 11:13 by goglin
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki