hdf performance on openstack

33
HDF Performance on OpenStack John Readey The HDF Group [email protected] June 15, 2016 www.hdfgroup.org

Upload: others

Post on 19-Oct-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: HDF Performance on OpenStack

HDFPerformanceonOpenStack

[email protected]

June15,2016

www.hdfgroup.org

Page 2: HDF Performance on OpenStack

Mission

•  InvesHgateperformanceofusingHDF5inacloudenvironment•  Measureperformanceusingstandardlibrary

•  Compression•  Chunklayouts•  FileaggregaHon

•  InvesHgatewaystoharnesscloudspecificcapabiliHes:•  ElasHcCompute–createcomputeinstancesondemand•  ObjectStorage–uHlizeobjectstoreforpersistentstorage

•  ComparisontouseofotherframeworkslikeHadooporSpark

• DeterminefutureworkthatwouldenableHDF5toperformbeTerinthecloud

Page 3: HDF Performance on OpenStack

Evalua,on Criteria

•  EvaluaHonCriteria•  Performance–howfastcanatypicalscienceproblembecomputed•  Storage–Howmuchstorageisneededforthedataset•  Usability–howeasyisittoperformtaskstypicalofscienceanalyHcs•  Scalability--HoweffecHvelycanmulHplecoresbeused•  Cost–Costmetrics(storage+compute)forvarioussoluHons

Page 4: HDF Performance on OpenStack

Plan of Inves,ga,on

•  Selecttestdataset•  NCEP3–(720,1440)griddeddata–7980files-130GBuncompressed

•  Chooseascienceproblem•  Calculatemin/max/avg/stdevforagivendataset

•  Selectcomputepladorm•  OSDCGriffin–OpenStack,300nodes

•  InvesHgateHDF5performance•  Phase1:usingonecomputenode

•  Varychunklayout/compressionfilters•  Phase2:usingusingmulHplenodes•  Phase3:client/serverwithHDFServer

•  PlanforFuturework

Page 5: HDF Performance on OpenStack

Hardware

• UsingOpenScienceDataCloudGriffincluster• Xeonsystemswith1-16cores•  300computenodes•  10GbEthernet•  EphemerallocalPOSIXfilesystem•  Sharedpersistentstorage(Cephobjectstore,S3API)

Page 6: HDF Performance on OpenStack

So:ware

• HDF5libraryv1.8.15• Compressionlibraries:MAFISC/GZIP/BLOSC• OperaHngsystem:UbuntuLinux•  Linuxdevelopmenttools• HDF5tools:h5dump,h5repack,etc.• Python3• Pythonpackages:h5py,NumPy,ipyparallel,PyTables• HDFServer:hTps://github.com/HDFGroup/h5serv• H5pyd:hTps://github.com/HDFGroup/hpd

Page 7: HDF Performance on OpenStack

OpenStack at OSDC in Brief

•  InstancescanbecreatedeitherprogrammaHcallyorviawebconsole• ComputeInstancesiniHalizedfromsnapshotorimagefile• ManydifferentinstanceconfiguraHonsavailable

•  RAM2GB–100GB•  Disk10GB–2TB

• Onboarddiskisephemeral!–willbelostwhentheinstanceisshutdown

Page 8: HDF Performance on OpenStack

ObjectStorage

PythonTestDriver

TestInstance•  Instanceisshutdown

•  Testdriverisrun

S3API

•  Datafilescopiedfromobjectstoragetoinstance

•  Instanceiscreated

LocalDisk

hdf5lib

h5py

•  ResultsandperformancemeasurementsstoredinObjectStore

Page 9: HDF Performance on OpenStack

HDF5 Chunking and compression

• ChunkingisoneofthestoragelayoutsforHDF5datasets• HDF5dataset’sbytestreamisbrokenupinchunksandstoredatvariouslocaHonsinthefile• Chunksareofequalsizeindataset’sdataspacebutmaynotbeofequalbytesizeinthefile• HDF5filteringworksonchunksonly•  Filtersforcompression/decompression,scaling,checksumcalculaHon,etc.

Page 10: HDF Performance on OpenStack

HDF5 Chunking and compression

Page 11: HDF Performance on OpenStack

Determining chunk layouts

•  Twodifferentchunkingalgorithms:•  Unidata’sop0malchunkingformulafor3Ddatasets•  h5pyformula

•  ThreedifferentchunksizeschosenforthecollatedNCEPdataset:•  Synop0cmap:1×72×144•  Datarod:7850×1×1•  Datacube:25×20×20

• BestlayoutdependsonhowwhattheapplicaHonsaccesspaTernis

Page 12: HDF Performance on OpenStack

Results – Compression Size

0

20

40

60

80

100

120

140

None blosc gzip mafisc

CompressedSize(GB)

MAFISCperformedbest,butisalosseycompressor.BloscandgziphavereducHonof~60%

Page 13: HDF Performance on OpenStack

Results – Run,me

•  LoadfromS3:~60m• RunHme:

•  NoCompression/nochunking:11.8m•  (1x72x144)chunklayout/gzip:5.2m•  (25x20x20)chunklayout/gzip:68.6m•  (7850x1x1)chunklayout/gzip:15.4d

•  Fullresultsat:hTps://github.com/HDFGroup/datacontainer/blob/master/results.txt

Page 14: HDF Performance on OpenStack

Phase 2 – U,lizing mul,ple nodes

• Oneadvantageofcloudenvironmentsison-demandcompute,theabilitytoinstanHateandprovisioncomputenodesprogrammaHcally•  FrameworkslikeHadooporSparkharnessthepowerofmulHplecomputenodestogetworkdonefaster• HoweasywoulditbetouHlizemulHpleinstanceswithOpenStackandthestandardHDF5library?

Page 15: HDF Performance on OpenStack

Cluster Challenge

• Othersystems(e.g.Hadoop)supportclustersoutofthebox• HDF5doesnot…• …Socreate“on-demand”cluster

• WrotecodetolaunchVM’sprogrammaHcally•  ConnectusingZeroMQ•  RunwithparallelPython•  ModifytestdrivertosupportparallelPython• WrotePythonmoduletodistributedataacrossengines

Page 16: HDF Performance on OpenStack

ObjectStorage

EngineNodes

JupyterNotebook

PythonScripts

iPythonParallel

HDFController

Controller

ApplicaHonLayer

iPythonNotebook

Gui

•  ObjectStorecontainsHDF5-basedDataCollecHons(CIMP5/CORDEX/NCEP3)

•  DatacollecHonstoragesizerangefrom100GBstoPBs•  ObjectsizeinMBstoGBs(canbetuned)•  MetadatamapsHme/geographicregiontoobjects•  HDF5compression/chunkingreducesspacerequired

•  EngineVMscreateondemandbycontroller•  EachVMreadsaparHHonofdatafromobjectstore•  Codetoberunpushedbycontroller•  Outputreturnedtocontrollerorsavedtolocalstore

S3API

ZeroMQ

hTp•  ControllerRunsonVM&listensforclientrequests•  RunsNotebookkernels•  SpinsupEnginesasneeded•  Dispatchesworktoengines(viaiPyParallel/0MQ)

•  Usersconnecttoweb-basedJupyterNotebook•  RuncodeviaREPLorsubmitscripts•  PlotresultsusingMatplotliborotherploxngpackage

Page 17: HDF Performance on OpenStack

ObjectStorage

EngineNodes

JupyterNotebook

PythonScripts

iPythonParallel

HDFController

Controller

ApplicaHonLayer

iPythonNotebook

Gui

S3API

ZeroMQ

hTp

•  S3Datahasbeenimported(Public-readable)

ApplicaHonLifeCycle1–nousersconnected

•  Noenginesrunning

•  Controllerlisteningfornewclients•  JupyterHublisteningfornewnotebooksessions

Page 18: HDF Performance on OpenStack

ObjectStorage

EngineNodes

JupyterNotebook

PythonScripts

iPythonParallel

HDFController

Controller

ApplicaHonLayer

iPythonNotebook

Gui

S3API

ZeroMQ

hTp

•  NoS3transfers

ApplicaHonLifeCycle2–Uselaunchesnotebooksession

•  Noenginesrunning

•  JupyterHublaunchessession•  Controllergetsclientrequestfromnotebook

Page 19: HDF Performance on OpenStack

ObjectStorage

EngineNodes

JupyterNotebook

PythonScripts

iPythonParallel

HDFController

Controller

ApplicaHonLayer

iPythonNotebook

Gui

S3API

ZeroMQ

hTp

•  Transferdatatoengines

ApplicaHonLifeCycle3–UseloadsdatacollecHone.g.hdfcontroller.load(‘NCEP3’)#userdoesn’tneedtoknowS3keys,justdatacollecHonlabelandanysubsexnginfo(Hmeorgeo-region)

•  Enginesstart•  LoaddataparHHon•  Signalstocontrollerthatdataisready

•  Controllergetsdatarequestfromnotebook•  DeterminesopHmumtypeand#ofengines•  LaunchesEngines•  TellsenginestofetchdataobjectsfromS3

Page 20: HDF Performance on OpenStack

ObjectStorage

EngineNodes

JupyterNotebook

PythonScripts

iPythonParallel

HDFController

Controller

ApplicaHonLayer

iPythonNotebook

Gui

S3API

ZeroMQ

hTp

•  NoacHvity

ApplicaHonLifeCycle4–DataanalyHcsE.g.:getvaluesatgeolocaHonRepeatcycleofquery/analyze/plotasdesired

•  Enginesprocessrequests•  DataislocaltoVM(SSDorRAM)

•  ControllergetsuserrequestfromClient•  Dispatchesacrossallengines•  Waitsforresponses•  Returnsaggregatedresulttoclient

Page 21: HDF Performance on OpenStack

ObjectStorage

EngineNodes

JupyterNotebook

PythonScripts

iPythonParallel

HDFController

Controller

ApplicaHonLayer

iPythonNotebook

Gui

S3API

ZeroMQ

hTp

•  NoS3acHvity

ApplicaHonLifeCycle5–nouserendssession

•  Enginesshutdown•  Anydatastoredlocallyislost!

•  ControllerterminatesEngines•  ConHnueslisteningfornewnotebooksessions

Page 22: HDF Performance on OpenStack

Results – Performance w/ 8 node

0.0

20.0

40.0

60.0

80.0

100.0

120.0

140.0

None blosc gzip45x180 gzip22x46 mafisc

RunTime-8engines(seconds)

BLOSChasbestperformanceforcompressedformat

Todo:chunkedbutnotcompresseddataset

Page 23: HDF Performance on OpenStack

Run,me – by number of nodes – no compression

0.0

500.0

1000.0

1500.0

2000.0

2500.0

4 8 16 32 64

PerformancevsNumberofNodes

Page 24: HDF Performance on OpenStack

0.0

500.0

1000.0

1500.0

2000.0

2500.0

3000.0

3500.0

4000.0

1 4 8 16 32 64

LoadandRunHmesOSDCCluster

Load Run

PercentofHmespentloadingdatagoesupasnumberofnodesincreases

Page 25: HDF Performance on OpenStack

Conclusions - Phase II

• HDF5withsimpleclustersoluHon(ZeroMQ/IPyParallel)provided:•  Excellentperformance–superlinearwithnumberofnodes•  Didnotrequireexpansionorconversionofdata(aswithHadoop,etc)•  EnablesscienHsttousestandardtools/apisforanalysis

•  ExisHngclustersoluHondidn’tworkwellwithlargefiles(>10GB)• ClusterlaunchHmeanddataloadingcandominateactualcomputeHme

Page 26: HDF Performance on OpenStack

Methodology – Phase III

• AggregateNCEPdatafilesto7850x720x1440datacube•  Onefile,~100GB

•  SetuplargeVMwithfileandserver(h5serv,hyrax,orTHREDDS)• Parallelnodesaccessdataviarequeststoserver• Adapttestscripttouseserverinterface• Measureperformancewithdifferent:

•  Servers•  Chunklayout•  Numberofnodes

Page 27: HDF Performance on OpenStack

FileStorage

EngineNodes

JupyterNotebook

PythonScripts

iPythonParallel

HDFController

Controller

ApplicaHonLayer

iPythonNotebook

Gui

•  FileStorageonServernodecontainsaggregateddata•  DatacollecHonstoragesize~100GBs•  MetadatamapsHme/geographicregiontoobjects•  HDF5compression/chunkingreducesspacerequired

•  EngineVMscreateondemandbycontroller•  EachVMsubmitsrequesttodataserver•  Codetoberunpushedbycontroller•  Outputreturnedtocontrollerorsavedtolocalstore

RESTAPI/DAP

ZeroMQ

hTp•  ControllerRunsonVM&listensforclientrequests•  RunsNotebookkernels•  SpinsupEnginesasneeded•  Dispatchesworktoengines(viaiPyParallel/0MQ)

•  Usersconnecttoweb-basedJupyterNotebook•  RuncodeviaREPLorsubmitscripts•  PlotresultsusingMatplotliborotherploxngpackage

h5serv hyrax THREDDS

Page 28: HDF Performance on OpenStack

Results – Server Access

•  Testrunswithonenode(computesummariesoverHmeslices)

Chunk/Compression Local Hyrax THREDDS h5serv

None 148.6 3297.1 961.2 885.8

1x72x44/gzip9 317.6 8575.8 1264.1 ?

25x20x20/gzip9 4131.0 13946.5 6936.8 ?

Page 29: HDF Performance on OpenStack

Conclusions Phase III

• Remotedataaccessentailsaperformancepenalty• AllocaHonofalargeinstancerunningconHnuouslyrequired

•  Dataonserverwillbelostifinstancegoesdown• Aggregateperformancelevelsoutwithlargenumberofclients

•  Serverprocesses/networkiobecomeboTleneck

Page 30: HDF Performance on OpenStack

Future Direc,ons – HDF Scalable Data Service

•  ScalableDataServiceforHDF5•  Designedforpublicorprivateclouds•  UsesObjectStorageforpersistentdata•  ”share-nothing”architecture•  Supportanynumberofclients•  Cost-effecHve•  EfficientaccesstoHDF5objectswithoutopeningfile•  ClientSDK’sforC/Fortran/PythonenableexisHngapplicaHonstobeusedwiththeservice•  RESTAPIcompaHblewithcurrentHDFServer(referenceimplementaHon)

Page 31: HDF Performance on OpenStack

HSDS Architecture •  ServiceNodes(SN)handleclientrequests•  DataNodes(DN)parHHonobjectstore•  BothSNandDNclusterscanscalebasedondemand•  HDFObjects(links,datasets,chunks,etc.)storedasobjects

Page 32: HDF Performance on OpenStack

Separa,on of Storage and Compute Costs

•  Storage•  AWSS3cansupportanysizestorageataffordablecosts(~$0.03/GB/month)•  AWShasbuiltinredundancy,sononeedforbackups,etc.

• Compute•  IfnoacHveusers,thereisminimalcomputecosts(~$50/month)•  Servicenodescanscaleupinresponsetoload(costsproporHonaltousage)

Page 33: HDF Performance on OpenStack

Open Ques,ons •  S3storage

•  OpHmalobjectstorekeymapping/objectsizes•  Compression/chunkingtominimizecost/increaseperformance

•  Costprofile(forAWS)•  Steadystatecosts–S3storage/controllerVM•  VMinstancehours*numberofengines•  S3requests?

•  BestenginescharacterisHcs•  Instancetype-Needenoughlocalstorage.SSDisbeTerthanrotaHng•  vCPUs?OnethreadperVM?•  OpHmal#ofenginesforagivendatacollecHon

•  Security•  ZeroMQdoesn’thaveany!•  RuninVPCperuser?

•  HowwouldAWSimplementaHonperformcomparedtoOpenStack?•  CompareusingDockerContainersratherthanVMsasengine(fasterspinupHme)•  ValidaHonoftransformedresults