Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAgrippine Rodriguez Modifié depuis plus de 10 années
1
09/02/09 Analyse distribuée Une plongée dans PyROOT et l’accès aux données : CPU et réseau
2
Plan : Contexte Comment fonctionne PyROOT Ouverture et lecture des fichiers Différents environnements de travail Interactif : lappsl4 Données sur lapp_data Données sur le SE (SAM et DAS) Sur la grille Jobs sur différents WN Jobs sur même WN
3
Contexte : 3 PyROOT (interface Python) - chainage des fichiers à analyser ( fichiers concaténés lors de leur ouverture ) - lecture de l’ensemble des fichiers - merger les fichiers pour n’en avoir que un seul CPU mesuré = CPU utilisé pour remplir des histogrammes / données ROOT : - Comparer CPU / réseau - Pour : - différentes localisations des données - différentes façons de travailler ( série / parallèle ) - jobs sur WN ou UI ? But :
4
Setup PyRoot (http://root.cern.ch/root/HowtoPyROOT.html) Versions de ROOT: /grid_sw/lhcb/lib/lcg/external/root Versions de python: /grid_sw/lhcb/lib/lcg/external/python setenv ROOTSYS /grid_sw/lhcb/lib/lcg/external/root/5.18.00d/slc4_ia32_gcc34/root setenv PYTHONDIR /grid_sw/lhcb/lib/lcg/external/Python/2.5/slc4_ia32_gcc34/ setenv PATH ${ROOTSYS}/bin:${PYTHONDIR}/bin:${PATH} setenv LD_LIBRARY_PATH ${ROOTSYS}/lib:${PYTHONDIR}/lib:${LD_LIBRARY_PATH} setenv PYTHONPATH ${ROOTSYS}/lib:${PYTHONPATH} #librairie castor ln -s ${LCG_LOCATION}/lib/libdpm.so libshift.so.2.1 setenv LD_LIBRARY_PATH ${PWD}:${LD_LIBRARY_PATH}
5
Module(s) à importer import ROOT from ROOT import **** (Tfile, TH1F,…) Ouverture de fichiers Les uns à la suite des autres input = TFile.Open(“Name.root”) mytree=input.Get('n1') pas plus de 30Mo de fichiers Chainer les fichiers et les ouvrir tous en même temps chain = TChain('n1') chain.Add(“Name.root”) entries=chain.GetEntries() PyROOT => Mélanger les fichiers ou autre méthode ROOT 5
6
Création d’un arbre avec une branche contenant des feuilles fNewFile = TFile("Name","Create,Recreate,…") fNewTree=TTree("Name", "Name") sBranch_struct="struct cluster_t{\ Int_t size;\ Float_t eX[SIZE];\ };" sClusters_struct=sClusters_struct.replace("SIZE",str()) gROOT.ProcessLine(sClusters_struct); self.Views.Branch('clusters',cluster_t,'@size/I:clusters.eX['+str(self.nPoints)+']/F') clusters.eX=array('f',range(self.nPoints)) for j in range(0,self.nPoints): clusters.eX[j]=float(self.Variables[0][0][j]) self.Views.Fill() 6 Crée new file and new tree Crée structure branche avec feuilles Accrocher structure sur arbre Rempli variables de la branche
7
Script utilisé for File in sFileList: sRootName = '/lapp_data/lhcb/rospabe/Bs_JPsiEta/Prod/'+File chain.Add(sRootName) #get the entries entries=chain.GetEntries() #declaration of the variables R = array( 'l', [0] ) chain.SetBranchAddress("R",R) BsM = defineArray( 'd', 20000 ) chain.SetBranchAddress("BsM",BsM) nEvt=nEvt+chain.GetEntriesFast() for jentry in xrange(0,nEvt ): nb=chain.GetEntry(jentry) #loop over reconstructed Bd for j in range(0,R[0]): nBs+=1 mBs.Fill(BsM[j]/1000.) file.write("Mean Histo = "+str(mBs.GetMean())+"\n") Liste de fichiers à ouvrir concaténation dans chain Matcher les entrées Variables Remplissage histo Maximum histo
8
PyROOT au niveau réseau et CPU Import ROOT et dépendances (depuis Lappsl) : Exemple de plots que l’on va voir CPU utilisé Network Sleeping t(s) CPU(kb) t(s) Transfert (∆b)
9
Ouverture et lecture des fichiers (SE) Ouverture fichiers a la suite : input = TFile.Open(“rfio:…..root”) (0.4’’) mytree=input.Get('n1') (0.1’’) Pas plus de 30Mo de fichiers ⇒ memory leak t(s) CPU(kb) Import ROOT Getting trees Transfert (∆b) ~13’’ t(s)
10
Ouverture et lecture des fichiers (lapp_data) Ouverture fichiers a la suite : input = TFile.Open(/lapp_data/……root”) (0.1’’) mytree=input.Get('n1') (0.1’’) Pas plus de 30Mo de fichiers CPU(kb) Getting trees 1.2’’ => Mélanger les fichiers et autre methode ROOT Transfert (∆b) t(s) Getting tree
11
Chainer les fichiers et les ouvrir en même temps avec PyROOT ( 200 fichiers : tot = 500Mo) Fichiers sur Data_Local (gpfs) ou sur le SE (rfio) du Lapp Accès plus rapide vers Data_Local que SE CPU max 380MB Réseau max 17MB.s -1 Réseau max 2MB.s -1 Accès depuis une UI de fichiers sur disque locaI / SE 11 9MB/s 0.9MB/s WN SE UI 710’’ 60’’ Protocoles ≠
12
Un seul fichier de 500Mo (5int, 1 double, 115 float) Accès plus rapide vers Data_Local que SE (rfio) (5’’ de différence) CPU max 530MB Réseau max 18MB.s -1 Protocoles ≠ mais effet atténué car 1 seul fichier 12 70’’ 13MB/s WN SE UI Accès depuis une UI de fichiers sur disque locaI / SE
13
Accès depuis un WN de fichiers sur SE 200 fichiers ou un seul fichier de 500Mo (5int, 1 double, 115 float) Accès plus rapide avec un seul fichier que 200 Temps ~ que depuis une UI Temps < que depuis une UI CPU max 530MB Réseau max 17MB.s -1 Réseau max 5MB.s -1 13 710’’ 50’’ 15MB/s 1MB/s WN SE UI
14
Tableau résumé d’accès à distance CPUDonnéesProtocole Temps (s) 200 fichiersUISE open rfio 0.9710 UIData_Local open 9.160 WNSE open rfio 1.0710 1 fichier mergéUISE open rfio 13.070 UIData_Local open 13.065 WNSE open rfio 15.050 14 Merger les fichiers diminue temps total car moins d’I/O Pas d’effet de cache car le taux de renouvellement des fichiers contenus dans le cache est très élevé
15
Accès depuis une UI de fichiers sur disque local / SE Trois étapes itératives : copier n fichiers localement (rfcp parallélisés) analyser les n fichiers pendant copie des suivants effacer fichiers analysés 15 WN SE UI
16
Conclusion 16 WN SE UI Temps rfcp >> rfio lorsque le nombre de fichiers augmente Réseau utilisé plus optimal avec plusieurs fichiers copiés en même temps Max du réseau interne Lapp de 1Gb/s
17
Closer to reality : fichiers de 1G0 Essais avec N fois X fichiers de 1Go X.N=100 t calcul >t transfert et t calcul X =>t tot 100’’/1Go si X<40 Limitation vient du calcul 17... Accès depuis un WN de fichiers sur SE WN SE UI
18
Résumé 18 Temps total pour transfert en // et calcul est équivalent qq soit le nombre de fichiers < 40 Limitation vient du calcul WN SE UI
19
Blade de 4 WN sortit spécialement pour ces tests (période calme : Atlas_P) X jobs mêmes WN (X=1,2,3,4) Travail en rfcp // Réseau même dans 4 cas Les jobs se pénalisent entre eux : la vitesse lecture/écriture des données sur le disque du blade est bloquante. Max du réseau cluster WN SE 2*1Gb/s 19 WN SE UI Accès depuis un WN de fichiers sur SE Jobs sur un même WN ( blade 4 cores)
20
Conclusions en “normal” : cpu max 500MB : 17 et débit max : 50MB/s en // : point min avec 60fichiers (200MB) UI : débit max = 70MB/s WN : débit max = 110MB/s Fichiers 1Go : même effet (2Go en //) Sur même WN Transferts fichiers : même débit (100MB/s) CPU partagées => compétition entre jobs Limite d’accès aux données copiées sur disque du blade Pas ce genre de problème avec des open rfio 20
21
Conclusions 21 CPUDataProtocole (MB/s) UI open13.0 Résultat site dépendant ( LAPP : gpfs + réseau ) UISErfio:/dpm/… 13.0 WNSErfio:/dpm/…15.0 Limitation : activité SE et occupation du réseau WN/SE non prévisibles (fonction du type des jobs qui tournent à un moment donné) UISErfcp local UI70.0 WNSErfcp local WN110.0 Limitation : vitesse lecture/écriture sur disque WN 1 Fichier de 1G0 100 fichiers de 1G0 en // Fichiers mergés plutôt que série de petits fichiers “open rfio” plus performant que rfcp mais dépend de l’activité sur cluster Capacités maximum du réseau Lapp interne et cluster atteint (1Gb/s)
22
1/2/3/4 open rfio sur blade Temps : import root et dépendances : 11.6’’ et 0.4’’ add chain 0’’ getting entries : 180’’ lecture données : 8320/8420/8830/9000’’ CPU(kb) t(s) Getting entries Working t(s) Getting entries Working Transfert (∆b)
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.