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

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

Embed Size (px)

Citation preview

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

09/02/09

Analyse distribuée

Une plongée dans PyROOT et l’accès aux données : CPU et réseau

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

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

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

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 :

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

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}

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

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

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

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

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

Script utiliséfor File in sFileList: sRootName = '/lapp_data/lhcb/rospabe/Bs_JPsiEta/Prod/'+File chain.Add(sRootName)

#get the entriesentries=chain.GetEntries()

#declaration of the variablesR = 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

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

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)

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

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’’ ~13’’

t(s)

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

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)

t(s)

Getting tree

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

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

CPUmax 380MB

Réseaumax 17MB.s-1

Réseaumax 2MB.s-1

Accès depuis une UI de fichiers sur disque locaI / SE

11

<Débit> 9MB/s

<Débit> 0.9MB/s

WNSE

UI

710’’

60’’

Protocoles ≠

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

Un seul fichier de 500Mo

(5int, 1 double, 115 float)

Accès plus rapide vers Data_Local que SE (rfio) (5’’ de différence)

CPUmax 530MB

Réseaumax 18MB.s-1

Protocoles ≠ mais effet atténué car 1 seul fichier

12

70’’

<Débit> 13MB/s

WNSE

UI

Accès depuis une UI de fichiers sur disque locaI / SE

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

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 CPUmax 530MB

Réseaumax 17MB.s-1

Réseaumax 5MB.s-1

13

710’’

50’’

<Débit> 15MB/s

<Débit> 1MB/s

WNSE

UI

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

Tableau résumé d’accès à distance

CPU Données

Protocole

<NetWork(MB/s)>

Temps (s)

200 fichiers UI SE open rfio 0.9 710

UI Data_Local

open9.1 60

WN SE open rfio 1.0 710

1 fichier mergé

UI SEopen rfio

13.0 70

UI Data_Local

open13.0 65

WN SE open rfio 15.0 50

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é

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

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 suivantseffacer fichiers analysés

15

WN SE

UI

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

Conclusion16

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

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

Closer to reality : fichiers de 1G0

Essais avec N fois X fichiers de 1Go X.N=100

tcalcul>ttransfert et tcalcul X =>ttot100’’/1Go si X<40

Limitation vient du calcul

17

...

...

Accès depuis un WN de fichiers sur SE

WN SE

UI

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

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

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

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 WNSE 2*1Gb/s

19

WN SE

UI

Accès depuis un WN de fichiers sur SEJobs sur un même WN ( blade 4 cores)

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

Conclusions

en “normal” : cpumax 500MB <débit>: 17 et débitmax: 50MB/s

en // : pointmin avec 60fichiers (200MB) UI : débitmax = 70MB/sWN : débitmax = 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 bladePas ce genre de problème avec des open rfio

20

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

Conclusions21

CPUData

Protocole<NetWork>

(MB/s)

UI UI open 13.0Résultat site dépendant ( LAPP : gpfs + réseau )

UI SE rfio:/dpm/…13.0

WN SE rfio:/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é)

UI SE rfcp local UI 70.0

WN SErfcp local WN

110.0Limitation : 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)

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

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)