Ci-dessous, les différences entre deux révisions de la page.
developpement:activites:integration:xeonphi4wheezy [2014/04/24 08:24] equemene [Compilation du module noyau] |
developpement:activites:integration:xeonphi4wheezy [2015/01/07 10:04] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Installation d'un Xeon Phi sous Debian Wheezy ====== | ||
- | |||
- | ===== Introduction ===== | ||
- | |||
- | La société Intel a mis à disposition fin 2013 des Intel Xeon Phi de manière à évaluer leurs performances en OpenCL. Les | ||
- | |||
- | ===== Installation ===== | ||
- | |||
- | ==== Détection du périphérique ==== | ||
- | |||
- | |||
- | Il est supposé que le système hôte est une Debian Wheezy standard, sur une architecture AMD64. Le socle présenté ici était un Intel Grizzly disposant 7120. De manière à ne pas toucher au matériel embarqué et polluer le disque dur de la machine, l'équipement démarre par PXE et monte un disque par iSCSI. | ||
- | |||
- | La Debian Wheezy disposait d'un noyau 3.2 version 54 (maintenant 57). Un ''lspsi'' offrait pour ce matériel la sortie suivante : | ||
- | <code>08:00.0 Co-processor: Intel Corporation Device 225c (rev 11)</code> | ||
- | |||
- | Le composant MIC n'est donc pas intégré à la liste de périphériques PCI reconnus. La commande @update-pciids@ permet de mettre cette base à jour. Un nouveau lancement de ''lspci | grep -i phi'' offre la sortie suivante : | ||
- | <code>08:00.0 Co-processor: Intel Corporation Xeon Phi coprocessor SE10/7120 series (rev 11)</code> | ||
- | |||
- | ==== Création des paquets Intel ==== | ||
- | |||
- | Les composants fournis par Intel sont présents sur le site Intel MPSS pour Manycore Platform Software Stack | ||
- | |||
- | Il n'existe que les paquets pour quelques distributions RedHat ou dérivées : récupération de la dernière version RedHat | ||
- | <code>wget http://registrationcenter.intel.com/irc_nas/3778/mpss-3.1.2-rhel-6.5.tar</code> | ||
- | |||
- | La documentation [[http://registrationcenter.intel.com/irc_nas/3778/MPSS_Users_Guide.pdf|MPSS User Guide]] | ||
- | est indispensable pour commencer. | ||
- | |||
- | ==== Préparation du système ==== | ||
- | |||
- | * Installation de quoi transformer les paquets RPM en DEB<code>apt-get install alien</code> | ||
- | * Installation de qui construire des paquets Debian :<code>apt-get install pbuilder</code> | ||
- | * Installation de quoi compiler un module noyau : <code>apt-get install kernel-package</code> | ||
- | |||
- | ==== Transformation des paquets RPM en DEB ==== | ||
- | |||
- | <code> | ||
- | tar xvf mpss-3.1.2-rhel-6.5.tar | ||
- | cd mpss-3.1.2 | ||
- | ls *.rpm | xargs -I '{}' alien --scripts '{}' | ||
- | </code> | ||
- | |||
- | La liste des paquets crés est la suivante :<code> | ||
- | glibc2.12.2pkg-libmicaccesssdk0_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libmicaccesssdk-dev_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libmicaccesssdk-doc_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libmicmgmt0_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libmicmgmt-dev_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libmicmgmt-doc_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libodmdebug0_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libodmdebug-dev_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libsettings0_3.1.2-2_amd64.deb | ||
- | glibc2.12.2pkg-libsettings-dev_3.1.2-2_amd64.deb | ||
- | intel-composerxe-compat-k1om_3.1.2-2_amd64.deb | ||
- | libscif0_3.1.2-2_amd64.deb | ||
- | libscif-dev_3.1.2-2_amd64.deb | ||
- | libscif-doc_3.1.2-2_amd64.deb | ||
- | mpss-boot-files_3.1.2-2_amd64.deb | ||
- | mpss-coi_3.1.2-2_amd64.deb | ||
- | mpss-coi-dev_3.1.2-2_amd64.deb | ||
- | mpss-coi-doc_3.1.2-2_amd64.deb | ||
- | mpss-daemon_3.1.2-2_amd64.deb | ||
- | mpss-daemon-dev_3.1.2-2_amd64.deb | ||
- | mpss-eclipse-cdt-mpm_3.1.2-2_amd64.deb | ||
- | mpss-flash_3.1.2-2_amd64.deb | ||
- | mpss-license_3.1.2-2_amd64.deb | ||
- | mpss-metadata_3.1.2-2_amd64.deb | ||
- | mpss-metadata-dev_3.1.2-2_amd64.deb | ||
- | mpss-miccheck_3.1.2-1_amd64.deb | ||
- | mpss-miccheck-bin_3.1.2-1_amd64.deb | ||
- | mpss-micmgmt_3.1.2-2_amd64.deb | ||
- | mpss-micmgmt-doc_3.1.2-2_amd64.deb | ||
- | mpss-micmgmt-python_3.1.2-2_amd64.deb | ||
- | mpss-modules-2.6.32-431.el6.x86-64_3.1.2-2_amd64.deb | ||
- | mpss-modules-dev-2.6.32-431.el6.x86-64_3.1.2-2_amd64.deb | ||
- | mpss-modules-headers_3.1.2-2_amd64.deb | ||
- | mpss-modules-headers-dev_3.1.2-2_amd64.deb | ||
- | mpss-mpm_3.1.2-2_amd64.deb | ||
- | mpss-mpm-doc_3.1.2-2_amd64.deb | ||
- | mpss-myo_3.1.2-2_amd64.deb | ||
- | mpss-myo-dev_3.1.2-2_amd64.deb | ||
- | mpss-myo-doc_3.1.2-2_amd64.deb | ||
- | mpss-rasmm-kernel_3.1.2-2_amd64.deb | ||
- | mpss-sciftutorials_3.1.2-2_amd64.deb | ||
- | mpss-sciftutorials-doc_3.1.2-2_amd64.deb | ||
- | mpss-sdk-k1om_3.1.2-2_amd64.deb | ||
- | mpss-sysmgmt-micras_3.1.2-2_amd64.deb | ||
- | mpss-sysmgmt-micsmc-gui_3.1.2-2_amd64.deb | ||
- | mpss-sysmgmt-python_3.1.2-2_amd64.deb | ||
- | </code> | ||
- | |||
- | ==== Compilation du module noyau ==== | ||
- | |||
- | Il n'est pas possible de directement créer le module MIC sans modifier le code source. En effet, les fichiers suivants doivent être modifiés pour compiler sur un noyau 3.2 Debian.<code>host/linvnet.c | ||
- | host/pm_ioctl.c | ||
- | micscif/micscif_debug.c | ||
- | micscif/micscif_rb.c | ||
- | vnet/micveth_dma.c </code> | ||
- | |||
- | Voici les opérations nécessaires poir compiler le module associé au noyau : | ||
- | <code> | ||
- | mkdir mpss-modules | ||
- | cd mpss-modules | ||
- | rpm2cpio ../src/mpss-modules-3.1.2-1.el6.src.rpm | cpio -idmv | ||
- | tar jxf mpss-modules-3.1.2.tar.bz2 | ||
- | wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/XeonPhi/PatchDebianWheezyMPSS312.patch | ||
- | patch -p 1 -i ./PatchDebianWheezyMPSS312.patch | ||
- | export INSTALL_MOD_PATH=/lib/modules/$(uname -r)/extra | ||
- | export MIC_CARD_ARCH=k1om | ||
- | make | ||
- | make install | ||
- | depmod -a | ||
- | </code> | ||
- | |||
- | ==== Chargement du module MIC ==== | ||
- | |||
- | Chargement du module par la commande @modprobe mic@ | ||
- | |||
- | Dans le ''dmesg'' on obtient : | ||
- | <code> | ||
- | [ 5486.230236] vnet: mode: dma, buffers: 62 | ||
- | [ 5486.230446] mic 0000:08:00.0: setting latency timer to 64 | ||
- | [ 5486.230662] mic 0000:08:00.0: irq 145 for MSI/MSI-X | ||
- | [ 5486.230701] mic0: Transition from state ready to resetting | ||
- | [ 5496.148217] sched: RT throttling activated | ||
- | [ 5496.150412] mic_probe 8:0:0 as board #0 | ||
- | [ 5496.150545] mic: number of devices detected 1 | ||
- | [ 5497.148253] mic0: Resetting (Post Code 12) | ||
- | [ 5497.148272] mic0: Transition from state resetting to ready | ||
- | [ 5497.148320] My Phys addrs: 0x87cba60000 and scif_addr 0x8818b192c0 | ||
- | </code> | ||
- | |||
- | En tapant ''ip link show'' on obtient : | ||
- | <code> | ||
- | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT | ||
- | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
- | 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 | ||
- | link/ether 00:1e:67:7f:e4:eb brd ff:ff:ff:ff:ff:ff | ||
- | 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 | ||
- | link/ether 00:1e:67:7f:e4:ec brd ff:ff:ff:ff:ff:ff | ||
- | 4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 | ||
- | link/ether 00:1e:67:7f:e4:ed brd ff:ff:ff:ff:ff:ff | ||
- | 5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 | ||
- | link/ether 00:1e:67:7f:e4:ee brd ff:ff:ff:ff:ff:ff | ||
- | 7: mic0: <BROADCAST> mtu 64512 qdisc noop state DOWN mode DEFAULT qlen 1000 | ||
- | link/ether 4c:79:ba:32:0f:71 brd ff:ff:ff:ff:ff:ff | ||
- | </code> | ||
- | |||
- | Copie du paramétrage pour le module MIC chargé au démarrage | ||
- | <code> | ||
- | cp /root/mpss-3.1.2/mpss-modules/mic.conf /etc/modprobe.d | ||
- | update-initramfs -k all -u | ||
- | </code> | ||
- | |||
- | ==== Installation des paquets MPSS ==== | ||
- | |||
- | Les paquets MPSS d'Intel ont été transformés avec ''alien'' dans ''/root/mpss-3.1.2'' | ||
- | |||
- | Les paquets mpss-modules sont supprimés. Les autres installés tel que. | ||
- | <code> | ||
- | cd /root/mpss-3.1.2 | ||
- | rm *mpss-modules*deb | ||
- | ls *-lib*deb | xargs -I '{}' dpkg -i '{}' | ||
- | ls *deb | grep -v '\-lib' | xargs -I '{}' dpkg -i '{}' | ||
- | </code> | ||
- | |||
- | Par défaut les installations se font dans :<code>/opt/mpss/3.1.2 | ||
- | /opt/intel/mic/ | ||
- | /etc/mpss | ||
- | /usr/lib64</cdoe> | ||
- | |||
- | Ceci n'est plus le cas dans la Debian Wheezy. | ||
- | |||
- | Installation d'un ''LD_LIBRARY_PATH'' sur ''/usr/lib64'' | ||
- | <code>echo /usr/lib64 >> /etc/ld.so.conf.d/mic.conf</code> | ||
- | |||
- | La commande ''mpssinfo'' | ||
- | <code> | ||
- | MPSS : mpssinfo | ||
- | |||
- | MpssInfo Utility Log | ||
- | |||
- | Created Thu Feb 13 15:52:59 2014 | ||
- | |||
- | System Info | ||
- | HOST OS : Linux | ||
- | OS Version : 3.2.0-4-amd64 | ||
- | Driver Version : 3.1.2-1 | ||
- | MPSS Version : NotAvailable | ||
- | Host Physical Memory : 66010 MB | ||
- | |||
- | Device No: 0, Device Name: mic0 | ||
- | |||
- | Board | ||
- | Vendor ID : 0x8086 | ||
- | Device ID : 0x225c | ||
- | Subsystem ID : 0x2500 | ||
- | Coprocessor Stepping ID : 3 | ||
- | PCIe Width : x16 | ||
- | PCIe Speed : 5 GT/s | ||
- | PCIe Max payload size : 256 bytes | ||
- | PCIe Max read req size : 4096 bytes | ||
- | Coprocessor Model : 0x01 | ||
- | Coprocessor Model Ext : 0x00 | ||
- | Coprocessor Type : 0x00 | ||
- | Coprocessor Family : 0x0b | ||
- | Coprocessor Family Ext : 0x00 | ||
- | Coprocessor Stepping : B1 | ||
- | Board SKU : B1PRQ-7110 P/X | ||
- | |||
- | MICCTRL : micctrl --status | ||
- | |||
- | mic0: ready | ||
- | </code> | ||
- | |||
- | Pour démarrer le système MPSSD, mais il s'attend à trouver un /var/lock/subsys pour créer un /var/lock/subsys/mpssd | ||
- | <code> | ||
- | mkdir /var/lock/subsys | ||
- | sed -i "s/^exit/mkdir\ \/var\/lock\/subsys\nexit/g" /etc/rc.local | ||
- | </code> | ||
- | |||
- | Lancement avec la commande suivante : ''micctrl --initdefaults'' dont la sortie est la suivante | ||
- | <code> | ||
- | [Warning] mic0: Generating compat network config file. This will be removed in the 3.2 release | ||
- | [Warning] mic0: User 'root' does not have either rsa or dsa keys created | ||
- | |||
- | micctrl --config | ||
- | |||
- | mic0: | ||
- | ============================================================= | ||
- | Linux Kernel: /usr/share/mpss/boot/bzImage-knightscorner | ||
- | BootOnStart: Enabled | ||
- | Shutdowntimeout: 300 seconds | ||
- | |||
- | ExtraCommandLine: highres=off | ||
- | PowerManagment cpufreq_on;corec6_on;pc3_on;pc6_on | ||
- | |||
- | UserAuthentication: Local | ||
- | |||
- | Root Device: Dynamic Ram Filesystem /var/mpss/mic0.image.gz from: | ||
- | Base: /usr/share/mpss/boot/initramfs-knightscorner.cpio.gz | ||
- | CommonDir: /var/mpss/common.filelist | ||
- | MicDir: /var/mpss/mic0.filelist | ||
- | |||
- | Network: Static Pair | ||
- | Hostname: grizzly-mic0 | ||
- | MIC IP: 172.31.1.1 | ||
- | Host IP: 172.31.1.254 | ||
- | Net Bits: 24 | ||
- | NetMask: 255.255.255.0 | ||
- | MtuSize: 64512 | ||
- | MIC MAC: 4c:79:ba:32:0f:70 | ||
- | Host MAC: 4c:79:ba:32:0f:71 | ||
- | |||
- | Console: hvc0 | ||
- | VerboseLogging: Disabled | ||
- | </code> | ||
- | |||
- | Lancement du démon avec ''mpssd'' | ||
- | |||
- | Connaissance de d'état de la carte avec ''micctrl --status'' | ||
- | <code> | ||
- | mic0: online (mode: linux image: /usr/share/mpss/boot/bzImage-knightscorner) | ||
- | </code> | ||
- | |||
- | Définition de l'adresse statique de l'interface mic0 dans ''/etc/network/interfaces'' | ||
- | <code> | ||
- | auto mic0 | ||
- | iface mic0 inet static | ||
- | address 172.31.1.254 | ||
- | netmask 255.255.255.0 | ||
- | broadcast 172.31.1.255 | ||
- | network 172.31.1.0 | ||
- | post-up /sbin/iptables -t nat -A POSTROUTING -s 172.31.1.0/24 -o eth0 -j MASQUERADE | ||
- | </code> | ||
- | |||
- | <code> | ||
- | echo mic >> /etc/modules | ||
- | update-initramfs -k all -u | ||
- | </code> | ||
- | |||
- | Chargement de l'interface réseau avec ''ifup mic0'' | ||
- | |||
- | Connexion sur le xeon-phi avec ''ssh 172.31.1.1'' | ||
- | |||
- | Vérification du nombre de processeurs avec ''cat /proc/cpuinfo | grep ^processor | wc -l'' lequel donne ''244''. | ||
- | |||
- | |||
- | ===== Historique ===== | ||
- | |||
- | |||
- | ==== Des débuts difficiles pour une prise en main impossible ==== | ||
- | |||
- | La société Intel a mis à disposition fin octobre 2013 un Xeon Phi 7120P à disposition de Emmanuel Quémener, du Centre Blaise Pascal. | ||
- | |||
- | La carte Intel Xeon Phi 7120P se présente sous forme d'une carte PCI Express d'une taille équivalente à celle d'une carte Nvidia GTX Titan ou Nvidia Tesla. Elle nécessite 2 connecteurs 6 broches pour son alimentation, deux emplacements PCI, un port PCI-Express 16x et une longueur suffisante. | ||
- | |||
- | La première étape a été de trouver un socle pour l'accueillir de manière transitoire et réaliser les premiers tests. | ||
- | |||