1 / 37

Active Objects & Co.

Active Objects & Co. First Year PhD Assessment Justine Rochas PhD subject Programming Model and Middleware S upport for Distributed and C oncurrent Application Advisor Ludovic Henrio Team Scale (I3S-INRIA). AGENDA. PAST. PART I – A Step i nto MultiActive Objects

seda
Télécharger la présentation

Active Objects & Co.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Active Objects & Co. First YearPhDAssessment Justine Rochas PhDsubjectProgramming Model and Middleware Support for Distributed and Concurrent Application Advisor Ludovic Henrio TeamScale (I3S-INRIA)

  2. AGENDA PAST • PART I – A StepintoMultiActiveObjects • PART II – What do others do ? The ABS case • PART III – Towardsfaulttolerance of Active Objects PRESENT FUTURE

  3. Active Objects [1] Active Object a Request queue a.bar() Request Execution thread bar() • Asynchronousmethod calls / requestswithfutures • No concurrencybetweenrequests The ProActive Java library = active objectsusing Java syntax

  4. Active Object Creation in ProActive on node1, active object a does: T a = newActive(T.class, params…, node2) // a: localreferenceto the proxy of ra node1 node2 active objecto objecta (proxy to ra) active objectra local reference object remotereference active object

  5. Method calls in ProActive • on node1, active object a does: P param1, param2 = … ; T a = newActive(T.class, params…, node2) Vres = a.bar(param1, param2); // Samesyntaxas a local call res.foobar(); // Wait-by-necessityif resis not resolved node1 node2 param2 copy of param2 param1 copy of param1 o res bar ra a bar

  6. PART IA StepintoMultiActiveObjects Priorities and threading mechanisms for MultiActiveObjects

  7. MultiActiveObjects [2] – Principle Multiactive Object o Thread pool • Execute multiple requestsat the same time locally • In a controlledway

  8. M.A.O. – Language & Scheduling @DefineGroups({ @Group(name="routing", selfCompatible=true), @Group(name="monitoring", selfCompatible=true) }) Multiactive Object o @DefineRules({ @Compatible({"routing","monitoring"}) }) class O { @MemberOf("routing") Value lookup(Key k) { … } @MemberOf("monitoring") voidlog(String m) { … } }

  9. M.A.O. – Extended features Receiverequests ApplyCompatibilities Filter Busy threads! ApplyPriorities Reorder Apply Threading policies Filteragain Executerequests

  10. PrioritySpecificationMechanism High priority @DefinePriorities({ @PriorityOrder({ @Set(groupNames = {"G1"}), @Set(groupNames = {"G2"}), @Set(groupNames = {"G5","G4"}) }), @PriorityOrder({ @Set(groupNames = {"G3"}), @Set(groupNames = {"G2"}) }) }) G1 dependency G3 dependency G2 G5 G4 Lowpriority incoming requestR2 Priorities are automaticallytakenintoaccount in the schedulingpolicy R4 R3 R1 Declarative Scheduling for Active Objects, L. Henrio, J. Rochas, 29th Symposium on Applied Computing (SAC 2014)

  11. Thread Management Mechanisms (1) @DefineThreadConfig(threadPoolSize=1, hardLimit=false) current thread V v = o.bar(); (1) v.foo(); (2) (1) other thread (1)currentthread state = active (2)currentthread state = waiting (2)

  12. Thread Management Mechanisms (2) @Group(name=" routing", minThreads=2, maxThreads=5) routing max min Threads neverused by therouting group Threads neverused by other groups Thread pool Enablehighlevelimplementation of scheduling patterns

  13. PART IIWhat do others do? The ABS case A Translator to Distribute ABS Programs usingProActive

  14. Motivation ProActive – MultiactiveObjects Deployment of distributed applications ✔ OBJECTIVE Providedistributed deployment to ABS usingProActive ABS – Abstract BehavioralSpec. Language Modeling of distributed applications ✔

  15. Background – ABS [3] COG • Characteristics of ABS • COGs (set of objects) • Cooperativescheduling • Java translator • No support for distribution yet obj obj COG await fut?; call() obj obj obj obj View of an ABS program with 6 objects and 2 COGs

  16. Active & passive objects ASP/ProActive Complexsemantic but scales Active objectsonly Creol [4] A lot of threads Active Object Models Uniform Model Non Uniform Model Object Group Model All objects are accessible One thread for manyobjects • JCoBox [5], ABS • A lot of global references to manage if not in shared-memory Server server = new cog Server(); ID serverId = server!getId(); // serverIdis a direct reference // to an object in another COG Example of ABS program

  17. Toward translation of ABS in ProActive • Select active objects • COG = ProActive active object • Entry point to the local memoryspace • Hierarchicalindexing of objects COG registry (RMI) Global index via the network Object registry (in a COG) Local index via sharedmemory

  18. Translation of a new cogstatement ABS code: Server server = new cog Server() Translatedduring compilation into: Server server = new Server() (1) COG cog = newActive(COG.class, {}, node2) (2) cog.registerObject(server) (3) node2 node1 remote server (3) server main cog (1) cog (proxy) cog (2) (2)

  19. Explicit vs Transparent ABS ProActive Transparent asynchonous calls Transparent first class futures • Explicit asynchronous calls • Explicit futures object.method()// synchronous or asynchronous object.method()// synchronous object!method() // asynchronous Fut<T> future = object!method(); Tt = future.get; // blocks Tfuture = object.method();

  20. Translation of an async. method call ABS code: server!start() Translatedduring compilation into: server.getCog().execute("start", {},server.getID()) COG node1 node2 Objectsregistry server remote server main cog Object ID getCog Object ref execute cog (proxy) start execute = 1-retrieve objectwith id 2-run by reflection cog execute

  21. Async. Method Call withParameters ABS code: server!start(param1, param2) Translatedduring compilation into: server.getCog().execute("start", {param1, param2}, server1.getID()) node1 node2 copy of param1 remoteserver server param1 main cog start getCog execute param2 copy of param2 main cog proxies cog (proxy) cog execute

  22. MultiActiveObjects(extendedProActive) Creol JCoBox ABS ProActive Threading Models in Active Objects Local Concurrency Cooperative Single-threaded Multi-threaded Fut<T> resFut = object!method(); awaitresFut?; Let anotherrequestexecute if resFutis not resolved

  23. Translation of an awaitstatement ABS code: current thread (1) (1) Fut<Bool> readyFut = server!start() awaitreadyFut? (2) (2) Translatedduring compilation into: (1) (2) PAFuture.getFutureValue(readyFut) (2) Blocks! # of active threads = 0 @DefineGroups({ @Group(name="scheduling", selfCompatible=true) }) @DefineThreadConfig(threadPoolSize=1, hardLimit=false) publicclass COG { @MemberOf("scheduling") public ABSTypeexecute(…) { } } other thread

  24. Translation of a getstatement ABS code: (1) Fut<Bool> readyFut = server!run() Boolready = readyFut.get (2) Limit = 1 thread in total Translatedduring compilation into: (2) this.getCOG().switchHardLimit(true); Booleanready = PAFuture.getFutureValue(readyFut); this.getCOG().switchHardLimit(false); Blocks all executions! Limit = 1 active thread

  25. Direct Modifications for Distribution • Serialization • Most classes implementsnow "Serializable" • Somefields in COG have been made "transient" • Deployment • Nodespecificationadded in the ABS language Server server = new cog"slaves" Server(); <GCMDeployment> <hosts id="slaves" hostCapacity="1"/> <sshGrouphostList="machine1 machine2" /> </GCMDeployment> <GCMApplication> <virtualNode id="slaves"> <nodeProvidercapacity="4"/> </virtualNode> </GCMApplication> XML files required to configure the application deployment

  26. Conclusion – A FullyWorkingTool • Translation of await on conditions • Customized group with thread limits • Automated compilation & deployment of ABS programs • Usinganttasks & python scripts • Tested on a cluster of 25 machines on the Grid5000 platform await a == True && b == False?; @Group(name="waiting", selfCompatible=true, minThreads=50, maxThreads=50) ABS programs cannowbeeasilydistributed Invited in Oslo university to present the project

  27. PART IIITowardsFaultTolerance of AO A CheckpointingProtocol for MultiActiveObjects

  28. Motivation • Goal • Faulttolerance for MultiactiveObjects • Adaptedcheckpointingprotocol • Challenge • Difficult in mono-threaded active objects • Even more in multiactiveobjects! • Understanding of the threading model BOUM

  29. Example in Mono-threadedMode 3 I Q2 Serv(Q1) Serv(Q2) 3 J Q1 R1 2 3 K

  30. Example Correct Solution 3 I Q2 Serv(Q2) Serv(Q1) 3 J Q1 R1 BIS 3 K

  31. Multi-threaded Mode – Problem checkpointhere? I or here? J K

  32. Guidelines • Use possibilities of MultiactiveObjects • Prioritiescheckpointingrequests • Thread limits flush on goingexecutions Object MultiActiveObject a a.checkpoint() decreaseThreadPoolSize() switchHardLimit(true)

  33. Conclusion COMPLETE Step#1Learn about our active objects ON GOING Step#2Experimentwithotherkind of active objects IN MIND Step#3Build new protocolsaround active objects

  34. Publications • An Optimal BroadcastAlgorithm for Content Addressable Networks • Ludovic Henrio, Fabice Huet, Justine Rochas – OPODIS 2013 • DeclarativeScheduling for Active Objects • Ludovic Henrio, Justine Rochas – SAC 2014 References [1] Active object: an object behavioral pattern for concurrent programming, R.G. Lavender and D. C. Schmidt [2] Multi-threaded Active Objects Ludovic Henrio, Fabrice Huet, Zsolt István – Coordination Models and Languages 2013 [3] ABS: A Core Language for Abstract Behavioral Specification Einar Broch Johnsen, Reiner Hähnle, Jan Schäfer, Rudolf Schlatte, Martin Steffen – FMCO 2012 [4] Creol: A type-safe object-oriented model for distributed concurrent systems EinarBrochJohnsen, Olaf Owe, Ingrid Chieh Yu – FMCO 2006 [5] JCoBox: Generalizing Active Objects to Concurrent Components Jan Schäfer, Arnd Poetzsch-Heffter – ECOOP 2010

  35. Advanced Slides Implementationdetails

  36. awaitstatement on a condition @DefineGroups({ @Group(name="scheduling", selfCompatible=true), @Group(name="waiting", selfCompatible=true, minThreads=50, maxThreads=50) }) @DefineThreadConfig(hardLimit=false, threadPoolSize=51) publicclass COG { @MemberOf("scheduling") public ABSTypeexecute(…) { } @MemberOf("waiting") public ABSTypeawaitCondition(String conditionName, UUID targetObject …){ } } // InvokeconditionNamemethodthatactivelywaits for the condition // This methodisgeneratedwhencompiling

  37. COG Management @DefineGroups({ @Group(name="scheduling", selfCompatible=true), @Group(name="waiting", selfCompatible=true, minThreads=50, maxThreads=50), @Group(name="absmetadata", selfCompatible=true, minThreads=50, maxThreads=50) }) @DefineThreadConfig(hardLimit=false, threadPoolSize=101) publicclass COG { @MemberOf("scheduling") public ABSTypeexecute(…) { } @MemberOf("waiting") public ABSTypeawaitCondition(…){ } @MemberOf("absmetadata") public ABSTypegetObjectByKey(UUID objectID){ } @MemberOf("absmetadata") public ABSTypeswitchHardLimit(booleanhardLimit){ } … } // There isstillonly one // thread for the execution // ABS behaviorispreserved

More Related