La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

09/02/09 Analyse distribuée Une plongée dans PyROOT et l’accès aux données : CPU et réseau.

Présentations similaires


Présentation au sujet: "09/02/09 Analyse distribuée Une plongée dans PyROOT et l’accès aux données : CPU et réseau."— Transcription de la présentation:

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)


Télécharger ppt "09/02/09 Analyse distribuée Une plongée dans PyROOT et l’accès aux données : CPU et réseau."

Présentations similaires


Annonces Google